All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Borislav Petkov <bp@alien8.de>, Eduardo Habkost <ehabkost@redhat.com>
Cc: "Jörg Rödel" <joro@8bytes.org>,
	"Andre Przywara" <andre.przywara@arm.com>,
	"kvm ML" <kvm@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>
Subject: Re: kvm: RDTSCP on AMD
Date: Wed, 6 Jul 2016 15:01:04 +0200	[thread overview]
Message-ID: <b7e01819-f604-7e2b-fd6d-6323bd05587e@redhat.com> (raw)
In-Reply-To: <20160706124438.GB7300@pd.tnic>



On 06/07/2016 14:44, Borislav Petkov wrote:
> Hi guys,
> 
> how about this below to enable RDTSCP emulation on AMD? IOW, I'm staring
> at
> 
>   33b5e8c03ae7 ("target-i386: Disable rdtscp on Opteron_G* CPU models")
> 
> in the qemu repo.
> 
> It seems to work here, RDTSCP in the guest gives me node and cpu as
> vsyscall_set_cpu() in the guest kernel has set them.
> 
> Thoughts?
> 
> (Below is the simple qemu diff reenabling RDTSCP)
> 
> @@ -3919,6 +3935,7 @@ static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = {
>  	[SVM_EXIT_STGI]				= stgi_interception,
>  	[SVM_EXIT_CLGI]				= clgi_interception,
>  	[SVM_EXIT_SKINIT]			= skinit_interception,
> +	[SVM_EXIT_RDTSCP]			= rdtscp_interception,
>  	[SVM_EXIT_WBINVD]                       = wbinvd_interception,
>  	[SVM_EXIT_MONITOR]			= monitor_interception,
>  	[SVM_EXIT_MWAIT]			= mwait_interception,

Nothing is needed in the kernel actually.  You can skip the intercept
by running the guest with MSR_TSC_AUX set to the guest's expected value.
 Which KVM does, except that it's botched so I need to apply the
patch in https://lkml.org/lkml/2016/4/13/802.

> ---
> 
> qemu diff:
> 
> ---
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index 3bd3cfc3ad16..aa6d0d027d00 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c

This is not enough because it's missing some backwards compatibility
gunk (similar to the include/hw/i386/pc.h parts of 33b5e8c03ae), but
it's enough for a proof of concept and to discuss it.

The main issue with this is that it would force a lockstep update of
QEMU and kernel, which we try to avoid.  I'm not sure if we have a
solution for this problem.  Eduardo?

Paolo

  reply	other threads:[~2016-07-06 13:01 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-06 12:44 kvm: RDTSCP on AMD Borislav Petkov
2016-07-06 13:01 ` Paolo Bonzini [this message]
2016-07-06 17:34   ` Eduardo Habkost
2016-07-06 21:27     ` Paolo Bonzini
2018-12-10 18:13 Borislav Petkov
2018-12-10 18:37 ` Eduardo Habkost
2018-12-10 18:41   ` Borislav Petkov
2018-12-10 19:06     ` Eduardo Habkost
2018-12-10 19:42       ` Borislav Petkov
2018-12-10 20:08         ` Eduardo Habkost
2018-12-10 20:39           ` Borislav Petkov
2018-12-11 10:38           ` Daniel P. Berrangé
2018-12-11 11:55             ` Eduardo Habkost
2018-12-11 14:35               ` Daniel P. Berrangé
2018-12-11 15:23               ` Paolo Bonzini
2018-12-11 15:30                 ` Daniel P. Berrangé
2018-12-10 19:47     ` Eduardo Habkost
2018-12-10 20:16       ` Borislav Petkov

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=b7e01819-f604-7e2b-fd6d-6323bd05587e@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=andre.przywara@arm.com \
    --cc=bp@alien8.de \
    --cc=ehabkost@redhat.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.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.