lkml.org 
[lkml]   [2000]   [Jan]   [30]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateSun, 30 Jan 2000 12:04:08 +0100 (MET)
FromMikael Pettersson <>
Subjectbug in __flush_tlb_global() ?
I believe there's a bug in the __flush_tlb_global() macro
added to include/asm-i386/pgtable.h in 2.3.40:

#define __flush_tlb_global()						\
	do {								\
		__asm__ __volatile__(					\
			"movl %0, %%cr4; # turn off PGE \n"		\
			"mov %2, %%cr3;  # flush TLB \n"		\
			"mov %1, %%cr4;  # turn PGE back on \n"		\
			:						\
			: "r" (mmu_cr4_features),			\
			  "r" (mmu_cr4_features & ~X86_CR4_PGE),	\
			  "r" (__pa(current->active_mm->pgd))		\
			: "memory");					\
	} while (0)
Consider the comments. The macro uses input %1 to "turn PGE back on",
but input %1 is (mmu_cr4_features & ~X86_CR4_PGE), which cannot
possibly have the PGE bit on. Likewise, it's using input %0 to
"turn off PGE", but input %0 is (mmu_cr4_features), which probably
_does_ have the PGE bit on (see arch/i386/mm/init.c:pagetable_init()).

I may be wrong, but it looks to me as if inputs 0 and 1 have been
swapped. Proposed fix included below.

/Mikael

--- linux-2.3.41/include/asm-i386/pgtable.h.~1~	Sat Jan 29 14:16:35 2000
+++ linux-2.3.41/include/asm-i386/pgtable.h	Sat Jan 29 23:51:44 2000
@@ -48,8 +48,8 @@
 			"mov %2, %%cr3;  # flush TLB \n"		\
 			"mov %1, %%cr4;  # turn PGE back on \n"		\
 			:						\
-			: "r" (mmu_cr4_features),			\
-			  "r" (mmu_cr4_features & ~X86_CR4_PGE),	\
+			: "r" (mmu_cr4_features & ~X86_CR4_PGE),	\
+			  "r" (mmu_cr4_features),			\
 			  "r" (__pa(current->active_mm->pgd))		\
 			: "memory");					\
 	} while (0)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:56    [from the cache]
©2003-2008