![Don Zickus](/assets/img/avatar_default.png)
Incorporates the new performance counter reservation system in oprofile. Also cleans up a lot of the initialization code. The code original zero'd out every register associated with performance counters regardless if those registers were used or not. This causes issues with the nmi watchdog. Now oprofile tries to reserve registers and gives up if it can't get them. Cc: levon@movementarian.org Cc: oprofile-list@lists.sf.net Signed-off-by: Don Zickus <dzickus@redhat.com> Signed-off-by: Andi Kleen <ak@suse.de>
52 lines
1.2 KiB
C
52 lines
1.2 KiB
C
/**
|
|
* @file op_x86_model.h
|
|
* interface to x86 model-specific MSR operations
|
|
*
|
|
* @remark Copyright 2002 OProfile authors
|
|
* @remark Read the file COPYING
|
|
*
|
|
* @author Graydon Hoare
|
|
*/
|
|
|
|
#ifndef OP_X86_MODEL_H
|
|
#define OP_X86_MODEL_H
|
|
|
|
struct op_saved_msr {
|
|
unsigned int high;
|
|
unsigned int low;
|
|
};
|
|
|
|
struct op_msr {
|
|
unsigned long addr;
|
|
struct op_saved_msr saved;
|
|
};
|
|
|
|
struct op_msrs {
|
|
struct op_msr * counters;
|
|
struct op_msr * controls;
|
|
};
|
|
|
|
struct pt_regs;
|
|
|
|
/* The model vtable abstracts the differences between
|
|
* various x86 CPU model's perfctr support.
|
|
*/
|
|
struct op_x86_model_spec {
|
|
unsigned int const num_counters;
|
|
unsigned int const num_controls;
|
|
void (*fill_in_addresses)(struct op_msrs * const msrs);
|
|
void (*setup_ctrs)(struct op_msrs const * const msrs);
|
|
int (*check_ctrs)(struct pt_regs * const regs,
|
|
struct op_msrs const * const msrs);
|
|
void (*start)(struct op_msrs const * const msrs);
|
|
void (*stop)(struct op_msrs const * const msrs);
|
|
void (*shutdown)(struct op_msrs const * const msrs);
|
|
};
|
|
|
|
extern struct op_x86_model_spec const op_ppro_spec;
|
|
extern struct op_x86_model_spec const op_p4_spec;
|
|
extern struct op_x86_model_spec const op_p4_ht2_spec;
|
|
extern struct op_x86_model_spec const op_athlon_spec;
|
|
|
|
#endif /* OP_X86_MODEL_H */
|