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:
Родитель
8f12dea613
Коммит
b8d1fae7db
|
@ -94,10 +94,10 @@ static inline unsigned long long native_read_tsc(void)
|
|||
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;
|
||||
asm volatile("rdpmc" : "=A" (val));
|
||||
asm volatile("rdpmc" : "=A" (val) : "c" (counter));
|
||||
return val;
|
||||
}
|
||||
|
||||
|
@ -154,7 +154,7 @@ static inline int wrmsr_safe(u32 __msr, u32 __low, u32 __high)
|
|||
|
||||
#define rdpmc(counter,low,high) \
|
||||
do { \
|
||||
u64 _l = native_read_pmc(); \
|
||||
u64 _l = native_read_pmc(counter); \
|
||||
(low) = (u32)_l; \
|
||||
(high) = (u32)(_l >> 32); \
|
||||
} while(0)
|
||||
|
|
|
@ -118,7 +118,7 @@ struct pv_cpu_ops {
|
|||
int (*write_msr)(unsigned int msr, u64 val);
|
||||
|
||||
u64 (*read_tsc)(void);
|
||||
u64 (*read_pmc)(void);
|
||||
u64 (*read_pmc)(int counter);
|
||||
|
||||
/* These two are jmp to, not actually called. */
|
||||
void (*irq_enable_syscall_ret)(void);
|
||||
|
|
Загрузка…
Ссылка в новой задаче