diff options
author | Robert Richter <robert.richter@amd.com> | 2009-07-10 09:47:17 -0400 |
---|---|---|
committer | Robert Richter <robert.richter@amd.com> | 2009-07-20 10:43:21 -0400 |
commit | 61d149d5248ad7428801cdede0f5fcc2b90cd61c (patch) | |
tree | 7cfc04e6567cf34f2cba40f86287a51566d163ad /arch/x86/oprofile | |
parent | 1b294f5960cd89e49eeb3e797860c552b03f2272 (diff) |
x86/oprofile: Implement op_x86_virt_to_phys()
This patch implements a common x86 function to convert virtual counter
numbers to physical.
Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'arch/x86/oprofile')
-rw-r--r-- | arch/x86/oprofile/nmi_int.c | 6 | ||||
-rw-r--r-- | arch/x86/oprofile/op_model_amd.c | 2 | ||||
-rw-r--r-- | arch/x86/oprofile/op_x86_model.h | 1 |
3 files changed, 8 insertions, 1 deletions
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index 7b3362f9abdb..5856e61cb098 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
@@ -129,6 +129,11 @@ inline int op_x86_phys_to_virt(int phys) | |||
129 | return __get_cpu_var(switch_index) + phys; | 129 | return __get_cpu_var(switch_index) + phys; |
130 | } | 130 | } |
131 | 131 | ||
132 | inline int op_x86_virt_to_phys(int virt) | ||
133 | { | ||
134 | return virt % model->num_counters; | ||
135 | } | ||
136 | |||
132 | static void nmi_shutdown_mux(void) | 137 | static void nmi_shutdown_mux(void) |
133 | { | 138 | { |
134 | int i; | 139 | int i; |
@@ -270,6 +275,7 @@ static void mux_clone(int cpu) | |||
270 | #else | 275 | #else |
271 | 276 | ||
272 | inline int op_x86_phys_to_virt(int phys) { return phys; } | 277 | inline int op_x86_phys_to_virt(int phys) { return phys; } |
278 | inline int op_x86_virt_to_phys(int virt) { return virt; } | ||
273 | static inline void nmi_shutdown_mux(void) { } | 279 | static inline void nmi_shutdown_mux(void) { } |
274 | static inline int nmi_setup_mux(void) { return 1; } | 280 | static inline int nmi_setup_mux(void) { return 1; } |
275 | static inline void | 281 | static inline void |
diff --git a/arch/x86/oprofile/op_model_amd.c b/arch/x86/oprofile/op_model_amd.c index dce69b5979e6..1ea19829d985 100644 --- a/arch/x86/oprofile/op_model_amd.c +++ b/arch/x86/oprofile/op_model_amd.c | |||
@@ -81,7 +81,7 @@ static void op_mux_fill_in_addresses(struct op_msrs * const msrs) | |||
81 | int i; | 81 | int i; |
82 | 82 | ||
83 | for (i = 0; i < NUM_VIRT_COUNTERS; i++) { | 83 | for (i = 0; i < NUM_VIRT_COUNTERS; i++) { |
84 | int hw_counter = i % NUM_COUNTERS; | 84 | int hw_counter = op_x86_virt_to_phys(i); |
85 | if (reserve_perfctr_nmi(MSR_K7_PERFCTR0 + i)) | 85 | if (reserve_perfctr_nmi(MSR_K7_PERFCTR0 + i)) |
86 | msrs->multiplex[i].addr = MSR_K7_PERFCTR0 + hw_counter; | 86 | msrs->multiplex[i].addr = MSR_K7_PERFCTR0 + hw_counter; |
87 | else | 87 | else |
diff --git a/arch/x86/oprofile/op_x86_model.h b/arch/x86/oprofile/op_x86_model.h index 4e2e7c2c519f..b83776180c7f 100644 --- a/arch/x86/oprofile/op_x86_model.h +++ b/arch/x86/oprofile/op_x86_model.h | |||
@@ -60,6 +60,7 @@ struct op_counter_config; | |||
60 | extern u64 op_x86_get_ctrl(struct op_x86_model_spec const *model, | 60 | extern u64 op_x86_get_ctrl(struct op_x86_model_spec const *model, |
61 | struct op_counter_config *counter_config); | 61 | struct op_counter_config *counter_config); |
62 | extern int op_x86_phys_to_virt(int phys); | 62 | extern int op_x86_phys_to_virt(int phys); |
63 | extern int op_x86_virt_to_phys(int virt); | ||
63 | 64 | ||
64 | extern struct op_x86_model_spec op_ppro_spec; | 65 | extern struct op_x86_model_spec op_ppro_spec; |
65 | extern struct op_x86_model_spec op_p4_spec; | 66 | extern struct op_x86_model_spec op_p4_spec; |