From: Robert Hoo <robert.hoo.linux@gmail.com>
To: lirongqing@baidu.com, seanjc@google.com, pbonzini@redhat.com,
tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, kvm@vger.kernel.org, x86@kernel.org
Subject: Re: [PATCH] KVM: x86/mmu: Don't create kvm-nx-lpage-re kthread if not itlb_multihit
Date: Tue, 2 May 2023 10:07:40 +0800 [thread overview]
Message-ID: <b8facaa4-7dc3-7f2c-e25b-16503c4bfae7@gmail.com> (raw)
In-Reply-To: <1679555884-32544-1-git-send-email-lirongqing@baidu.com>
On 3/23/2023 3:18 PM, lirongqing@baidu.com wrote:
> From: Li RongQing <lirongqing@baidu.com>
>
> if CPU has not X86_BUG_ITLB_MULTIHIT bug, kvm-nx-lpage-re kthread
> is not needed to create
(directed by Sean from
https://lore.kernel.org/kvm/ZE%2FR1%2FhvbuWmD8mw@google.com/ here.)
No, I think it should tie to "nx_huge_pages" value rather than
directly/partially tie to boot_cpu_has_bug(X86_BUG_ITLB_MULTIHIT).
>
> Signed-off-by: Li RongQing <lirongqing@baidu.com>
> ---
> arch/x86/kvm/mmu/mmu.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
> index 8354262..be98c69 100644
> --- a/arch/x86/kvm/mmu/mmu.c
> +++ b/arch/x86/kvm/mmu/mmu.c
> @@ -6667,6 +6667,11 @@ static bool get_nx_auto_mode(void)
> return boot_cpu_has_bug(X86_BUG_ITLB_MULTIHIT) && !cpu_mitigations_off();
> }
>
> +static bool cpu_has_itlb_multihit(void)
> +{
> + return boot_cpu_has_bug(X86_BUG_ITLB_MULTIHIT);
> +}
> +
> static void __set_nx_huge_pages(bool val)
> {
> nx_huge_pages = itlb_multihit_kvm_mitigation = val;
> @@ -6677,6 +6682,11 @@ static int set_nx_huge_pages(const char *val, const struct kernel_param *kp)
> bool old_val = nx_huge_pages;
> bool new_val;
>
> + if (!cpu_has_itlb_multihit()) {
> + __set_nx_huge_pages(false);
> + return 0;
> + }
> +
It's rude simply return here just because
!boot_cpu_has_bug(X86_BUG_ITLB_MULTIHIT), leaving all else behind, i.e.
leaving below sysfs node useless.
If you meant to do this, you should clear these sysfs APIs because of
!boot_cpu_has_bug(X86_BUG_ITLB_MULTIHIT).
> /* In "auto" mode deploy workaround only if CPU has the bug. */
> if (sysfs_streq(val, "off"))
> new_val = 0;
> @@ -6816,6 +6826,9 @@ static int set_nx_huge_pages_recovery_param(const char *val, const struct kernel
> uint old_period, new_period;
> int err;
>
> + if (!cpu_has_itlb_multihit())
> + return 0;
> +
> was_recovery_enabled = calc_nx_huge_pages_recovery_period(&old_period);
>
> err = param_set_uint(val, kp);
> @@ -6971,6 +6984,9 @@ int kvm_mmu_post_init_vm(struct kvm *kvm)
> {
> int err;
>
> + if (!cpu_has_itlb_multihit())
> + return 0;
> +
It's rude to simply return. kvm_mmu_post_init_vm() by name is far more than
nx_hugepage stuff, though at present only this stuff in.
I would rather
if (cpu_has_itlb_multihit()) {
...
}
Consider people in the future when they do modifications on this function.
> err = kvm_vm_create_worker_thread(kvm, kvm_nx_huge_page_recovery_worker, 0,
> "kvm-nx-lpage-recovery",
> &kvm->arch.nx_huge_page_recovery_thread);
> @@ -6982,6 +6998,9 @@ int kvm_mmu_post_init_vm(struct kvm *kvm)
>
> void kvm_mmu_pre_destroy_vm(struct kvm *kvm)
> {
> + if (!cpu_has_itlb_multihit())
> + return;
> Ditto. It looks (wrongly) like: if !cpu_has_itlb_multihit(), no need to do
anything about pre_destroy_vm.
> if (kvm->arch.nx_huge_page_recovery_thread)
> kthread_stop(kvm->arch.nx_huge_page_recovery_thread);
> }
To summary, regardless of the concrete patch/implementation, what Sean more
urgently needs is real world justification to mitigate NX_hugepage; which I
believe you have at hand: why would you like to do this, what real world
issue caused by this bothers you. You could have more descriptions.
With regards to NX_hugepage, I see people dislike it [1][2][3], but on HW
with itlb_multihit, they've no choice but to use it to mitigate.
[1] this patch
[2]
https://lore.kernel.org/kvm/CANZk6aSv5ta3emitOfWKxaB-JvURBVu-sXqFnCz9PKXhqjbV9w@mail.gmail.com/
[3]
https://lore.kernel.org/kvm/20220613212523.3436117-1-bgardon@google.com/
(merged)
next prev parent reply other threads:[~2023-05-02 2:07 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-23 7:18 [PATCH] KVM: x86/mmu: Don't create kvm-nx-lpage-re kthread if not itlb_multihit lirongqing
2023-03-23 14:20 ` Sean Christopherson
2023-03-23 22:32 ` Huang, Kai
2023-03-23 22:40 ` Sean Christopherson
2023-03-23 23:16 ` Huang, Kai
2023-03-30 8:18 ` Li,Rongqing
2023-03-30 19:19 ` Sean Christopherson
2023-05-02 2:07 ` Robert Hoo [this message]
2023-05-05 12:42 ` zhuangel570
2023-05-05 17:44 ` Sean Christopherson
2023-05-06 7:12 ` zhuangel570
2023-05-06 14:59 ` Robert Hoo
2023-05-06 15:30 ` zhuangel570
2023-05-06 14:49 ` Robert Hoo
2023-05-07 1:18 ` Robert Hoo
2023-05-05 17:56 ` Jim Mattson
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=b8facaa4-7dc3-7f2c-e25b-16503c4bfae7@gmail.com \
--to=robert.hoo.linux@gmail.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=lirongqing@baidu.com \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).