aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64/include/pcpu.h
diff options
context:
space:
mode:
authorJason A. Harmening <jah@FreeBSD.org>2017-02-19 02:03:09 +0000
committerJason A. Harmening <jah@FreeBSD.org>2017-02-19 02:03:09 +0000
commite2a8d17887d524f824bb1d992483c18072418d3e (patch)
tree9084d36abe2ce04450b2f804f1fcf8409c3b40c5 /sys/amd64/include/pcpu.h
parent5c5df0d99becd2e273d9d71be35b5778adec2399 (diff)
downloadsrc-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.h10
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)