fix lguest rmmod "bad pgd"
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 1 Jan 2008 10:48:36 +0000 (21:48 +1100)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 1 Jan 2008 19:30:35 +0000 (11:30 -0800)
After 17d57a9206b4de6ad082ac9f2d2346985abbd2aa ("x86: fix x86-32 early
fixmap initialization.") removing lg.ko caused a printk from vunmap:

mm/memory.c:115: bad pgd 004b3027.

On the second use after module load, the kernel crashes.

This fixes the immediate problem (accessed and dirty bits not set as
expected in pmd_none_or_clear_bad).  I can't see why this would cause
a crash, but I haven't been able to reproduce it once this is applied.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86/kernel/head_32.S

index ac0637a6d71cc75637cff60888c78cbfb5a504b1..fbad51fce672b25f4f30cf24ca81da8bc628a574 100644 (file)
@@ -196,7 +196,7 @@ default_entry:
        /* Do an early initialization of the fixmap area */
        movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
        movl $(swapper_pg_pmd - __PAGE_OFFSET), %eax
-       addl $0x007, %eax                       /* 0x007 = PRESENT+RW+USER */
+       addl $0x67, %eax                        /* 0x67 == _PAGE_TABLE */
        movl %eax, 4092(%edx)
 
        xorl %ebx,%ebx                          /* This is the boot CPU (BSP) */