aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/acpi/sleep.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/acpi/sleep.c')
-rw-r--r--arch/x86/kernel/acpi/sleep.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
index ca93638ba430..4a411450dfa0 100644
--- a/arch/x86/kernel/acpi/sleep.c
+++ b/arch/x86/kernel/acpi/sleep.c
@@ -119,29 +119,32 @@ void acpi_restore_state_mem(void)
119 119
120 120
121/** 121/**
122 * acpi_reserve_bootmem - do _very_ early ACPI initialisation 122 * acpi_reserve_wakeup_memory - do _very_ early ACPI initialisation
123 * 123 *
124 * We allocate a page from the first 1MB of memory for the wakeup 124 * We allocate a page from the first 1MB of memory for the wakeup
125 * routine for when we come back from a sleep state. The 125 * routine for when we come back from a sleep state. The
126 * runtime allocator allows specification of <16MB pages, but not 126 * runtime allocator allows specification of <16MB pages, but not
127 * <1MB pages. 127 * <1MB pages.
128 */ 128 */
129void __init acpi_reserve_bootmem(void) 129void __init acpi_reserve_wakeup_memory(void)
130{ 130{
131 unsigned long mem;
132
131 if ((&wakeup_code_end - &wakeup_code_start) > WAKEUP_SIZE) { 133 if ((&wakeup_code_end - &wakeup_code_start) > WAKEUP_SIZE) {
132 printk(KERN_ERR 134 printk(KERN_ERR
133 "ACPI: Wakeup code way too big, S3 disabled.\n"); 135 "ACPI: Wakeup code way too big, S3 disabled.\n");
134 return; 136 return;
135 } 137 }
136 138
137 acpi_realmode = (unsigned long)alloc_bootmem_low(WAKEUP_SIZE); 139 mem = find_e820_area(0, 1<<20, WAKEUP_SIZE, PAGE_SIZE);
138 140
139 if (!acpi_realmode) { 141 if (mem == -1L) {
140 printk(KERN_ERR "ACPI: Cannot allocate lowmem, S3 disabled.\n"); 142 printk(KERN_ERR "ACPI: Cannot allocate lowmem, S3 disabled.\n");
141 return; 143 return;
142 } 144 }
143 145 acpi_realmode = (unsigned long) phys_to_virt(mem);
144 acpi_wakeup_address = virt_to_phys((void *)acpi_realmode); 146 acpi_wakeup_address = mem;
147 reserve_early(mem, mem + WAKEUP_SIZE, "ACPI WAKEUP");
145} 148}
146 149
147 150