x86: change rdpmc interface
the rdpmc instruction gets a counter argument in rcx. However, the i386 version was ignoring it. To make both x86_64 and i386 versions the same, as well as to comply with the instruction semantics, this parameter is added in the i386 version Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
8f12dea613
commit
b8d1fae7db
|
@ -94,10 +94,10 @@ static inline unsigned long long native_read_tsc(void)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long long native_read_pmc(void)
|
static inline unsigned long long native_read_pmc(int counter)
|
||||||
{
|
{
|
||||||
unsigned long long val;
|
unsigned long long val;
|
||||||
asm volatile("rdpmc" : "=A" (val));
|
asm volatile("rdpmc" : "=A" (val) : "c" (counter));
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ static inline int wrmsr_safe(u32 __msr, u32 __low, u32 __high)
|
||||||
|
|
||||||
#define rdpmc(counter,low,high) \
|
#define rdpmc(counter,low,high) \
|
||||||
do { \
|
do { \
|
||||||
u64 _l = native_read_pmc(); \
|
u64 _l = native_read_pmc(counter); \
|
||||||
(low) = (u32)_l; \
|
(low) = (u32)_l; \
|
||||||
(high) = (u32)(_l >> 32); \
|
(high) = (u32)(_l >> 32); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
|
@ -118,7 +118,7 @@ struct pv_cpu_ops {
|
||||||
int (*write_msr)(unsigned int msr, u64 val);
|
int (*write_msr)(unsigned int msr, u64 val);
|
||||||
|
|
||||||
u64 (*read_tsc)(void);
|
u64 (*read_tsc)(void);
|
||||||
u64 (*read_pmc)(void);
|
u64 (*read_pmc)(int counter);
|
||||||
|
|
||||||
/* These two are jmp to, not actually called. */
|
/* These two are jmp to, not actually called. */
|
||||||
void (*irq_enable_syscall_ret)(void);
|
void (*irq_enable_syscall_ret)(void);
|
||||||
|
|
Loading…
Reference in New Issue