cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

processor.h (2207B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2012 Regents of the University of California
      4 */
      5
      6#ifndef _ASM_RISCV_PROCESSOR_H
      7#define _ASM_RISCV_PROCESSOR_H
      8
      9#include <linux/const.h>
     10
     11#include <vdso/processor.h>
     12
     13#include <asm/ptrace.h>
     14
     15/*
     16 * This decides where the kernel will search for a free chunk of vm
     17 * space during mmap's.
     18 */
     19#define TASK_UNMAPPED_BASE	PAGE_ALIGN(TASK_SIZE / 3)
     20
     21#define STACK_TOP		TASK_SIZE
     22#ifdef CONFIG_64BIT
     23#define STACK_TOP_MAX		TASK_SIZE_64
     24#else
     25#define STACK_TOP_MAX		TASK_SIZE
     26#endif
     27#define STACK_ALIGN		16
     28
     29#ifndef __ASSEMBLY__
     30
     31struct task_struct;
     32struct pt_regs;
     33
     34/* CPU-specific state of a task */
     35struct thread_struct {
     36	/* Callee-saved registers */
     37	unsigned long ra;
     38	unsigned long sp;	/* Kernel mode stack */
     39	unsigned long s[12];	/* s[0]: frame pointer */
     40	struct __riscv_d_ext_state fstate;
     41	unsigned long bad_cause;
     42};
     43
     44/* Whitelist the fstate from the task_struct for hardened usercopy */
     45static inline void arch_thread_struct_whitelist(unsigned long *offset,
     46						unsigned long *size)
     47{
     48	*offset = offsetof(struct thread_struct, fstate);
     49	*size = sizeof_field(struct thread_struct, fstate);
     50}
     51
     52#define INIT_THREAD {					\
     53	.sp = sizeof(init_stack) + (long)&init_stack,	\
     54}
     55
     56#define task_pt_regs(tsk)						\
     57	((struct pt_regs *)(task_stack_page(tsk) + THREAD_SIZE		\
     58			    - ALIGN(sizeof(struct pt_regs), STACK_ALIGN)))
     59
     60#define KSTK_EIP(tsk)		(task_pt_regs(tsk)->epc)
     61#define KSTK_ESP(tsk)		(task_pt_regs(tsk)->sp)
     62
     63
     64/* Do necessary setup to start up a newly executed thread. */
     65extern void start_thread(struct pt_regs *regs,
     66			unsigned long pc, unsigned long sp);
     67
     68/* Free all resources held by a thread. */
     69static inline void release_thread(struct task_struct *dead_task)
     70{
     71}
     72
     73extern unsigned long __get_wchan(struct task_struct *p);
     74
     75
     76static inline void wait_for_interrupt(void)
     77{
     78	__asm__ __volatile__ ("wfi");
     79}
     80
     81struct device_node;
     82int riscv_of_processor_hartid(struct device_node *node);
     83int riscv_of_parent_hartid(struct device_node *node);
     84
     85extern void riscv_fill_hwcap(void);
     86extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
     87
     88#endif /* __ASSEMBLY__ */
     89
     90#endif /* _ASM_RISCV_PROCESSOR_H */