--- /dev/null
+--- a/include/asm-x86_64/pda.h 2006-11-29 22:57:37.000000000 +0100
++++ b/include/asm-x86_64/pda.h 2007-01-24 00:42:01.207003500 +0100
+@@ -55,22 +55,22 @@
+ if (0) { T__ tmp__; tmp__ = (val); } /* type checking */ \
+ switch (sizeof(_proxy_pda.field)) { \
+ case 2: \
+- asm(op "w %1,%%gs:%c2" : \
+- "+m" (_proxy_pda.field) : \
++ asm volatile(op "w %0,%%gs:%c1" :: \
+ "ri" ((T__)val), \
+- "i"(pda_offset(field))); \
++ "i"(pda_offset(field)) : \
++ "memory");\
+ break; \
+ case 4: \
+- asm(op "l %1,%%gs:%c2" : \
+- "+m" (_proxy_pda.field) : \
++ asm volatile(op "l %0,%%gs:%c1" :: \
+ "ri" ((T__)val), \
+- "i" (pda_offset(field))); \
++ "i" (pda_offset(field)): \
++ "memory");\
+ break; \
+ case 8: \
+- asm(op "q %1,%%gs:%c2": \
+- "+m" (_proxy_pda.field) : \
++ asm volatile(op "q %0,%%gs:%c1" :: \
+ "ri" ((T__)val), \
+- "i"(pda_offset(field))); \
++ "i"(pda_offset(field)): \
++ "memory");\
+ break; \
+ default: \
+ __bad_pda_field(); \
+@@ -81,22 +81,22 @@
+ typeof(_proxy_pda.field) ret__; \
+ switch (sizeof(_proxy_pda.field)) { \
+ case 2: \
+- asm(op "w %%gs:%c1,%0" : \
++ asm volatile(op "w %%gs:%c1,%0" : \
+ "=r" (ret__) : \
+- "i" (pda_offset(field)), \
+- "m" (_proxy_pda.field)); \
++ "i" (pda_offset(field)) : \
++ "memory");\
+ break; \
+ case 4: \
+- asm(op "l %%gs:%c1,%0": \
++ asm volatile(op "l %%gs:%c1,%0": \
+ "=r" (ret__): \
+- "i" (pda_offset(field)), \
+- "m" (_proxy_pda.field)); \
++ "i" (pda_offset(field)) : \
++ "memory");\
+ break; \
+ case 8: \
+- asm(op "q %%gs:%c1,%0": \
++ asm volatile(op "q %%gs:%c1,%0": \
+ "=r" (ret__) : \
+- "i" (pda_offset(field)), \
+- "m" (_proxy_pda.field)); \
++ "i" (pda_offset(field)) : \
++ "memory");\
+ break; \
+ default: \
+ __bad_pda_field(); \
+@@ -112,8 +112,8 @@
+ /* This is not atomic against other CPUs -- CPU preemption needs to be off */
+ #define test_and_clear_bit_pda(bit,field) ({ \
+ int old__; \
+- asm volatile("btr %2,%%gs:%c3\n\tsbbl %0,%0" \
+- : "=r" (old__), "+m" (_proxy_pda.field) \
++ asm volatile("btr %1,%%gs:%c2\n\tsbbl %0,%0" \
++ : "=r" (old__) \
+ : "dIr" (bit), "i" (pda_offset(field)) : "memory"); \
+ old__; \
+ })