Author: jkim
Date: Fri Feb 10 23:30:29 2012
New Revision: 231474
URL: http://svn.freebsd.org/changeset/base/231474

Log:
  De-obfuscate acpi_acquire_global_lock().  It seems the function was directly
  translated from i386 assembly version.

Modified:
  head/sys/dev/acpica/Osd/OsdSynch.c

Modified: head/sys/dev/acpica/Osd/OsdSynch.c
==============================================================================
--- head/sys/dev/acpica/Osd/OsdSynch.c  Fri Feb 10 23:29:08 2012        
(r231473)
+++ head/sys/dev/acpica/Osd/OsdSynch.c  Fri Feb 10 23:30:29 2012        
(r231474)
@@ -566,11 +566,8 @@ AcpiOsReleaseLock(ACPI_SPINLOCK Handle, 
 }
 
 /* Section 5.2.10.1: global lock acquire/release functions */
-#define        GL_ACQUIRED     (-1)
-#define        GL_BUSY         0
 #define        GL_BIT_PENDING  0x01
 #define        GL_BIT_OWNED    0x02
-#define        GL_BIT_MASK     (GL_BIT_PENDING | GL_BIT_OWNED)
 
 /*
  * Acquire the global lock.  If busy, set the pending bit.  The caller
@@ -584,11 +581,12 @@ acpi_acquire_global_lock(uint32_t *lock)
 
        do {
                old = *lock;
-               new = ((old & ~GL_BIT_MASK) | GL_BIT_OWNED) |
-                       ((old >> 1) & GL_BIT_PENDING);
+               new = (old & ~GL_BIT_PENDING) | GL_BIT_OWNED;
+               if ((old & GL_BIT_OWNED) != 0)
+                       new |= GL_BIT_PENDING;
        } while (atomic_cmpset_acq_int(lock, old, new) == 0);
 
-       return ((new < GL_BIT_MASK) ? GL_ACQUIRED : GL_BUSY);
+       return ((new & GL_BIT_PENDING) == 0);
 }
 
 /*
@@ -603,8 +601,8 @@ acpi_release_global_lock(uint32_t *lock)
 
        do {
                old = *lock;
-               new = old & ~GL_BIT_MASK;
+               new = old & ~(GL_BIT_PENDING | GL_BIT_OWNED);
        } while (atomic_cmpset_rel_int(lock, old, new) == 0);
 
-       return (old & GL_BIT_PENDING);
+       return ((old & GL_BIT_PENDING) != 0);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to