diff options
author | Yinghai Lu <yhlu.kernel@gmail.com> | 2008-07-10 23:36:37 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-11 04:22:33 -0400 |
commit | f302a5bbe5eb95f3d4227d5bd0e9b92b1b125f4f (patch) | |
tree | 876a3611b657898ea197c686e6aa4ab779541dd5 /arch/x86/mm/srat_64.c | |
parent | 69a7704d7a80b2563278a0c55c2ca6d6202280dc (diff) |
x86: reserve SLIT
save the SLIT, in case we are using fixmap to read it, and that fixmap
could be cleared by others.
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/mm/srat_64.c')
-rw-r--r-- | arch/x86/mm/srat_64.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c index 0fd67b81a8b6..1b4763e26ea9 100644 --- a/arch/x86/mm/srat_64.c +++ b/arch/x86/mm/srat_64.c | |||
@@ -100,7 +100,19 @@ static __init inline int srat_disabled(void) | |||
100 | /* Callback for SLIT parsing */ | 100 | /* Callback for SLIT parsing */ |
101 | void __init acpi_numa_slit_init(struct acpi_table_slit *slit) | 101 | void __init acpi_numa_slit_init(struct acpi_table_slit *slit) |
102 | { | 102 | { |
103 | acpi_slit = slit; | 103 | unsigned length; |
104 | unsigned long phys; | ||
105 | |||
106 | length = slit->header.length; | ||
107 | phys = find_e820_area(0, max_pfn_mapped<<PAGE_SHIFT, length, | ||
108 | PAGE_SIZE); | ||
109 | |||
110 | if (phys == -1L) | ||
111 | panic(" Can not save slit!\n"); | ||
112 | |||
113 | acpi_slit = __va(phys); | ||
114 | memcpy(acpi_slit, slit, length); | ||
115 | reserve_early(phys, phys + length, "ACPI SLIT"); | ||
104 | } | 116 | } |
105 | 117 | ||
106 | /* Callback for Proximity Domain -> LAPIC mapping */ | 118 | /* Callback for Proximity Domain -> LAPIC mapping */ |