aboutsummaryrefslogtreecommitdiffstats
path: root/include/acpi
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2006-07-10 01:35:51 -0400
committerLen Brown <len.brown@intel.com>2006-07-10 02:37:22 -0400
commite21c1ca3f98529921c829a792dfdbfc5a5dc393b (patch)
treefdb0a3c00d46db197ae65e6c66fc841b194cb507 /include/acpi
parentb3cf257623fabd8f1ee6700a6d328cc1c5da5a1d (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/acpi')
-rw-r--r--include/acpi/acmacros.h8
-rw-r--r--include/acpi/platform/aclinux.h22
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
105static inline acpi_thread_id acpi_os_get_thread_id(void) { return 0; } 105static 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>
114static inline void *acpi_os_allocate(acpi_size size) {
115 return kmalloc(size, irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL);
116}
117static inline void *acpi_os_allocate_zeroed(acpi_size size) {
118 return kzalloc(size, irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL);
119}
120
121static 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__ */