X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=include%2Fasm-x86_64%2Fpda.h;h=5642634843c472921ec08802fda4f36ca6a0ce1b;hb=3a3a51d1f2efe10090cd779a66c4b3c8f57eaf9f;hp=14996d962bac782bb67c809a571647d16e5b16cb;hpb=c730f5b621afa33e9f4939da9078669162ebff4e;p=powerpc.git diff --git a/include/asm-x86_64/pda.h b/include/asm-x86_64/pda.h index 14996d962b..5642634843 100644 --- a/include/asm-x86_64/pda.h +++ b/include/asm-x86_64/pda.h @@ -109,6 +109,15 @@ extern struct x8664_pda _proxy_pda; #define sub_pda(field,val) pda_to_op("sub",field,val) #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) ({ \ + int old__; \ + asm volatile("btr %2,%%gs:%c3\n\tsbbl %0,%0" \ + : "=r" (old__), "+m" (_proxy_pda.field) \ + : "dIr" (bit), "i" (pda_offset(field)) : "memory"); \ + old__; \ +}) + #endif #define PDA_STACKOFFSET (5*8)