Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/include/pcpu.h
Show First 20 Lines • Show All 222 Lines • ▼ Show 20 Lines | |||||
}) | }) | ||||
#define PCPU_GET(member) __PCPU_GET(pc_ ## member) | #define PCPU_GET(member) __PCPU_GET(pc_ ## member) | ||||
#define PCPU_ADD(member, val) __PCPU_ADD(pc_ ## member, val) | #define PCPU_ADD(member, val) __PCPU_ADD(pc_ ## member, val) | ||||
#define PCPU_INC(member) __PCPU_INC(pc_ ## member) | #define PCPU_INC(member) __PCPU_INC(pc_ ## member) | ||||
#define PCPU_PTR(member) __PCPU_PTR(pc_ ## member) | #define PCPU_PTR(member) __PCPU_PTR(pc_ ## member) | ||||
#define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val) | #define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val) | ||||
#define OFFSETOF_CURTHREAD 0 | |||||
#ifdef __clang__ | |||||
#pragma clang diagnostic push | |||||
#pragma clang diagnostic ignored "-Wnull-dereference" | |||||
#endif | |||||
static __inline __pure2 struct thread * | |||||
__curthread(void) | |||||
{ | |||||
struct thread *td; | |||||
__asm("movl %%fs:%1,%0" : "=r" (td) | |||||
: "m" (*(char *)OFFSETOF_CURTHREAD)); | |||||
return (td); | |||||
} | |||||
#ifdef __clang__ | |||||
#pragma clang diagnostic pop | |||||
#endif | |||||
#define curthread (__curthread()) | |||||
#define OFFSETOF_CURPCB 16 | |||||
static __inline __pure2 struct pcb * | |||||
__curpcb(void) | |||||
{ | |||||
struct pcb *pcb; | |||||
__asm("movl %%fs:%1,%0" : "=r" (pcb) : "m" (*(char *)OFFSETOF_CURPCB)); | |||||
return (pcb); | |||||
} | |||||
#define curpcb (__curpcb()) | |||||
#define IS_BSP() (PCPU_GET(cpuid) == 0) | #define IS_BSP() (PCPU_GET(cpuid) == 0) | ||||
#else /* defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) */ | #else /* defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) */ | ||||
#error "this file needs to be ported to your compiler" | #error "this file needs to be ported to your compiler" | ||||
#endif /* __GNUCLIKE_ASM etc. */ | #endif /* __GNUCLIKE_ASM etc. */ | ||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
#endif /* !_MACHINE_PCPU_H_ */ | #endif /* !_MACHINE_PCPU_H_ */ |