Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8d1fae7 authored by Glauber de Oliveira Costa's avatar Glauber de Oliveira Costa Committed by Ingo Molnar
Browse files

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: default avatarGlauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 8f12dea6
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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);