diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2008-02-12 19:46:48 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-02-13 16:20:35 +0100 |
commit | e85f20518bb928667508c22090c85d458e25a4f7 (patch) | |
tree | 97625e60d0901ec459d2ce245fcaaacf1bd84a4f /arch/x86/kernel/efi.c | |
parent | 5d3c8b21e22712137db6bbd246d1bdcbe0a09914 (diff) | |
download | linux-e85f20518bb928667508c22090c85d458e25a4f7.tar.gz linux-e85f20518bb928667508c22090c85d458e25a4f7.tar.bz2 linux-e85f20518bb928667508c22090c85d458e25a4f7.zip |
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>
Diffstat (limited to 'arch/x86/kernel/efi.c')
-rw-r--r-- | arch/x86/kernel/efi.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c index 32dd62b36ff7..b4d523276f40 100644 --- a/arch/x86/kernel/efi.c +++ b/arch/x86/kernel/efi.c @@ -428,9 +428,6 @@ void __init efi_enter_virtual_mode(void) else 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; if (!va) { @@ -439,6 +436,9 @@ void __init efi_enter_virtual_mode(void) continue; } + if (!(md->attribute & EFI_MEMORY_WB)) + set_memory_uc(md->virt_addr, size); + systab = (u64) (unsigned long) efi_phys.systab; if (md->phys_addr <= systab && systab < end) { systab += md->virt_addr - md->phys_addr; |