On Thu, 2006-12-28 at 12:45 +0100, bert hubert wrote:
> On Thu, Dec 28, 2006 at 01:23:33PM +1100, Rusty Russell wrote:
> 
> >     Ah, this is your clue, here: looks like the kernel ran BUG() or
> > otherwise failed at address 0xc071b594...  can you send your .config and
> > I can see if I can reproduce?  Your System.map should indicate what's at
> > that address, to...
> 
> c071b562 T bootmem_bootmap_pages
> c071b571 t get_mapsize
> c071b588 t reserve_bootmem_core
> c071b5e2 t free_bootmem_core
> 
> With some gdb trickery, this appears to be line 124 of mm/bootmem.c:

Yep, my bad... As a bonus, your config also found a paravirt problem in
the raid code (patch sent upstream, and attached below).

Here's the two-liner patch (already rolled into the lhype.patch, so you
can simply update).

Thanks very much for the bug report!
Rusty.

diff -r 4ff048622391 arch/i386/kernel/lhype.c
--- a/arch/i386/kernel/lhype.c  Thu Dec 28 16:52:54 2006 +1100
+++ b/arch/i386/kernel/lhype.c  Fri Dec 29 10:21:20 2006 +1100
@@ -446,14 +446,16 @@ static __attribute_used__ __init void lh
        acpi_disabled = 1;
        acpi_ht = 0;
 #endif
-
-       INITRD_START = init_pg_tables_end;
-       INITRD_SIZE = lhype_page.initrd_size;
-       LOADER_TYPE = (LHYPE_LOADER_TYPE << 4) | LHYPE_LOADER_VERSION;
-
-       /* Bootmem puts allocator bitmap immediately after boot page tables,
-          so tell it pagetables cover this, too. */
-       init_pg_tables_end += lhype_page.initrd_size;
+       if (lhype_page.initrd_size) {
+               INITRD_START = init_pg_tables_end;
+               INITRD_SIZE = lhype_page.initrd_size;
+               LOADER_TYPE = (LHYPE_LOADER_TYPE << 4) | LHYPE_LOADER_VERSION;
+
+               /* Bootmem puts allocator bitmap immediately after
+                  boot page tables, so tell it pagetables cover this, too. */
+               init_pg_tables_end += lhype_page.initrd_size;
+       }
+
        start_kernel();
 }
 

Use correct macros in raid code, not raw asm.

This make sure it's paravirtualized correctly when CONFIG_PARAVIRT=y.

Signed-off-by: Rusty Russell <[EMAIL PROTECTED]>

diff -r 4ff048622391 drivers/md/raid6x86.h
--- a/drivers/md/raid6x86.h	Thu Dec 28 16:52:54 2006 +1100
+++ b/drivers/md/raid6x86.h	Fri Dec 29 10:09:38 2006 +1100
@@ -75,13 +75,14 @@ static inline unsigned long raid6_get_fp
 	unsigned long cr0;
 
 	preempt_disable();
-	asm volatile("mov %%cr0,%0 ; clts" : "=r" (cr0));
+	cr0 = read_cr0();
+	clts();
 	return cr0;
 }
 
 static inline void raid6_put_fpu(unsigned long cr0)
 {
-	asm volatile("mov %0,%%cr0" : : "r" (cr0));
+	write_cr0(cr0);
 	preempt_enable();
 }
 
_______________________________________________
Virtualization mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/virtualization

Reply via email to