On Tue, 12 Feb 2008, Andi Kleen wrote:

> On Tuesday 12 February 2008 21:04:06 Thomas Gleixner wrote:
> 
> > 
> > And you just copied the real bug in that logic as well:
> > 
> >           set_memory_uc(md->virt_addr, size);
> 
> Oops you're right. I wanted to fix that, but didn't. Ok I'll put up
> my brown paper back tonight when I go out.
>  
> > ------------------------^^^^^^^^
> > 
> > which is initialized a couple of lines down.
> > 
> >     md->virt_addr = (u64) (unsigned long) va;
> > 
> > The reordering/optimizing needs to be a separate patch.
> 
> What optimizing? It wasn't intended to be an optimization.
> It fixes a bug.

No, it does not. Please go back and read my mail.
 
The code had exactly two bugs:

1) the logic of checking EFI_MEMORY_WB was wrong
2) the uninitialized variable

The fix is:

 arch/x86/kernel/efi.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6/arch/x86/kernel/efi.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/efi.c
+++ linux-2.6/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;

The reordering of code is completely irrelevant. It can be done, but
in a separate patch.

Thanks,

        tglx
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to