diff options
author | Len Brown <len.brown@intel.com> | 2006-07-10 01:35:51 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2006-07-10 02:37:22 -0400 |
commit | e21c1ca3f98529921c829a792dfdbfc5a5dc393b (patch) | |
tree | fdb0a3c00d46db197ae65e6c66fc841b194cb507 /include | |
parent | b3cf257623fabd8f1ee6700a6d328cc1c5da5a1d (diff) |
ACPI: acpi_os_allocate() fixes
Replace acpi_in_resume with a more general hack
to check irqs_disabled() on any kmalloc() from ACPI.
While setting (system_state != SYSTEM_RUNNING) on resume
seemed more general, Andrew Morton preferred this approach.
http://bugzilla.kernel.org/show_bug.cgi?id=3469
Make acpi_os_allocate() into an inline function to
allow /proc/slab_allocators to work.
Delete some memset() that could fault on allocation failure.
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/acpi/acmacros.h | 8 | ||||
-rw-r--r-- | include/acpi/platform/aclinux.h | 22 |
2 files changed, 29 insertions, 1 deletions
diff --git a/include/acpi/acmacros.h b/include/acpi/acmacros.h index f1ac6109556e..192fa095a515 100644 --- a/include/acpi/acmacros.h +++ b/include/acpi/acmacros.h | |||
@@ -724,9 +724,15 @@ | |||
724 | 724 | ||
725 | /* Memory allocation */ | 725 | /* Memory allocation */ |
726 | 726 | ||
727 | #ifndef ACPI_ALLOCATE | ||
727 | #define ACPI_ALLOCATE(a) acpi_ut_allocate((acpi_size)(a),_COMPONENT,_acpi_module_name,__LINE__) | 728 | #define ACPI_ALLOCATE(a) acpi_ut_allocate((acpi_size)(a),_COMPONENT,_acpi_module_name,__LINE__) |
729 | #endif | ||
730 | #ifndef ACPI_ALLOCATE_ZEROED | ||
728 | #define ACPI_ALLOCATE_ZEROED(a) acpi_ut_allocate_zeroed((acpi_size)(a), _COMPONENT,_acpi_module_name,__LINE__) | 731 | #define ACPI_ALLOCATE_ZEROED(a) acpi_ut_allocate_zeroed((acpi_size)(a), _COMPONENT,_acpi_module_name,__LINE__) |
729 | #define ACPI_FREE(a) kfree(a) | 732 | #endif |
733 | #ifndef ACPI_FREE | ||
734 | #define ACPI_FREE(a) acpio_os_free(a) | ||
735 | #endif | ||
730 | #define ACPI_MEM_TRACKING(a) | 736 | #define ACPI_MEM_TRACKING(a) |
731 | 737 | ||
732 | #else | 738 | #else |
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 3f853cabbd41..f0118262ac27 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h | |||
@@ -104,4 +104,26 @@ | |||
104 | 104 | ||
105 | static inline acpi_thread_id acpi_os_get_thread_id(void) { return 0; } | 105 | static inline acpi_thread_id acpi_os_get_thread_id(void) { return 0; } |
106 | 106 | ||
107 | /* | ||
108 | * The irqs_disabled() check is for resume from RAM. | ||
109 | * Interrupts are off during resume, just like they are for boot. | ||
110 | * However, boot has (system_state != SYSTEM_RUNNING) | ||
111 | * to quiet __might_sleep() in kmalloc() and resume does not. | ||
112 | */ | ||
113 | #include <acpi/actypes.h> | ||
114 | static inline void *acpi_os_allocate(acpi_size size) { | ||
115 | return kmalloc(size, irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL); | ||
116 | } | ||
117 | static inline void *acpi_os_allocate_zeroed(acpi_size size) { | ||
118 | return kzalloc(size, irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL); | ||
119 | } | ||
120 | |||
121 | static inline void *acpi_os_acquire_object(acpi_cache_t * cache) { | ||
122 | return kmem_cache_zalloc(cache, irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL); | ||
123 | } | ||
124 | |||
125 | #define ACPI_ALLOCATE(a) acpi_os_allocate(a) | ||
126 | #define ACPI_ALLOCATE_ZEROED(a) acpi_os_allocate_zeroed(a) | ||
127 | #define ACPI_FREE(a) kfree(a) | ||
128 | |||
107 | #endif /* __ACLINUX_H__ */ | 129 | #endif /* __ACLINUX_H__ */ |