diff options
Diffstat (limited to 'include/acpi/platform/aclinux.h')
| -rw-r--r-- | include/acpi/platform/aclinux.h | 20 | 
1 files changed, 19 insertions, 1 deletions
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 5d2a5e9544d9..f72403c4b51a 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h @@ -59,7 +59,7 @@  #include <linux/ctype.h>  #include <linux/sched.h>  #include <asm/system.h> -#include <asm/atomic.h> +#include <linux/atomic.h>  #include <asm/div64.h>  #include <asm/acpi.h>  #include <linux/slab.h> @@ -159,6 +159,24 @@ static inline void *acpi_os_acquire_object(acpi_cache_t * cache)  	} while (0)  #endif +/* + * When lockdep is enabled, the spin_lock_init() macro stringifies it's + * argument and uses that as a name for the lock in debugging. + * By executing spin_lock_init() in a macro the key changes from "lock" for + * all locks to the name of the argument of acpi_os_create_lock(), which + * prevents lockdep from reporting false positives for ACPICA locks. + */ +#define acpi_os_create_lock(__handle)				\ +({								\ +	spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock));	\ +								\ +	if (lock) {						\ +		*(__handle) = lock;				\ +		spin_lock_init(*(__handle));			\ +	}							\ +	lock ? AE_OK : AE_NO_MEMORY;				\ +}) +  #endif /* __KERNEL__ */  #endif /* __ACLINUX_H__ */  |