[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86: Adjust rdtsc inline assembly



>>> On 18.02.15 at 13:25, <andrew.cooper3@xxxxxxxxxx> wrote:
> The single use of the old rdtsc() in emulate_privileged_op() is altered to use
> the new rdtsc() and the rdmsr_writeback path to set eax/edx appropriately.

I'm not entirely sure about this one - the current code surely is slightly
faster than the replacement. Question is how much this matters. I'd
suggest to be on the safe side and simply open-code the asm() there.
If you decide to follow that, there are a few more cosmetic things which
otherwise I would adjust while committing:

> @@ -1426,13 +1426,13 @@ static void __init tsc_check_writability(void)
>      if ( boot_cpu_has(X86_FEATURE_TSC_RELIABLE) )
>          return;
>  
> -    rdtscll(tsc);
> +    tsc = rdtsc();
>      if ( wrmsr_safe(MSR_IA32_TSC, 0) == 0 )
>      {
>          uint64_t tmp, tmp2;
> -        rdtscll(tmp2);
> +        tmp2 = rdtsc();

Blank line between declaration and statements. And perhaps the
assignment could become the variable's initializer.

> @@ -1973,8 +1973,7 @@ void tsc_set_info(struct domain *d,
>          else {
>              /* when using native TSC, offset is nsec relative to power-on
>               * of physical machine */
> -            uint64_t tsc = 0;
> -            rdtscll(tsc);
> +            uint64_t tsc = rdtsc();
>              d->arch.vtsc_offset = scale_delta(tsc,&d->arch.vtsc_to_ns) -

Blank line missing again.

> --- a/xen/include/asm-x86/msr.h
> +++ b/xen/include/asm-x86/msr.h
> @@ -71,17 +71,14 @@ static inline int wrmsr_safe(unsigned int msr, uint64_t 
> val)
>      return _rc;
>  }
>  
> -#define rdtsc(low,high) \
> -     __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
> +static inline uint64_t rdtsc(void)
> +{
> +    uint32_t low, high;
>  
> -#define rdtscl(low) \
> -     __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx")
> +    __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high));
>  
> -#define rdtscll(val) do { \
> -     unsigned int _eax, _edx; \
> -     asm volatile("rdtsc" : "=a" (_eax), "=d" (_edx)); \
> -     (val) = ((unsigned long)_eax) | (((unsigned long)_edx)<<32); \
> -} while(0)
> +    return (uint64_t)high << 32 | low;

Parentheses around the << please.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.