From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Sean Christopherson <seanjc@google.com>
Cc: Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
kvm@vger.kernel.org, linux-hyperv@vger.kernel.org,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
Ajay Garg <ajaygargnsit@gmail.com>,
Paolo Bonzini <pbonzini@redhat.com>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Stephen Hemminger <sthemmin@microsoft.com>,
Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
Arnd Bergmann <arnd@arndb.de>
Subject: Re: [PATCH v2 3/8] KVM: x86: Refactor kvm_hv_flush_tlb() to reduce indentation
Date: Mon, 01 Nov 2021 11:00:25 +0100 [thread overview]
Message-ID: <877ddskxfq.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <20211030000800.3065132-4-seanjc@google.com>
Sean Christopherson <seanjc@google.com> writes:
> Refactor the "extended" path of kvm_hv_flush_tlb() to reduce the nesting
> depth for the non-fast sparse path, and to make the code more similar to
> the extended path in kvm_hv_send_ipi().
>
> No functional change intended.
>
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
> arch/x86/kvm/hyperv.c | 40 +++++++++++++++++++++-------------------
> 1 file changed, 21 insertions(+), 19 deletions(-)
>
> diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
> index cf18aa1712bf..e68931ed27f6 100644
> --- a/arch/x86/kvm/hyperv.c
> +++ b/arch/x86/kvm/hyperv.c
> @@ -1814,31 +1814,33 @@ static u64 kvm_hv_flush_tlb(struct kvm_vcpu *vcpu, struct kvm_hv_hcall *hc, bool
> if (hc->var_cnt != bitmap_weight((unsigned long *)&valid_bank_mask, 64))
> return HV_STATUS_INVALID_HYPERCALL_INPUT;
>
> - if (!hc->var_cnt && !all_cpus)
> + if (all_cpus)
> + goto do_flush;
You could've probably done:
if (all_cpus) {
kvm_make_all_cpus_request(kvm, KVM_REQ_TLB_FLUSH_GUEST);
goto ret_success;
}
to get rid on the second 'all_cpus' check (and maybe even 'do_flush'
label with some extra work) below.
> +
> + if (!hc->var_cnt)
> goto ret_success;
>
> - if (!all_cpus) {
> - if (hc->fast) {
> - if (hc->var_cnt > HV_HYPERCALL_MAX_XMM_REGISTERS - 1)
> - return HV_STATUS_INVALID_HYPERCALL_INPUT;
> - for (i = 0; i < hc->var_cnt; i += 2) {
> - sparse_banks[i] = sse128_lo(hc->xmm[i / 2 + 1]);
> - sparse_banks[i + 1] = sse128_hi(hc->xmm[i / 2 + 1]);
> - }
> - } else {
> - if (hc->var_cnt > 64)
> - return HV_STATUS_INVALID_HYPERCALL_INPUT;
> -
> - gpa = hc->ingpa + offsetof(struct hv_tlb_flush_ex,
> - hv_vp_set.bank_contents);
> - if (unlikely(kvm_read_guest(kvm, gpa, sparse_banks,
> - hc->var_cnt *
> - sizeof(sparse_banks[0]))))
> - return HV_STATUS_INVALID_HYPERCALL_INPUT;
> + if (hc->fast) {
> + if (hc->var_cnt > HV_HYPERCALL_MAX_XMM_REGISTERS - 1)
> + return HV_STATUS_INVALID_HYPERCALL_INPUT;
> + for (i = 0; i < hc->var_cnt; i += 2) {
> + sparse_banks[i] = sse128_lo(hc->xmm[i / 2 + 1]);
> + sparse_banks[i + 1] = sse128_hi(hc->xmm[i / 2 + 1]);
> }
> + goto do_flush;
> }
> +
> + if (hc->var_cnt > 64)
> + return HV_STATUS_INVALID_HYPERCALL_INPUT;
> +
> + gpa = hc->ingpa + offsetof(struct hv_tlb_flush_ex,
> + hv_vp_set.bank_contents);
> + if (unlikely(kvm_read_guest(kvm, gpa, sparse_banks,
> + hc->var_cnt * sizeof(sparse_banks[0]))))
> + return HV_STATUS_INVALID_HYPERCALL_INPUT;
> }
>
> +do_flush:
> /*
> * vcpu->arch.cr3 may not be up-to-date for running vCPUs so we can't
> * analyze it here, flush TLB regardless of the specified address space.
Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
--
Vitaly
next prev parent reply other threads:[~2021-11-01 10:01 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-30 0:07 [PATCH v2 0/8] KVM: x86: Hyper-V hypercall fix and cleanups Sean Christopherson
2021-10-30 0:07 ` [PATCH v2 1/8] KVM: x86: Ignore sparse banks size for an "all CPUs", non-sparse IPI req Sean Christopherson
2021-11-01 9:05 ` Vitaly Kuznetsov
2021-10-30 0:07 ` [PATCH v2 2/8] KVM: x86: Get the number of Hyper-V sparse banks from the VARHEAD field Sean Christopherson
2021-11-01 9:52 ` Vitaly Kuznetsov
2021-10-30 0:07 ` [PATCH v2 3/8] KVM: x86: Refactor kvm_hv_flush_tlb() to reduce indentation Sean Christopherson
2021-11-01 10:00 ` Vitaly Kuznetsov [this message]
2021-12-03 23:45 ` Sean Christopherson
2021-10-30 0:07 ` [PATCH v2 4/8] KVM: x86: Add a helper to get the sparse VP_SET for IPIs and TLB flushes Sean Christopherson
2021-11-01 10:06 ` Vitaly Kuznetsov
2021-10-30 0:07 ` [PATCH v2 5/8] KVM: x86: Don't bother reading sparse banks that end up being ignored Sean Christopherson
2021-11-01 9:46 ` Vitaly Kuznetsov
2021-10-30 0:07 ` [PATCH v2 6/8] KVM: x86: Shove vp_bitmap handling down into sparse_set_to_vcpu_mask() Sean Christopherson
2021-11-01 10:12 ` Vitaly Kuznetsov
2021-10-30 0:07 ` [PATCH v2 7/8] KVM: x86: Reject fixeds-size Hyper-V hypercalls with non-zero "var_cnt" Sean Christopherson
2021-11-01 10:27 ` Vitaly Kuznetsov
2021-12-03 23:48 ` Sean Christopherson
2021-10-30 0:08 ` [PATCH v2 8/8] KVM: x86: Add checks for reserved-to-zero Hyper-V hypercall fields Sean Christopherson
2021-11-01 10:33 ` Vitaly Kuznetsov
2021-12-02 2:13 ` Sean Christopherson
2021-12-02 15:16 ` Michael Kelley (LINUX)
2021-12-03 14:09 ` ** POTENTIAL FRAUD ALERT - RED HAT ** " Vitaly Kuznetsov
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=877ddskxfq.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=ajaygargnsit@gmail.com \
--cc=arnd@arndb.de \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=kys@microsoft.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=sthemmin@microsoft.com \
--cc=wanpengli@tencent.com \
--cc=wei.liu@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.