x86: EFI: fix use of unitialized variable and the cache logic

Andi Kleen pointed out that the cache attribute logic is reverse in
efi_enter_virtual_mode(). This problem alone is harmless as we do not
(yet) do cache attribute conflict resolution. (This bug was not present
in the original EFI submission - I introduced it while fixing up rejects.)

While reviewing this code I noticed a second, worse problem: the use of
uninitialized md->virt_addr.

Fix both problems.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Thomas Gleixner 2008-02-12 19:46:48 +01:00 committed by Ingo Molnar
parent 5d3c8b21e2
commit e85f20518b

View File

@ -428,9 +428,6 @@ void __init efi_enter_virtual_mode(void)
else else
va = efi_ioremap(md->phys_addr, size); va = efi_ioremap(md->phys_addr, size);
if (md->attribute & EFI_MEMORY_WB)
set_memory_uc(md->virt_addr, size);
md->virt_addr = (u64) (unsigned long) va; md->virt_addr = (u64) (unsigned long) va;
if (!va) { if (!va) {
@ -439,6 +436,9 @@ void __init efi_enter_virtual_mode(void)
continue; continue;
} }
if (!(md->attribute & EFI_MEMORY_WB))
set_memory_uc(md->virt_addr, size);
systab = (u64) (unsigned long) efi_phys.systab; systab = (u64) (unsigned long) efi_phys.systab;
if (md->phys_addr <= systab && systab < end) { if (md->phys_addr <= systab && systab < end) {
systab += md->virt_addr - md->phys_addr; systab += md->virt_addr - md->phys_addr;