cf9a4ec79b
Coverity was flagging a recursive include between kernel.h and cpulocals.h. As cpulocals.h also included proc.h, we can move that include statement into kernel.h, and clean up the source files' include statements accordingly.
93 lines
2.8 KiB
C
93 lines
2.8 KiB
C
/* Implementation of CPU local variables generics */
|
|
#ifndef __CPULOCALS_H__
|
|
#define __CPULOCALS_H__
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
/* SMP */
|
|
|
|
#define CPULOCAL_ARRAY [CONFIG_MAX_CPUS]
|
|
|
|
#define get_cpu_var(cpu, name) CPULOCAL_STRUCT[cpu].name
|
|
#define get_cpu_var_ptr(cpu, name) (&(get_cpu_var(cpu, name)))
|
|
#define get_cpulocal_var(name) get_cpu_var(cpuid, name)
|
|
#define get_cpulocal_var_ptr(name) get_cpu_var_ptr(cpuid, name)
|
|
|
|
/* FIXME - padd the structure so that items in the array do not share cacheline
|
|
* with other cpus */
|
|
|
|
#else
|
|
|
|
/* single CPU */
|
|
|
|
#define CPULOCAL_ARRAY
|
|
|
|
#define get_cpulocal_var(name) CPULOCAL_STRUCT.name
|
|
#define get_cpulocal_var_ptr(name) &(get_cpulocal_var(name))
|
|
#define get_cpu_var(cpu, name) get_cpulocal_var(name)
|
|
#define get_cpu_var_ptr(cpu, name) get_cpulocal_var_ptr(name)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define DECLARE_CPULOCAL(type, name) type name
|
|
|
|
#define CPULOCAL_STRUCT __cpu_local_vars
|
|
#define ___CPULOCAL_START struct CPULOCAL_STRUCT {
|
|
#define ___CPULOCAL_END } CPULOCAL_STRUCT CPULOCAL_ARRAY;
|
|
|
|
#define DECLARE_CPULOCAL_START extern ___CPULOCAL_START
|
|
#define DECLARE_CPULOCAL_END ___CPULOCAL_END
|
|
|
|
#define DEFINE_CPULOCAL_VARS struct CPULOCAL_STRUCT CPULOCAL_STRUCT CPULOCAL_ARRAY
|
|
|
|
|
|
/*
|
|
* The global cpu local variables in use
|
|
*/
|
|
DECLARE_CPULOCAL_START
|
|
|
|
/* Process scheduling information and the kernel reentry count. */
|
|
DECLARE_CPULOCAL(struct proc *,proc_ptr);/* pointer to currently running process */
|
|
DECLARE_CPULOCAL(struct proc *,bill_ptr);/* process to bill for clock ticks */
|
|
DECLARE_CPULOCAL(struct proc ,idle_proc);/* stub for an idle process */
|
|
|
|
/*
|
|
* signal whether pagefault is already being handled to detect recursive
|
|
* pagefaults
|
|
*/
|
|
DECLARE_CPULOCAL(int, pagefault_handled);
|
|
|
|
/*
|
|
* which processpage tables are loaded right now. We need to know this because
|
|
* some processes are loaded in each process pagetables and don't have their own
|
|
* pagetables. Therefore we cannot use the proc_ptr pointer
|
|
*/
|
|
DECLARE_CPULOCAL(struct proc *, ptproc);
|
|
|
|
/* CPU private run queues */
|
|
DECLARE_CPULOCAL(struct proc *, run_q_head[NR_SCHED_QUEUES]); /* ptrs to ready list headers */
|
|
DECLARE_CPULOCAL(struct proc *, run_q_tail[NR_SCHED_QUEUES]); /* ptrs to ready list tails */
|
|
DECLARE_CPULOCAL(volatile int, cpu_is_idle); /* let the others know that you are idle */
|
|
|
|
DECLARE_CPULOCAL(volatile int, idle_interrupted); /* to interrupt busy-idle
|
|
while profiling */
|
|
|
|
DECLARE_CPULOCAL(u64_t ,tsc_ctr_switch); /* when did we switched time accounting */
|
|
|
|
/* last values read from cpu when sending ooq msg to scheduler */
|
|
DECLARE_CPULOCAL(u64_t, cpu_last_tsc);
|
|
DECLARE_CPULOCAL(u64_t, cpu_last_idle);
|
|
|
|
|
|
DECLARE_CPULOCAL(char ,fpu_presence); /* whether the cpu has FPU or not */
|
|
DECLARE_CPULOCAL(struct proc * ,fpu_owner); /* who owns the FPU of the local cpu */
|
|
|
|
DECLARE_CPULOCAL_END
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* __CPULOCALS_H__ */
|