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>
        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;
 }
 
 
 #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)
 
        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);