|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] Re: [Xen-changelog] [xen-unstable] x86_emulate: Emulate RDTS
Would have done if the original HVM TSC_AUX patch was up to it. I've
rewritten it about 1/4 the size and does more, as c/s 20646.
-- Keir
On 16/12/2009 20:27, "Dan Magenheimer" <dan.magenheimer@xxxxxxxxxx> wrote:
> Is this patch supposed to allow an application
> in an HVM domain to successfully execute an rdtscp
> instruction even on a processor that doesn't have
> hardware support for the instruction?
>
> If so, I tried it and it doesn't seem to work.
> The app segfaults (same, I think, as it did before
> the patch).
>
>> -----Original Message-----
>> From: Xen patchbot-unstable
>> [mailto:patchbot-unstable@xxxxxxxxxxxxxxxxxxx]
>> Sent: Wednesday, December 16, 2009 7:00 AM
>> To: xen-changelog@xxxxxxxxxxxxxxxxxxx
>> Subject: [Xen-changelog] [xen-unstable] x86_emulate: Emulate RDTSCP
>> instruction.
>>
>>
>> # HG changeset patch
>> # User Keir Fraser <keir.fraser@xxxxxxxxxx>
>> # Date 1260967518 0
>> # Node ID cbcb3d564b2fb51574b8a1d06cd6e7780839c331
>> # Parent b543acc1aaad743f20e8ee44ab048ca239350685
>> x86_emulate: Emulate RDTSCP instruction.
>>
>> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
>> ---
>> xen/arch/x86/x86_emulate/x86_emulate.c | 13 ++++++++++++-
>> 1 files changed, 12 insertions(+), 1 deletion(-)
>>
>> diff -r b543acc1aaad -r cbcb3d564b2f
>> xen/arch/x86/x86_emulate/x86_emulate.c
>> --- a/xen/arch/x86/x86_emulate/x86_emulate.c Wed Dec 16
>> 12:32:35 2009 +0000
>> +++ b/xen/arch/x86/x86_emulate/x86_emulate.c Wed Dec 16
>> 12:45:18 2009 +0000
>> @@ -292,6 +292,7 @@ struct operand {
>> #define MSR_LSTAR 0xc0000082
>> #define MSR_CSTAR 0xc0000083
>> #define MSR_FMASK 0xc0000084
>> +#define MSR_TSC_AUX 0xc0000103
>>
>> /* Control register flags. */
>> #define CR0_PE (1<<0)
>> @@ -3503,6 +3504,16 @@ x86_emulate(
>> break;
>> }
>>
>> + if ( modrm == 0xf9 ) /* rdtscp */
>> + {
>> + uint64_t tsc_aux;
>> + fail_if(ops->read_msr == NULL);
>> + if ( (rc = ops->read_msr(MSR_TSC_AUX, &tsc_aux,
>> ctxt)) != 0 )
>> + goto done;
>> + _regs.ecx = (uint32_t)tsc_aux;
>> + goto rdtsc;
>> + }
>> +
>> switch ( modrm_reg & 7 )
>> {
>> case 0: /* sgdt */
>> @@ -3712,7 +3723,7 @@ x86_emulate(
>> break;
>> }
>>
>> - case 0x31: /* rdtsc */ {
>> + case 0x31: rdtsc: /* rdtsc */ {
>> unsigned long cr4;
>> uint64_t val;
>> if ( !mode_ring0() )
>>
>> _______________________________________________
>> Xen-changelog mailing list
>> Xen-changelog@xxxxxxxxxxxxxxxxxxx
>> http://lists.xensource.com/xen-changelog
>>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|