From: "Anaczkowski, Lukasz" <lukasz.anaczkowski@intel.com>
To: Dave Hansen <dave.hansen@linux.intel.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"mingo@redhat.com" <mingo@redhat.com>,
"ak@linux.intel.com" <ak@linux.intel.com>,
"kirill.shutemov@linux.intel.com"
<kirill.shutemov@linux.intel.com>,
"mhocko@suse.com" <mhocko@suse.com>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"hpa@zytor.com" <hpa@zytor.com>
Cc: "Srinivasappa, Harish" <harish.srinivasappa@intel.com>,
"Odzioba, Lukasz" <lukasz.odzioba@intel.com>
Subject: RE: [PATCH] Linux VM workaround for Knights Landing A/D leak
Date: Wed, 15 Jun 2016 13:06:17 +0000 [thread overview]
Message-ID: <C1C2579D7BE026428F81F41198ADB17237A866C6@irsmsx110.ger.corp.intel.com> (raw)
In-Reply-To: <57603CBE.7090702@linux.intel.com>
From: Dave Hansen [mailto:dave.hansen@linux.intel.com]
Sent: Tuesday, June 14, 2016 7:20 PM
>> diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
...
>> +extern void fix_pte_leak(struct mm_struct *mm, unsigned long addr,
>> + pte_t *ptep);
> Doesn't hugetlb.h somehow #include pgtable.h? So why double-define
> fix_pte_leak()?
It's other way round - pgtable.h somehow includes hugetlb.h. I've removed
duplicated fix_pte_leak() declaration.
>> diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
>> index 2ee7811..6fa4079 100644
>> --- a/arch/x86/include/asm/pgtable_64.h
>> +++ b/arch/x86/include/asm/pgtable_64.h
>> @@ -178,6 +178,12 @@ extern void cleanup_highmap(void);
>> extern void init_extra_mapping_uc(unsigned long phys, unsigned long size);
>> extern void init_extra_mapping_wb(unsigned long phys, unsigned long size);
>>
>> +#define ARCH_HAS_NEEDS_SWAP_PTL 1
>> +static inline bool arch_needs_swap_ptl(void)
>> +{
>> + return boot_cpu_has_bug(X86_BUG_PTE_LEAK);
>> +}
>> +
>> #endif /* !__ASSEMBLY__ */
> I think we need a comment on this sucker. I'm not sure we should lean
> solely on the commit message to record why we need this until the end of
> time.
OK.
>> + if (c->x86_model == 87) {
> Please use the macros in here for the model id:
OK.
> http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/tree/arch/x86/include/asm/intel-family.h
> We also probably want to prefix the pr_info() with something like
> "x86/intel:".
OK
>> +/*
>> + * Workaround for KNL issue:
> Please be specific about what this "KNL issue" *is*.
OK
>> + * A thread that is going to page fault due to P=0, may still
>> + * non atomically set A or D bits, which could corrupt swap entries.
>> + * Always flush the other CPUs and clear the PTE again to avoid
>> + * this leakage. We are excluded using the pagetable lock.
>> + */
>> +
>> +void fix_pte_leak(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
>> +{
>> + if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids) {
>> + trace_tlb_flush(TLB_LOCAL_SHOOTDOWN, TLB_FLUSH_ALL);
>> + flush_tlb_others(mm_cpumask(mm), mm, addr,
>> + addr + PAGE_SIZE);
>> + mb();
>> + set_pte(ptep, __pte(0));
>> + }
>> +}
>
> I think the comment here is a bit sparse. Can we add some more details,
> like:
>
> Entering here, the current CPU just cleared the PTE. But,
> another thread may have raced and set the A or D bits, or be
> _about_ to set the bits. Shooting their TLB entry down will
> ensure they see the cleared PTE and will not set A or D.
>
> and by the set_pte():
>
> Clear the PTE one more time, in case the other thread set A/D
> before we sent the TLB flush.
Thanks,
Lukasz
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2016-06-15 13:08 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-14 15:58 Lukasz Anaczkowski
2016-06-14 16:31 ` kbuild test robot
2016-06-14 16:47 ` Nadav Amit
2016-06-14 16:54 ` Anaczkowski, Lukasz
2016-06-14 17:01 ` [PATCH v2] " Lukasz Anaczkowski
2016-06-14 17:24 ` Dave Hansen
2016-06-14 18:34 ` One Thousand Gnomes
2016-06-14 18:54 ` Dave Hansen
2016-06-14 19:19 ` Borislav Petkov
2016-06-14 20:20 ` H. Peter Anvin
2016-06-14 20:47 ` Borislav Petkov
2016-06-14 20:54 ` H. Peter Anvin
2016-06-14 21:02 ` Borislav Petkov
2016-06-14 21:08 ` H. Peter Anvin
2016-06-14 21:13 ` H. Peter Anvin
2016-06-14 18:10 ` Borislav Petkov
2016-06-15 13:12 ` Anaczkowski, Lukasz
2016-06-14 18:38 ` Nadav Amit
2016-06-15 13:12 ` Anaczkowski, Lukasz
2016-06-15 20:04 ` Nadav Amit
2016-06-15 20:10 ` Dave Hansen
2016-06-15 20:26 ` Nadav Amit
2016-06-16 15:14 ` [PATCH v3] " Lukasz Anaczkowski
2016-06-16 16:43 ` Nadav Amit
2016-06-16 20:23 ` Dave Hansen
2016-06-14 17:18 ` [PATCH] " Dave Hansen
2016-06-14 20:16 ` Nadav Amit
2016-06-14 21:37 ` Dave Hansen
2016-06-15 2:20 ` Andy Lutomirski
2016-06-15 2:35 ` Nadav Amit
2016-06-15 2:36 ` Andy Lutomirski
2016-06-15 2:44 ` Nadav Amit
2016-06-15 3:09 ` Andy Lutomirski
2016-06-15 3:20 ` Nadav Amit
2016-06-14 16:58 ` kbuild test robot
2016-06-14 17:19 ` Dave Hansen
2016-06-15 13:06 ` Anaczkowski, Lukasz [this message]
2016-06-14 17:47 ` kbuild test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=C1C2579D7BE026428F81F41198ADB17237A866C6@irsmsx110.ger.corp.intel.com \
--to=lukasz.anaczkowski@intel.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=dave.hansen@linux.intel.com \
--cc=harish.srinivasappa@intel.com \
--cc=hpa@zytor.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lukasz.odzioba@intel.com \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox