On Wed, Oct 15, 2014 at 10:08:30AM +0800, Chang Rebecca Swee Fun wrote: > From: Bryan O'Donoghue <pure.logic@xxxxxxxxxxxxxxxxx> > > Quark SoC X1000 advertises Page Global Enable for it's > Translation Lookaside Buffer via cpuid. The silicon does not > in fact support PGE and hence will not flush the TLB when CR4.PGE > is rewritten. The Quark documentation makes clear the necessity to > instead rewrite CR3 in order to flush any TLB entries, irrespective > of the state of CR4.PGE or an individual PTE.PGE > > See Intel Quark Core DevMan_001.pdf section 6.4.11 > > In setup.c setup_arch() the code will load_cr3() and then do a > __flush_tlb_all(). > > On Quark the entire TLB will be flushed at the load_cr3(). > The __flush_tlb_all() have no effect and can be safely ignored. > > Later on in the boot process we switch off the flag for cpu_has_pge() > which means that subsequent calls to __flush_tlb_all() will > call __flush_tlb() not __flush_tlb_global() flushing the TLB in the > correct way via load_cr3() not CR4.PGE rewrite > > This patch documents the behaviour of flushing the TLB for Quark in > setup_arch() > > Comment text suggested by Thomas Gleixner > > Signed-off-by: Bryan O'Donoghue <pure.logic@xxxxxxxxxxxxxxxxx> > Cc: davej@xxxxxxxxxx > Cc: hmh@xxxxxxxxxx > Link: http://lkml.kernel.org/r/1412641189-12415-2-git-send-email-pure.logic@xxxxxxxxxxxxxxxxx > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > (cherry picked from commit 2075244f9b871f18a007935c73d2ab49d4fb43e0) > > Signed-off-by: Chang Rebecca Swee Fun <rebecca.swee.fun.chang@xxxxxxxxx> > --- > arch/x86/kernel/setup.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c > index ce72964..09cd671 100644 > --- a/arch/x86/kernel/setup.c > +++ b/arch/x86/kernel/setup.c > @@ -880,6 +880,15 @@ void __init setup_arch(char **cmdline_p) > KERNEL_PGD_PTRS); > > load_cr3(swapper_pg_dir); > + /* > + * Note: Quark X1000 CPUs advertise PGE incorrectly and require > + * a cr3 based tlb flush, so the following __flush_tlb_all() > + * will not flush anything because the cpu quirk which clears > + * X86_FEATURE_PGE has not been invoked yet. Though due to the > + * load_cr3() above the TLB has been flushed already. The > + * quirk is invoked before subsequent calls to __flush_tlb_all() > + * so proper operation is guaranteed. > + */ > __flush_tlb_all(); > #else > printk(KERN_INFO "Command line: %s\n", boot_command_line); > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html This patch is not really needed, it is just a comment, and so I'm not going to apply it, sorry. greg k-h -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html