diff options
author | Jason A. Harmening <jah@FreeBSD.org> | 2017-02-19 02:03:09 +0000 |
---|---|---|
committer | Jason A. Harmening <jah@FreeBSD.org> | 2017-02-19 02:03:09 +0000 |
commit | e2a8d17887d524f824bb1d992483c18072418d3e (patch) | |
tree | 9084d36abe2ce04450b2f804f1fcf8409c3b40c5 /sys/amd64/include/pcpu.h | |
parent | 5c5df0d99becd2e273d9d71be35b5778adec2399 (diff) | |
download | src-e2a8d17887d524f824bb1d992483c18072418d3e.tar.gz src-e2a8d17887d524f824bb1d992483c18072418d3e.zip |
Bring back r313037, with fixes for mips:
Implement get_pcpu() for amd64/sparc64/mips/powerpc, and use it to
replace pcpu_find(curcpu) in MI code.
Reviewed by: andreast, kan, lidl
Tested by: lidl(mips, sparc64), andreast(powerpc)
Differential Revision: https://reviews.freebsd.org/D9587
Notes
Notes:
svn path=/head/; revision=313930
Diffstat (limited to 'sys/amd64/include/pcpu.h')
-rw-r--r-- | sys/amd64/include/pcpu.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h index a4f4e1dc731f..7e3c1b0bbb27 100644 --- a/sys/amd64/include/pcpu.h +++ b/sys/amd64/include/pcpu.h @@ -78,6 +78,7 @@ extern struct pcpu *pcpup; +#define get_pcpu() (pcpup) #define PCPU_GET(member) (pcpup->pc_ ## member) #define PCPU_ADD(member, val) (pcpup->pc_ ## member += (val)) #define PCPU_INC(member) PCPU_ADD(member, 1) @@ -203,6 +204,15 @@ extern struct pcpu *pcpup; } \ } +#define get_pcpu() __extension__ ({ \ + struct pcpu *__pc; \ + \ + __asm __volatile("movq %%gs:%1,%0" \ + : "=r" (__pc) \ + : "m" (*(struct pcpu *)(__pcpu_offset(pc_prvspace)))); \ + __pc; \ +}) + #define PCPU_GET(member) __PCPU_GET(pc_ ## member) #define PCPU_ADD(member, val) __PCPU_ADD(pc_ ## member, val) #define PCPU_INC(member) __PCPU_INC(pc_ ## member) |