From: Mikael Pettersson - Move tsc_on/nractrs/nrictrs control fields to new struct cpu_control_header. This depends on the physical-indexing patch for x86. Signed-off-by: Mikael Pettersson Signed-off-by: Andrew Morton --- 25-akpm/drivers/perfctr/x86.c | 32 ++++++++++++++++---------------- 25-akpm/include/asm-i386/perfctr.h | 6 +++++- 2 files changed, 21 insertions(+), 17 deletions(-) diff -puN drivers/perfctr/x86.c~perfctr-api-update-3-9-cpu_control_header-x86 drivers/perfctr/x86.c --- 25/drivers/perfctr/x86.c~perfctr-api-update-3-9-cpu_control_header-x86 2005-03-13 13:23:20.000000000 -0800 +++ 25-akpm/drivers/perfctr/x86.c 2005-03-13 13:23:20.000000000 -0800 @@ -239,11 +239,11 @@ static int p5_like_check_control(struct unsigned short cesr_half[2]; unsigned int pmc, evntsel, i; - if (state->control.nrictrs != 0 || state->control.nractrs > 2) + if (state->control.header.nrictrs != 0 || state->control.header.nractrs > 2) return -EINVAL; cesr_half[0] = 0; cesr_half[1] = 0; - for(i = 0; i < state->control.nractrs; ++i) { + for(i = 0; i < state->control.header.nractrs; ++i) { pmc = state->control.pmc_map[i]; state->pmc[i].map = pmc; if (pmc > 1 || cesr_half[pmc] != 0) @@ -366,7 +366,7 @@ static int mii_check_control(struct perf #if !defined(CONFIG_X86_TSC) static int c6_check_control(struct perfctr_cpu_state *state, int is_global) { - if (state->control.tsc_on) + if (state->control.header.tsc_on) return -EINVAL; return p5_like_check_control(state, C6_CESR_RESERVED, 1); } @@ -407,8 +407,8 @@ static int p6_like_check_control(struct { unsigned int evntsel, i, nractrs, nrctrs, pmc_mask, pmc; - nractrs = state->control.nractrs; - nrctrs = nractrs + state->control.nrictrs; + nractrs = state->control.header.nractrs; + nrctrs = nractrs + state->control.header.nrictrs; if (nrctrs < nractrs || nrctrs > (is_k7 ? 4 : 2)) return -EINVAL; @@ -637,9 +637,9 @@ static void k7_clear_counters(void) */ static int vc3_check_control(struct perfctr_cpu_state *state, int is_global) { - if (state->control.nrictrs || state->control.nractrs > 1) + if (state->control.header.nrictrs || state->control.header.nractrs > 1) return -EINVAL; - if (state->control.nractrs == 1) { + if (state->control.header.nractrs == 1) { if (state->control.pmc_map[0] != 1) return -EINVAL; state->pmc[0].map = 1; @@ -756,8 +756,8 @@ static int p4_check_control(struct perfc { unsigned int i, nractrs, nrctrs, pmc_mask; - nractrs = state->control.nractrs; - nrctrs = nractrs + state->control.nrictrs; + nractrs = state->control.header.nractrs; + nrctrs = nractrs + state->control.header.nrictrs; if (nrctrs < nractrs || nrctrs > 18) return -EINVAL; @@ -904,7 +904,7 @@ static void p4_clear_counters(void) static int generic_check_control(struct perfctr_cpu_state *state, int is_global) { - if (state->control.nractrs || state->control.nrictrs) + if (state->control.header.nractrs || state->control.header.nrictrs) return -EINVAL; return 0; } @@ -1022,8 +1022,8 @@ static inline int check_ireset(const str { unsigned int nrctrs, i; - i = state->control.nractrs; - nrctrs = i + state->control.nrictrs; + i = state->control.header.nractrs; + nrctrs = i + state->control.header.nrictrs; for(; i < nrctrs; ++i) { unsigned int pmc = state->pmc[i].map & P4_MASK_FAST_RDPMC; if ((int)state->control.ireset[pmc] >= 0) @@ -1061,7 +1061,7 @@ int perfctr_cpu_update_control(struct pe /* disallow i-mode counters if we cannot catch the interrupts */ if (!(perfctr_info.cpu_features & PERFCTR_FEATURE_PCINT) - && state->control.nrictrs) + && state->control.header.nrictrs) return -EPERM; err = check_control(state, is_global); @@ -1070,9 +1070,9 @@ int perfctr_cpu_update_control(struct pe err = check_ireset(state); if (err < 0) return err; - state->cstatus = perfctr_mk_cstatus(state->control.tsc_on, - state->control.nractrs, - state->control.nrictrs); + state->cstatus = perfctr_mk_cstatus(state->control.header.tsc_on, + state->control.header.nractrs, + state->control.header.nrictrs); setup_imode_start_values(state); return 0; } diff -puN include/asm-i386/perfctr.h~perfctr-api-update-3-9-cpu_control_header-x86 include/asm-i386/perfctr.h --- 25/include/asm-i386/perfctr.h~perfctr-api-update-3-9-cpu_control_header-x86 2005-03-13 13:23:20.000000000 -0800 +++ 25-akpm/include/asm-i386/perfctr.h 2005-03-13 13:23:20.000000000 -0800 @@ -30,10 +30,14 @@ struct perfctr_sum_ctrs { unsigned long long pmc[18]; }; -struct perfctr_cpu_control { +struct perfctr_cpu_control_header { unsigned int tsc_on; unsigned int nractrs; /* # of a-mode counters */ unsigned int nrictrs; /* # of i-mode counters */ +}; + +struct perfctr_cpu_control { + struct perfctr_cpu_control_header header; unsigned int evntsel[18]; /* primary control registers, physical indices */ unsigned int ireset[18]; /* >= 2^31, for i-mode counters, physical indices */ struct { _