Bah, revert the previous commit for the time being due to inadequate testing
on my part. The output asm looks correct with the previous commit in place and it works on amd64, but on my laptop I got a spew of AE_BAD_PARAMETER errors trying to unlock the acpi global lock.
This commit is contained in:
parent
7fed69ee80
commit
8375d3a4bc
@ -72,27 +72,29 @@
|
||||
*/
|
||||
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
|
||||
do { \
|
||||
asm("1: movl %1,%%eax;" \
|
||||
int dummy; \
|
||||
asm("1: movl (%1),%%eax;" \
|
||||
"movl %%eax,%%edx;" \
|
||||
"andl %2,%%edx;" \
|
||||
"btsl $0x1,%%edx;" \
|
||||
"adcl $0x0,%%edx;" \
|
||||
"lock; cmpxchgl %%edx,%1;" \
|
||||
"lock; cmpxchgl %%edx,(%1);" \
|
||||
"jnz 1b;" \
|
||||
"cmpb $0x3,%%dl;" \
|
||||
"sbbl %%eax,%%eax" \
|
||||
: "=a" (Acq), "+m" (GLptr) : "i" (~1L) : "edx"); \
|
||||
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \
|
||||
} while(0)
|
||||
|
||||
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
|
||||
do { \
|
||||
asm("1: movl %1,%%eax;" \
|
||||
int dummy; \
|
||||
asm("1: movl (%1),%%eax;" \
|
||||
"movl %%eax,%%edx;" \
|
||||
"andl %2,%%edx;" \
|
||||
"lock; cmpxchgl %%edx,%1;" \
|
||||
"lock; cmpxchgl %%edx,(%1);" \
|
||||
"jnz 1b;" \
|
||||
"andl $0x1,%%eax" \
|
||||
: "=a" (Acq), "+m" (GLptr) : "i" (~3L) : "edx"); \
|
||||
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \
|
||||
} while(0)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user