From: Borislav Petkov <bp@alien8.de>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH] KVM: SVM: fix trashing of MSR_TSC_AUX
Date: Wed, 6 Jul 2016 16:18:47 +0200 [thread overview]
Message-ID: <20160706141847.GF7300@pd.tnic> (raw)
In-Reply-To: <1467812596-18903-1-git-send-email-pbonzini@redhat.com>
On Wed, Jul 06, 2016 at 03:43:16PM +0200, Paolo Bonzini wrote:
> I don't know what I was thinking when I wrote commit 46896c73c1a4 ("KVM:
> svm: add support for RDTSCP", 2015-11-12); I missed write_rdtscp_aux which
> obviously uses MSR_TSC_AUX.
>
> Therefore we do need to save/restore MSR_TSC_AUX in svm_vcpu_run.
>
> Cc: stable@vger.kernel.org
> Cc: Borislav Petkov <bp@alien8.de>
> Fixes: 46896c73c1a4 ("KVM: svm: add support for RDTSCP")
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Something's still missing. I have a small program which does RDTSCP in
the guest:
$ taskset -c 3 ./rdtscp
aux1: 0x0
aux2: 0x0
p1: 195514968442, p2: 195515255582, 287140
and the aux things which are %ecx, are 0 (should be 3 in that case).
It did work with my patch with the RDTSCP intercept:
$ taskset -c 3 ./rdtscp
aux1: 0x3
aux2: 0x3
p1: 157117003683, p2: 157119280794, 2277111
Btw, just for my own understanding: if we don't intercept RDTSCP, does
it get emulated? Where does the TSC value come from, qemu?
Here's the program.
---
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
typedef unsigned long long u64;
#define DECLARE_ARGS(val, low, high) unsigned low, high
#define EAX_EDX_VAL(val, low, high) ((low) | ((u64)(high) << 32))
#define EAX_EDX_ARGS(val, low, high) "a" (low), "d" (high)
#define EAX_EDX_RET(val, low, high) "=a" (low), "=d" (high)
static __always_inline unsigned long long rdtscp(unsigned int *aux)
{
unsigned int lo, hi;
asm volatile("rdtscp" : "=a" (lo), "=d" (hi), "=c" (*aux));
return EAX_EDX_VAL(0, lo, hi);
}
int main()
{
unsigned long long p1, p2;
unsigned int aux;
p1 = rdtscp(&aux);
printf("aux1: 0x%x\n", aux);
p2 = rdtscp(&aux);
printf("aux2: 0x%x\n", aux);
printf("p1: %llu, p2: %llu, %lld\n", p1, p2, p2 - p1);
return 0;
}
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
next prev parent reply other threads:[~2016-07-06 14:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-06 13:43 [PATCH] KVM: SVM: fix trashing of MSR_TSC_AUX Paolo Bonzini
2016-07-06 14:18 ` Borislav Petkov [this message]
2016-07-06 14:29 ` Paolo Bonzini
2016-07-07 10:41 ` Borislav Petkov
2016-07-07 11:01 ` Paolo Bonzini
2016-07-07 11:47 ` Borislav Petkov
2016-07-07 12:28 ` Paolo Bonzini
2016-07-07 12:47 ` Borislav Petkov
2016-07-07 13:16 ` Paolo Bonzini
2016-07-07 16:01 ` Borislav Petkov
2016-07-07 16:17 ` Paolo Bonzini
2016-07-07 16:27 ` Eduardo Habkost
2016-07-07 17:04 ` Borislav Petkov
2016-07-07 17:43 ` Eduardo Habkost
2016-07-08 11:09 ` Borislav Petkov
2016-07-08 11:15 ` Paolo Bonzini
2016-07-08 12:55 ` Borislav Petkov
2016-07-06 15:00 ` kbuild test robot
2016-07-15 12:15 ` Radim Krčmář
2016-07-15 12:30 ` 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=20160706141847.GF7300@pd.tnic \
--to=bp@alien8.de \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=stable@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.