diff options
Diffstat (limited to 'arch/x86/kernel/acpi')
-rw-r--r-- | arch/x86/kernel/acpi/sleep.c | 15 |
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 | */ |
129 | void __init acpi_reserve_bootmem(void) | 129 | void __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 | ||