Re: [tip:x86/urgent] x86/mm/32: Load a sane CR3 before cpu_init() on secondary CPUs

From: Paul Menzel
Date: Mon Sep 18 2017 - 04:17:50 EST


Dear Andy,


On 09/17/17 20:19, tip-bot for Andy Lutomirski wrote:
Commit-ID: 4ba55e65f471d011d3ba2ac2022180ea0877d68e
Gitweb: http://git.kernel.org/tip/4ba55e65f471d011d3ba2ac2022180ea0877d68e
Author: Andy Lutomirski <luto@xxxxxxxxxx>
AuthorDate: Sun, 17 Sep 2017 09:03:51 -0700
Committer: Ingo Molnar <mingo@xxxxxxxxxx>
CommitDate: Sun, 17 Sep 2017 18:59:09 +0200

x86/mm/32: Load a sane CR3 before cpu_init() on secondary CPUs

For unknown historical reasons (i.e. Borislav doesn't recall),
32-bit kernels invoke cpu_init() on secondary CPUs with
initial_page_table loaded into CR3. Then they set
current->active_mm to &init_mm and call enter_lazy_tlb() before
fixing CR3.

If this should be changed, Iâd be happy to help.

This means that the x86 TLB code gets invoked while CR3
is inconsistent, and, with the improved PCID sanity checks I added,
we warn.

Fix it by loading swapper_pg_dir (i.e. init_mm.pgd) earlier.

Reported-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx>
Reported-by: Pavel Machek <pavel@xxxxxx>
Signed-off-by: Andy Lutomirski <luto@xxxxxxxxxx>
Cc: Borislav Petkov <bp@xxxxxxxxx>
Cc: Borislav Petkov <bpetkov@xxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Fixes: 72c0098d92ce ("x86/mm: Reinitialize TLB state on hotplug and resume")
Link: http://lkml.kernel.org/r/30cdfea504682ba3b9012e77717800a91c22097f.1505663533.git.luto@xxxxxxxxxx

This should use the HTTPS protocol.

Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
---
arch/x86/kernel/smpboot.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)

[â]

Thank you for the fix.

Tested-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx> (Lenovo X60t)


Kind regards,

Paul