diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2008-02-12 13:46:48 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-02-13 10:20:35 -0500 |
commit | e85f20518bb928667508c22090c85d458e25a4f7 (patch) | |
tree | 97625e60d0901ec459d2ce245fcaaacf1bd84a4f /arch/x86/kernel/efi.c | |
parent | 5d3c8b21e22712137db6bbd246d1bdcbe0a09914 (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>
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) | |||
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; |