Loading include/asm-x86/pda.h +42 −38 Original line number Diff line number Diff line Loading @@ -57,7 +57,8 @@ extern struct x8664_pda _proxy_pda; #define pda_offset(field) offsetof(struct x8664_pda, field) #define pda_to_op(op, field, val) do { \ #define pda_to_op(op, field, val) \ do { \ typedef typeof(_proxy_pda.field) T__; \ if (0) { T__ tmp__; tmp__ = (val); } /* type checking */ \ switch (sizeof(_proxy_pda.field)) { \ Loading @@ -84,7 +85,8 @@ extern struct x8664_pda _proxy_pda; } \ } while (0) #define pda_from_op(op,field) ({ \ #define pda_from_op(op, field) \ ({ \ typeof(_proxy_pda.field) ret__; \ switch (sizeof(_proxy_pda.field)) { \ case 2: \ Loading @@ -108,7 +110,8 @@ extern struct x8664_pda _proxy_pda; default: \ __bad_pda_field(); \ } \ ret__; }) ret__; \ }) #define read_pda(field) pda_from_op("mov", field) #define write_pda(field, val) pda_to_op("mov", field, val) Loading @@ -117,7 +120,8 @@ extern struct x8664_pda _proxy_pda; #define or_pda(field, val) pda_to_op("or", field, val) /* This is not atomic against other CPUs -- CPU preemption needs to be off */ #define test_and_clear_bit_pda(bit, field) ({ \ #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) \ Loading Loading
include/asm-x86/pda.h +42 −38 Original line number Diff line number Diff line Loading @@ -57,7 +57,8 @@ extern struct x8664_pda _proxy_pda; #define pda_offset(field) offsetof(struct x8664_pda, field) #define pda_to_op(op, field, val) do { \ #define pda_to_op(op, field, val) \ do { \ typedef typeof(_proxy_pda.field) T__; \ if (0) { T__ tmp__; tmp__ = (val); } /* type checking */ \ switch (sizeof(_proxy_pda.field)) { \ Loading @@ -84,7 +85,8 @@ extern struct x8664_pda _proxy_pda; } \ } while (0) #define pda_from_op(op,field) ({ \ #define pda_from_op(op, field) \ ({ \ typeof(_proxy_pda.field) ret__; \ switch (sizeof(_proxy_pda.field)) { \ case 2: \ Loading @@ -108,7 +110,8 @@ extern struct x8664_pda _proxy_pda; default: \ __bad_pda_field(); \ } \ ret__; }) ret__; \ }) #define read_pda(field) pda_from_op("mov", field) #define write_pda(field, val) pda_to_op("mov", field, val) Loading @@ -117,7 +120,8 @@ extern struct x8664_pda _proxy_pda; #define or_pda(field, val) pda_to_op("or", field, val) /* This is not atomic against other CPUs -- CPU preemption needs to be off */ #define test_and_clear_bit_pda(bit, field) ({ \ #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) \ Loading