Re: [PATCH 6/8] x86: Quark: Comment setup_arch() to document TLB/PGE bug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]