x86: bugfix wbinvd() model check instead of family check
authorvenkatesh.pallipadi@intel.com <venkatesh.pallipadi@intel.com>
Fri, 22 May 2009 20:23:37 +0000 (13:23 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 22 May 2009 20:33:27 +0000 (13:33 -0700)
wbinvd is supported on all CPUs 486 or later. But,
pageattr.c is checking x86_model >= 4 before wbinvd(), which looks like
an oversight bug. It was first introduced at one place by changeset
d7c8f21a8cad0228c7c5ce2bb6dbd95d1ee49d13 and got copied over to second
place in the same file later.

[ Impact: fix missing cache flush on early-model CPUs, potential data corruption ]

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/mm/pageattr.c

index 797f9f1..2cc019a 100644 (file)
@@ -153,7 +153,7 @@ static void __cpa_flush_all(void *arg)
         */
        __flush_tlb_all();
 
-       if (cache && boot_cpu_data.x86_model >= 4)
+       if (cache && boot_cpu_data.x86 >= 4)
                wbinvd();
 }
 
@@ -218,7 +218,7 @@ static void cpa_flush_array(unsigned long *start, int numpages, int cache,
 
        /* 4M threshold */
        if (numpages >= 1024) {
-               if (boot_cpu_data.x86_model >= 4)
+               if (boot_cpu_data.x86 >= 4)
                        wbinvd();
                return;
        }