aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2008-02-12 13:46:48 -0500
committerIngo Molnar <mingo@elte.hu>2008-02-13 10:20:35 -0500
commite85f20518bb928667508c22090c85d458e25a4f7 (patch)
tree97625e60d0901ec459d2ce245fcaaacf1bd84a4f
parent5d3c8b21e22712137db6bbd246d1bdcbe0a09914 (diff)
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>
-rw-r--r--arch/x86/kernel/efi.c6
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)
428 else 428 else
429 va = efi_ioremap(md->phys_addr, size); 429 va = efi_ioremap(md->phys_addr, size);
430 430
431 if (md->attribute & EFI_MEMORY_WB)
432 set_memory_uc(md->virt_addr, size);
433
434 md->virt_addr = (u64) (unsigned long) va; 431 md->virt_addr = (u64) (unsigned long) va;
435 432
436 if (!va) { 433 if (!va) {
@@ -439,6 +436,9 @@ void __init efi_enter_virtual_mode(void)
439 continue; 436 continue;
440 } 437 }
441 438
439 if (!(md->attribute & EFI_MEMORY_WB))
440 set_memory_uc(md->virt_addr, size);
441
442 systab = (u64) (unsigned long) efi_phys.systab; 442 systab = (u64) (unsigned long) efi_phys.systab;
443 if (md->phys_addr <= systab && systab < end) { 443 if (md->phys_addr <= systab && systab < end) {
444 systab += md->virt_addr - md->phys_addr; 444 systab += md->virt_addr - md->phys_addr;