aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/pda.h
diff options
context:
space:
mode:
authorCyrill Gorcunov <gorcunov@gmail.com>2008-01-30 07:31:25 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:31:25 -0500
commitfe758fb1192790f8e465a7f59efe47ca73717d3e (patch)
treed433aa363e56f14fbdffad0b191ad5ccfce93951 /include/asm-x86/pda.h
parentc6b48324325ffb637c3aafb2d795408febf40198 (diff)
x86: clean up include/asm-x86/pda.h
clean up include/asm-x86/pda.h, as suggested by checkpatch.pl. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'include/asm-x86/pda.h')
-rw-r--r--include/asm-x86/pda.h70
1 files changed, 35 insertions, 35 deletions
diff --git a/include/asm-x86/pda.h b/include/asm-x86/pda.h
index b620d0c39a93..c0305bff0f19 100644
--- a/include/asm-x86/pda.h
+++ b/include/asm-x86/pda.h
@@ -7,15 +7,15 @@
7#include <linux/cache.h> 7#include <linux/cache.h>
8#include <asm/page.h> 8#include <asm/page.h>
9 9
10/* Per processor datastructure. %gs points to it while the kernel runs */ 10/* Per processor datastructure. %gs points to it while the kernel runs */
11struct x8664_pda { 11struct x8664_pda {
12 struct task_struct *pcurrent; /* 0 Current process */ 12 struct task_struct *pcurrent; /* 0 Current process */
13 unsigned long data_offset; /* 8 Per cpu data offset from linker 13 unsigned long data_offset; /* 8 Per cpu data offset from linker
14 address */ 14 address */
15 unsigned long kernelstack; /* 16 top of kernel stack for current */ 15 unsigned long kernelstack; /* 16 top of kernel stack for current */
16 unsigned long oldrsp; /* 24 user rsp for system call */ 16 unsigned long oldrsp; /* 24 user rsp for system call */
17 int irqcount; /* 32 Irq nesting counter. Starts with -1 */ 17 int irqcount; /* 32 Irq nesting counter. Starts -1 */
18 unsigned int cpunumber; /* 36 Logical CPU number */ 18 unsigned int cpunumber; /* 36 Logical CPU number */
19#ifdef CONFIG_CC_STACKPROTECTOR 19#ifdef CONFIG_CC_STACKPROTECTOR
20 unsigned long stack_canary; /* 40 stack canary value */ 20 unsigned long stack_canary; /* 40 stack canary value */
21 /* gcc-ABI: this canary MUST be at 21 /* gcc-ABI: this canary MUST be at
@@ -44,10 +44,10 @@ extern void pda_init(int);
44 44
45#define cpu_pda(i) (_cpu_pda[i]) 45#define cpu_pda(i) (_cpu_pda[i])
46 46
47/* 47/*
48 * There is no fast way to get the base address of the PDA, all the accesses 48 * There is no fast way to get the base address of the PDA, all the accesses
49 * have to mention %fs/%gs. So it needs to be done this Torvaldian way. 49 * have to mention %fs/%gs. So it needs to be done this Torvaldian way.
50 */ 50 */
51extern void __bad_pda_field(void) __attribute__((noreturn)); 51extern void __bad_pda_field(void) __attribute__((noreturn));
52 52
53/* 53/*
@@ -58,70 +58,70 @@ extern struct x8664_pda _proxy_pda;
58 58
59#define pda_offset(field) offsetof(struct x8664_pda, field) 59#define pda_offset(field) offsetof(struct x8664_pda, field)
60 60
61#define pda_to_op(op,field,val) do { \ 61#define pda_to_op(op, field, val) do { \
62 typedef typeof(_proxy_pda.field) T__; \ 62 typedef typeof(_proxy_pda.field) T__; \
63 if (0) { T__ tmp__; tmp__ = (val); } /* type checking */ \ 63 if (0) { T__ tmp__; tmp__ = (val); } /* type checking */ \
64 switch (sizeof(_proxy_pda.field)) { \ 64 switch (sizeof(_proxy_pda.field)) { \
65 case 2: \ 65 case 2: \
66 asm(op "w %1,%%gs:%c2" : \ 66 asm(op "w %1,%%gs:%c2" : \
67 "+m" (_proxy_pda.field) : \ 67 "+m" (_proxy_pda.field) : \
68 "ri" ((T__)val), \ 68 "ri" ((T__)val), \
69 "i"(pda_offset(field))); \ 69 "i"(pda_offset(field))); \
70 break; \ 70 break; \
71 case 4: \ 71 case 4: \
72 asm(op "l %1,%%gs:%c2" : \ 72 asm(op "l %1,%%gs:%c2" : \
73 "+m" (_proxy_pda.field) : \ 73 "+m" (_proxy_pda.field) : \
74 "ri" ((T__)val), \ 74 "ri" ((T__)val), \
75 "i" (pda_offset(field))); \ 75 "i" (pda_offset(field))); \
76 break; \ 76 break; \
77 case 8: \ 77 case 8: \
78 asm(op "q %1,%%gs:%c2": \ 78 asm(op "q %1,%%gs:%c2": \
79 "+m" (_proxy_pda.field) : \ 79 "+m" (_proxy_pda.field) : \
80 "ri" ((T__)val), \ 80 "ri" ((T__)val), \
81 "i"(pda_offset(field))); \ 81 "i"(pda_offset(field))); \
82 break; \ 82 break; \
83 default: \ 83 default: \
84 __bad_pda_field(); \ 84 __bad_pda_field(); \
85 } \ 85 } \
86 } while (0) 86 } while (0)
87 87
88#define pda_from_op(op,field) ({ \ 88#define pda_from_op(op,field) ({ \
89 typeof(_proxy_pda.field) ret__; \ 89 typeof(_proxy_pda.field) ret__; \
90 switch (sizeof(_proxy_pda.field)) { \ 90 switch (sizeof(_proxy_pda.field)) { \
91 case 2: \ 91 case 2: \
92 asm(op "w %%gs:%c1,%0" : \ 92 asm(op "w %%gs:%c1,%0" : \
93 "=r" (ret__) : \ 93 "=r" (ret__) : \
94 "i" (pda_offset(field)), \ 94 "i" (pda_offset(field)), \
95 "m" (_proxy_pda.field)); \ 95 "m" (_proxy_pda.field)); \
96 break; \ 96 break; \
97 case 4: \ 97 case 4: \
98 asm(op "l %%gs:%c1,%0": \ 98 asm(op "l %%gs:%c1,%0": \
99 "=r" (ret__): \ 99 "=r" (ret__): \
100 "i" (pda_offset(field)), \ 100 "i" (pda_offset(field)), \
101 "m" (_proxy_pda.field)); \ 101 "m" (_proxy_pda.field)); \
102 break; \ 102 break; \
103 case 8: \ 103 case 8: \
104 asm(op "q %%gs:%c1,%0": \ 104 asm(op "q %%gs:%c1,%0": \
105 "=r" (ret__) : \ 105 "=r" (ret__) : \
106 "i" (pda_offset(field)), \ 106 "i" (pda_offset(field)), \
107 "m" (_proxy_pda.field)); \ 107 "m" (_proxy_pda.field)); \
108 break; \ 108 break; \
109 default: \ 109 default: \
110 __bad_pda_field(); \ 110 __bad_pda_field(); \
111 } \ 111 } \
112 ret__; }) 112 ret__; })
113 113
114#define read_pda(field) pda_from_op("mov",field) 114#define read_pda(field) pda_from_op("mov", field)
115#define write_pda(field,val) pda_to_op("mov",field,val) 115#define write_pda(field, val) pda_to_op("mov", field, val)
116#define add_pda(field,val) pda_to_op("add",field,val) 116#define add_pda(field, val) pda_to_op("add", field, val)
117#define sub_pda(field,val) pda_to_op("sub",field,val) 117#define sub_pda(field, val) pda_to_op("sub", field, val)
118#define or_pda(field,val) pda_to_op("or",field,val) 118#define or_pda(field, val) pda_to_op("or", field, val)
119 119
120/* This is not atomic against other CPUs -- CPU preemption needs to be off */ 120/* This is not atomic against other CPUs -- CPU preemption needs to be off */
121#define test_and_clear_bit_pda(bit,field) ({ \ 121#define test_and_clear_bit_pda(bit, field) ({ \
122 int old__; \ 122 int old__; \
123 asm volatile("btr %2,%%gs:%c3\n\tsbbl %0,%0" \ 123 asm volatile("btr %2,%%gs:%c3\n\tsbbl %0,%0" \
124 : "=r" (old__), "+m" (_proxy_pda.field) \ 124 : "=r" (old__), "+m" (_proxy_pda.field) \
125 : "dIr" (bit), "i" (pda_offset(field)) : "memory"); \ 125 : "dIr" (bit), "i" (pda_offset(field)) : "memory"); \
126 old__; \ 126 old__; \
127}) 127})