All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Lendacky <thomas.lendacky@amd.com>
To: Sean Christopherson <seanjc@google.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Brijesh Singh <brijesh.singh@amd.com>
Subject: Re: [PATCH 3/3] KVM: SVM: Sync GPRs to the GHCB only after VMGEXIT
Date: Fri, 22 Jan 2021 18:09:31 -0600	[thread overview]
Message-ID: <0d8e9d63-1fe9-af08-dae9-edd80083e940@amd.com> (raw)
In-Reply-To: <20210122235049.3107620-4-seanjc@google.com>

On 1/22/21 5:50 PM, Sean Christopherson wrote:
> Sync GPRs to the GHCB on VMRUN only if a sync is needed, i.e. if the
> previous exit was a VMGEXIT and the guest is expecting some data back.
> 

The start of sev_es_sync_to_ghcb() checks if the GHCB has been mapped, 
which only occurs on VMGEXIT, and exits early if not. And 
sev_es_sync_from_ghcb() is only called if the GHCB has been successfully 
mapped. The only thing in between is sev_es_validate_vmgexit(), which will 
terminate the VM on error. So I don't think this patch is needed.

Thanks,
Tom

> Cc: Brijesh Singh <brijesh.singh@amd.com>
> Cc: Tom Lendacky <thomas.lendacky@amd.com>
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
>   arch/x86/kvm/svm/sev.c | 15 ++++++++++-----
>   arch/x86/kvm/svm/svm.h |  1 +
>   2 files changed, 11 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
> index ac652bc476ae..9bd1e1650eb3 100644
> --- a/arch/x86/kvm/svm/sev.c
> +++ b/arch/x86/kvm/svm/sev.c
> @@ -1418,10 +1418,13 @@ static void sev_es_sync_to_ghcb(struct vcpu_svm *svm)
>   	 * Copy their values, even if they may not have been written during the
>   	 * VM-Exit.  It's the guest's responsibility to not consume random data.
>   	 */
> -	ghcb_set_rax(ghcb, vcpu->arch.regs[VCPU_REGS_RAX]);
> -	ghcb_set_rbx(ghcb, vcpu->arch.regs[VCPU_REGS_RBX]);
> -	ghcb_set_rcx(ghcb, vcpu->arch.regs[VCPU_REGS_RCX]);
> -	ghcb_set_rdx(ghcb, vcpu->arch.regs[VCPU_REGS_RDX]);
> +	if (svm->need_sync_to_ghcb) {
> +		ghcb_set_rax(ghcb, vcpu->arch.regs[VCPU_REGS_RAX]);
> +		ghcb_set_rbx(ghcb, vcpu->arch.regs[VCPU_REGS_RBX]);
> +		ghcb_set_rcx(ghcb, vcpu->arch.regs[VCPU_REGS_RCX]);
> +		ghcb_set_rdx(ghcb, vcpu->arch.regs[VCPU_REGS_RDX]);
> +		svm->need_sync_to_ghcb = false;
> +	}
>   }
>   
>   static void sev_es_sync_from_ghcb(struct vcpu_svm *svm)
> @@ -1441,8 +1444,10 @@ static void sev_es_sync_from_ghcb(struct vcpu_svm *svm)
>   	 * VMMCALL allows the guest to provide extra registers. KVM also
>   	 * expects RSI for hypercalls, so include that, too.
>   	 *
> -	 * Copy their values to the appropriate location if supplied.
> +	 * Copy their values to the appropriate location if supplied, and
> +	 * flag that a sync back to the GHCB is needed on the next VMRUN.
>   	 */
> +	svm->need_sync_to_ghcb = true;
>   	memset(vcpu->arch.regs, 0, sizeof(vcpu->arch.regs));
>   
>   	vcpu->arch.regs[VCPU_REGS_RAX] = ghcb_get_rax_if_valid(ghcb);
> diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h
> index 0fe874ae5498..4e2e5f9fbfc2 100644
> --- a/arch/x86/kvm/svm/svm.h
> +++ b/arch/x86/kvm/svm/svm.h
> @@ -192,6 +192,7 @@ struct vcpu_svm {
>   	u64 ghcb_sa_len;
>   	bool ghcb_sa_sync;
>   	bool ghcb_sa_free;
> +	bool need_sync_to_ghcb;
>   };
>   
>   struct svm_cpu_data {
> 

  reply	other threads:[~2021-01-23  0:10 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-22 23:50 [PATCH 0/3] KVM: x86: Revert dirty tracking for GPRs Sean Christopherson
2021-01-22 23:50 ` [PATCH 1/3] KVM: SVM: Unconditionally sync GPRs to GHCB on VMRUN of SEV-ES guest Sean Christopherson
2021-01-25 15:05   ` Tom Lendacky
2021-01-22 23:50 ` [PATCH 2/3] KVM: x86: Revert "KVM: x86: Mark GPRs dirty when written" Sean Christopherson
2021-01-22 23:50 ` [PATCH 3/3] KVM: SVM: Sync GPRs to the GHCB only after VMGEXIT Sean Christopherson
2021-01-23  0:09   ` Tom Lendacky [this message]
2021-01-23  0:29     ` Sean Christopherson
2021-01-25 17:22 ` [PATCH 0/3] KVM: x86: Revert dirty tracking for GPRs Paolo Bonzini

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=0d8e9d63-1fe9-af08-dae9-edd80083e940@amd.com \
    --to=thomas.lendacky@amd.com \
    --cc=brijesh.singh@amd.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.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 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.