x86: e820: Remove conditional early mapping in parse_e820_ext
This patch ensures that the memory passed from parse_setup_data() is large enough to cover the complete data structure. That means that the conditional mapping in parse_e820_ext() can go. While here, I also attempt not to map two pages if the address is not aligned to a page boundary. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com> Cc: sodaville@linutronix.de Cc: devicetree-discuss@lists.ozlabs.org LKML-Reference: <1298405266-1624-2-git-send-email-bigeasy@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
committed by
Thomas Gleixner
parent
cb4cfd568c
commit
f1c2b35714
@@ -429,16 +429,27 @@ static void __init parse_setup_data(void)
|
||||
return;
|
||||
pa_data = boot_params.hdr.setup_data;
|
||||
while (pa_data) {
|
||||
data = early_memremap(pa_data, PAGE_SIZE);
|
||||
u32 data_len, map_len;
|
||||
|
||||
map_len = max(PAGE_SIZE - (pa_data & ~PAGE_MASK),
|
||||
(u64)sizeof(struct setup_data));
|
||||
data = early_memremap(pa_data, map_len);
|
||||
data_len = data->len + sizeof(struct setup_data);
|
||||
if (data_len > map_len) {
|
||||
early_iounmap(data, map_len);
|
||||
data = early_memremap(pa_data, data_len);
|
||||
map_len = data_len;
|
||||
}
|
||||
|
||||
switch (data->type) {
|
||||
case SETUP_E820_EXT:
|
||||
parse_e820_ext(data, pa_data);
|
||||
parse_e820_ext(data);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
pa_data = data->next;
|
||||
early_iounmap(data, PAGE_SIZE);
|
||||
early_iounmap(data, map_len);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user