From: Dave Hansen <dave.hansen@intel.com>
To: Lance Yang <lance.yang@linux.dev>, akpm@linux-foundation.org
Cc: peterz@infradead.org, david@kernel.org,
dave.hansen@linux.intel.com, ypodemsk@redhat.com,
hughd@google.com, will@kernel.org, aneesh.kumar@kernel.org,
npiggin@gmail.com, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, x86@kernel.org, hpa@zytor.com, arnd@arndb.de,
lorenzo.stoakes@oracle.com, ziy@nvidia.com,
baolin.wang@linux.alibaba.com, Liam.Howlett@oracle.com,
npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com,
baohua@kernel.org, shy828301@gmail.com, riel@surriel.com,
jannh@google.com, jgross@suse.com, seanjc@google.com,
pbonzini@redhat.com, boris.ostrovsky@oracle.com,
virtualization@lists.linux.dev, kvm@vger.kernel.org,
linux-arch@vger.kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, ioworker0@gmail.com
Subject: Re: [PATCH v6 2/2] x86/tlb: skip redundant sync IPIs for native TLB flush
Date: Wed, 4 Mar 2026 09:59:11 -0800 [thread overview]
Message-ID: <7dc30fbf-17c0-47db-8457-24b531cd0071@intel.com> (raw)
In-Reply-To: <20260304021046.18550-3-lance.yang@linux.dev>
On 3/3/26 18:10, Lance Yang wrote:
...
> + if (pv_ops.mmu.flush_tlb_multi == native_flush_tlb_multi &&
> + !cpu_feature_enabled(X86_FEATURE_INVLPGB)) {
> + pv_ops.mmu.flush_tlb_multi_implies_ipi_broadcast = true;
> + static_branch_enable(&tlb_ipi_broadcast_key);
> + }
> +}
...
> +#ifndef CONFIG_PARAVIRT
> +void __init native_pv_tlb_init(void)
> +{
> + /*
> + * For non-PARAVIRT builds, check if native TLB flush sends real IPIs
> + * (i.e., not using INVLPGB broadcast invalidation).
> + */
> + if (!cpu_feature_enabled(X86_FEATURE_INVLPGB))
> + static_branch_enable(&tlb_ipi_broadcast_key);
> +}
> +#endif
I really despise duplicated logic. The X86_FEATURE_INVLPGB check is
small, but it is duplicated. You're also setting the static branch in a
*bunch* of different places.
Can this be arranged so that the PV code just tells the core code that
it is compatible with flush_tlb_multi_implies_ipi_broadcast?
void __init bool is_pv_ok(void)
{
/* This check is super sketchy an unexplained: */
if (pv_ops.mmu.flush_tlb_multi_implies_ipi_broadcast)
return true;
if (pv_ops.mmu.flush_tlb_multi != native_flush_tlb_multi)
return false;
pv_ops.mmu.flush_tlb_multi_implies_ipi_broadcast = true;
return true;
}
void __init tlb_init(void)
{
if (!is_pv_ok())
return;
if (cpu_feature_enabled(X86_FEATURE_INVLPGB))
return;
static_branch_enable(&tlb_ipi_broadcast_key);
}
Isn't that like a billion times more readable? It has one
X86_FEATURE_INVLPGB check and one static_branch_enable() point and no
#ifdeffery other than defining a stub is_pv_ok().
BTW, why is there even an early return for the case where
flush_tlb_multi_implies_ipi_broadcast is already set? Isn't this
decision made once on the boot CPU and then never touched again? Do any
PV instances actually set the bit?
prev parent reply other threads:[~2026-03-04 17:59 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-04 2:10 [PATCH v6 0/2] skip redundant sync IPIs when TLB flush sent them Lance Yang
2026-03-04 2:10 ` [PATCH v6 1/2] mm/mmu_gather: prepare to skip redundant sync IPIs Lance Yang
2026-03-04 2:10 ` [PATCH v6 2/2] x86/tlb: skip redundant sync IPIs for native TLB flush Lance Yang
2026-03-04 17:59 ` Dave Hansen [this message]
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=7dc30fbf-17c0-47db-8457-24b531cd0071@intel.com \
--to=dave.hansen@intel.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=aneesh.kumar@kernel.org \
--cc=arnd@arndb.de \
--cc=baohua@kernel.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=hpa@zytor.com \
--cc=hughd@google.com \
--cc=ioworker0@gmail.com \
--cc=jannh@google.com \
--cc=jgross@suse.com \
--cc=kvm@vger.kernel.org \
--cc=lance.yang@linux.dev \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mingo@redhat.com \
--cc=npache@redhat.com \
--cc=npiggin@gmail.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=riel@surriel.com \
--cc=ryan.roberts@arm.com \
--cc=seanjc@google.com \
--cc=shy828301@gmail.com \
--cc=tglx@linutronix.de \
--cc=virtualization@lists.linux.dev \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=ypodemsk@redhat.com \
--cc=ziy@nvidia.com \
/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