(forgot to attach the patch, so here it is) Hi,
I've made a stab at consolidating the event and group types for the Power chips (ppc970 through Power7).
I'm not real happy with the result. It is a little more compact in the coding of the case statements, but in gaining some compaction, we've lost some clarity.
I made an attempt to be able to use one pair of types for all processors, but the C99 language doesn't appear to like things like this:
int *foo = { 1, 2, 3 }; but has no problem with: char *foo = "some string";This seems like an inconsistent compiler design to me, but without that support, I cannot easily use a pointer in replacement for fixed-length arrays. So the choice then becomes:
1) Create separately-declared and named fixed-length arrays which are then pointed to by the event and group arrays.
2) Consolidate the structures containing fixed-length arrays that are really the same, but keep separate those that aren't. This means we still need switch statements based on the PMU type, but the number of truly separate cases is reduced.
I chose 2 because it creates a much smaller patch, and I'm not sure I like the idea of creating a bunch of separate declarations, and would take extra room over all (adds pointers). On the other hand, the structures have ugly names like pme_power_c6_v4_event_t (c6 = 6 counters, v4 = 4 group vectors).
Anyway, please have a look, and let me know if you see another way to do it, or or if you'd have solution 1.
P.S. As I was working on this, I ran across a few problems with the PCL codes on Power5+ and Power6, and I will need to patch that at some point. I would like to get this "consolidate or not" decision made first, though.
Signed off by: Corey Ashford <cjash...@us.ibm.com> -- Regards, - Corey Corey Ashford Software Engineer IBM Linux Technology Center, Linux Toolchain cjash...@us.ibm.com IBM Linux Technology Center, Linux Toolchain Beaverton, OR 503-578-3507 cjash...@us.ibm.com
Index: lib/pfmlib_gen_powerpc.c =================================================================== --- lib.orig/pfmlib_gen_powerpc.c 2009-07-14 10:39:49.000000000 -0700 +++ lib/pfmlib_gen_powerpc.c 2009-07-15 09:23:52.000000000 -0700 @@ -39,13 +39,9 @@ #include "pfmlib_priv.h" -#include "pfmlib_ppc970_priv.h" -#include "pfmlib_ppc970mp_priv.h" -#include "pfmlib_power4_priv.h" -#include "pfmlib_power5_priv.h" -#include "pfmlib_power5+_priv.h" -#include "pfmlib_power6_priv.h" -#include "pfmlib_power7_priv.h" +#include "pfmlib_power_c8_v1_priv.h" +#include "pfmlib_power_c6_v3_priv.h" +#include "pfmlib_power_c6_v4_priv.h" #include "ppc970_events.h" #include "ppc970mp_events.h" @@ -55,7 +51,17 @@ #include "power6_events.h" #include "power7_events.h" -/* Add structures here to define the PMD and PMC mappings. */ +static unsigned long long mmcr0_fc5_6_mask; +static unsigned long long *mmcr0_counter_mask; +static unsigned long long *mmcr1_counter_mask; +static unsigned long long *mmcr0_counter_off_val; +static unsigned long long *mmcr1_counter_off_val; +static pme_power_c8_v1_entry_t *power_c8_v1_events; +static pme_power_c6_v3_entry_t *power_c6_v3_events; +static pme_power_c6_v4_entry_t *power_c6_v4_events; +static pmg_power_c8_v1_group_t *power_c8_v1_groups; +static pmg_power_c6_v3_group_t *power_c6_v3_groups; +static pmg_power_c6_v4_group_t *power_c6_v4_groups; static int get_num_event_counters() { return gen_powerpc_support.pmd_count; @@ -68,19 +74,15 @@ static int get_num_group_vec() { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return PPC970_NUM_GROUP_VEC; case PFMLIB_PPC970MP_PMU: - return PPC970MP_NUM_GROUP_VEC; case PFMLIB_POWER4_PMU: - return POWER4_NUM_GROUP_VEC; + return 1; case PFMLIB_POWER5_PMU: - return POWER5_NUM_GROUP_VEC; case PFMLIB_POWER5p_PMU: - return POWER5p_NUM_GROUP_VEC; + return 3; case PFMLIB_POWER6_PMU: - return POWER6_NUM_GROUP_VEC; case PFMLIB_POWER7_PMU: - return POWER7_NUM_GROUP_VEC; + return 4; } return -1; } @@ -88,19 +90,15 @@ static unsigned long long *get_group_vector(int event) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return &ppc970_pe[event].pme_group_vector[0]; case PFMLIB_PPC970MP_PMU: - return &ppc970mp_pe[event].pme_group_vector[0]; case PFMLIB_POWER4_PMU: - return &power4_pe[event].pme_group_vector[0]; + return &power_c8_v1_events[event].pme_group_vector[0]; case PFMLIB_POWER5_PMU: - return &power5_pe[event].pme_group_vector[0]; case PFMLIB_POWER5p_PMU: - return &power5p_pe[event].pme_group_vector[0]; + return &power_c6_v3_events[event].pme_group_vector[0]; case PFMLIB_POWER6_PMU: - return &power6_pe[event].pme_group_vector[0]; case PFMLIB_POWER7_PMU: - return &power7_pe[event].pme_group_vector[0]; + return &power_c6_v4_events[event].pme_group_vector[0]; } return (unsigned long long *)-1; } @@ -108,19 +106,15 @@ static int get_event_id(int event, int counter) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return ppc970_pe[event].pme_event_ids[counter]; case PFMLIB_PPC970MP_PMU: - return ppc970mp_pe[event].pme_event_ids[counter]; case PFMLIB_POWER4_PMU: - return power4_pe[event].pme_event_ids[counter]; + return power_c8_v1_events[event].pme_event_ids[counter]; case PFMLIB_POWER5_PMU: - return power5_pe[event].pme_event_ids[counter]; case PFMLIB_POWER5p_PMU: - return power5p_pe[event].pme_event_ids[counter]; + return power_c6_v3_events[event].pme_event_ids[counter]; case PFMLIB_POWER6_PMU: - return power6_pe[event].pme_event_ids[counter]; case PFMLIB_POWER7_PMU: - return power7_pe[event].pme_event_ids[counter]; + return power_c6_v4_events[event].pme_event_ids[counter]; } return -1; } @@ -128,19 +122,15 @@ static char *get_event_name(int event) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return ppc970_pe[event].pme_name; case PFMLIB_PPC970MP_PMU: - return ppc970mp_pe[event].pme_name; case PFMLIB_POWER4_PMU: - return power4_pe[event].pme_name; + return power_c8_v1_events[event].pme_name; case PFMLIB_POWER5_PMU: - return power5_pe[event].pme_name; case PFMLIB_POWER5p_PMU: - return power5p_pe[event].pme_name; + return power_c6_v3_events[event].pme_name; case PFMLIB_POWER6_PMU: - return power6_pe[event].pme_name; case PFMLIB_POWER7_PMU: - return power7_pe[event].pme_name; + return power_c6_v4_events[event].pme_name; } return (char *)-1; } @@ -148,19 +138,15 @@ static char *get_long_desc(int event) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return ppc970_pe[event].pme_long_desc; case PFMLIB_PPC970MP_PMU: - return ppc970mp_pe[event].pme_long_desc; case PFMLIB_POWER4_PMU: - return power4_pe[event].pme_long_desc; + return power_c8_v1_events[event].pme_long_desc; case PFMLIB_POWER5_PMU: - return power5_pe[event].pme_long_desc; case PFMLIB_POWER5p_PMU: - return power5p_pe[event].pme_long_desc; + return power_c6_v3_events[event].pme_long_desc; case PFMLIB_POWER6_PMU: - return power6_pe[event].pme_long_desc; case PFMLIB_POWER7_PMU: - return power7_pe[event].pme_long_desc; + return power_c6_v4_events[event].pme_long_desc; } return (char *)-1; } @@ -168,19 +154,15 @@ static int get_group_event_id(int group, int counter) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return ppc970_groups[group].pmg_event_ids[counter]; case PFMLIB_PPC970MP_PMU: - return ppc970mp_groups[group].pmg_event_ids[counter]; case PFMLIB_POWER4_PMU: - return power4_groups[group].pmg_event_ids[counter]; + return power_c8_v1_groups[group].pmg_event_ids[counter]; case PFMLIB_POWER5_PMU: - return power5_groups[group].pmg_event_ids[counter]; case PFMLIB_POWER5p_PMU: - return power5p_groups[group].pmg_event_ids[counter]; + return power_c6_v3_groups[group].pmg_event_ids[counter]; case PFMLIB_POWER6_PMU: - return power6_groups[group].pmg_event_ids[counter]; case PFMLIB_POWER7_PMU: - return power7_groups[group].pmg_event_ids[counter]; + return power_c6_v4_groups[group].pmg_event_ids[counter]; } return -1; } @@ -188,19 +170,15 @@ static unsigned long long get_mmcr0(int group) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return ppc970_groups[group].pmg_mmcr0; case PFMLIB_PPC970MP_PMU: - return ppc970mp_groups[group].pmg_mmcr0; case PFMLIB_POWER4_PMU: - return power4_groups[group].pmg_mmcr0; + return power_c8_v1_groups[group].pmg_mmcr0; case PFMLIB_POWER5_PMU: - return power5_groups[group].pmg_mmcr0; case PFMLIB_POWER5p_PMU: - return power5p_groups[group].pmg_mmcr0; + return power_c6_v3_groups[group].pmg_mmcr0; case PFMLIB_POWER6_PMU: - return power6_groups[group].pmg_mmcr0; case PFMLIB_POWER7_PMU: - return power7_groups[group].pmg_mmcr0; + return power_c6_v4_groups[group].pmg_mmcr0; } return -1; } @@ -208,19 +186,15 @@ static unsigned long long get_mmcr1(int group) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return ppc970_groups[group].pmg_mmcr1; case PFMLIB_PPC970MP_PMU: - return ppc970mp_groups[group].pmg_mmcr1; case PFMLIB_POWER4_PMU: - return power4_groups[group].pmg_mmcr1; + return power_c8_v1_groups[group].pmg_mmcr1; case PFMLIB_POWER5_PMU: - return power5_groups[group].pmg_mmcr1; case PFMLIB_POWER5p_PMU: - return power5p_groups[group].pmg_mmcr1; + return power_c6_v3_groups[group].pmg_mmcr1; case PFMLIB_POWER6_PMU: - return power6_groups[group].pmg_mmcr1; case PFMLIB_POWER7_PMU: - return power7_groups[group].pmg_mmcr1; + return power_c6_v4_groups[group].pmg_mmcr1; } return -1; } @@ -228,19 +202,15 @@ static unsigned long long get_mmcra(int group) { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - return ppc970_groups[group].pmg_mmcra; case PFMLIB_PPC970MP_PMU: - return ppc970mp_groups[group].pmg_mmcra; case PFMLIB_POWER4_PMU: - return power4_groups[group].pmg_mmcra; + return power_c8_v1_groups[group].pmg_mmcra; case PFMLIB_POWER5_PMU: - return power5_groups[group].pmg_mmcra; case PFMLIB_POWER5p_PMU: - return power5p_groups[group].pmg_mmcra; + return power_c6_v3_groups[group].pmg_mmcra; case PFMLIB_POWER6_PMU: - return power6_groups[group].pmg_mmcra; case PFMLIB_POWER7_PMU: - return power7_groups[group].pmg_mmcra; + return power_c6_v4_groups[group].pmg_mmcra; } return -1; } @@ -257,44 +227,53 @@ { switch (gen_powerpc_support.pmu_type) { case PFMLIB_PPC970_PMU: - if (event < PPC970_PME_EVENT_COUNT) { - *code = ppc970_pe[event].pme_code; - return PFMLIB_SUCCESS; - } else + if (event >= PPC970_PME_EVENT_COUNT) return PFMLIB_ERR_INVAL; + break; case PFMLIB_PPC970MP_PMU: - if (event < PPC970MP_PME_EVENT_COUNT) { - *code = ppc970mp_pe[event].pme_code; - return PFMLIB_SUCCESS; - } else + if (event >= PPC970MP_PME_EVENT_COUNT) return PFMLIB_ERR_INVAL; + break; case PFMLIB_POWER4_PMU: - if (event < POWER4_PME_EVENT_COUNT) { - *code = power4_pe[event].pme_code; - return PFMLIB_SUCCESS; - } else + if (event >= POWER4_PME_EVENT_COUNT) return PFMLIB_ERR_INVAL; + break; case PFMLIB_POWER5_PMU: - if (event < POWER5_PME_EVENT_COUNT) { - *code = power5_pe[event].pme_code; - return PFMLIB_SUCCESS; - } else + if (event >= POWER5_PME_EVENT_COUNT) return PFMLIB_ERR_INVAL; + break; case PFMLIB_POWER5p_PMU: - if (event < POWER5p_PME_EVENT_COUNT) { - *code = power5p_pe[event].pme_code; - return PFMLIB_SUCCESS; - } else + if (event >= POWER5p_PME_EVENT_COUNT) return PFMLIB_ERR_INVAL; + break; case PFMLIB_POWER6_PMU: - if (event < POWER6_PME_EVENT_COUNT) { - *code = power6_pe[event].pme_code; - return PFMLIB_SUCCESS; - } else + if (event >= POWER6_PME_EVENT_COUNT) + return PFMLIB_ERR_INVAL; + break; + case PFMLIB_POWER7_PMU: + if (event >= POWER7_PME_EVENT_COUNT) return PFMLIB_ERR_INVAL; + break; default: return PFMLIB_ERR_BADHOST; } + + switch (gen_powerpc_support.pmu_type) { + case PFMLIB_PPC970_PMU: + case PFMLIB_PPC970MP_PMU: + case PFMLIB_POWER4_PMU: + *code = power_c8_v1_events[event].pme_code; + break; + case PFMLIB_POWER5_PMU: + case PFMLIB_POWER5p_PMU: + *code = power_c6_v3_events[event].pme_code; + break; + case PFMLIB_POWER6_PMU: + case PFMLIB_POWER7_PMU: + *code = power_c6_v4_events[event].pme_code; + break; + } + return PFMLIB_SUCCESS; } /** @@ -406,7 +385,7 @@ }; /* These masks are used on the PPC970*, and POWER4,4+ chips */ -static unsigned long long power4_mmcr0_counter_mask[POWER4_NUM_EVENT_COUNTERS] = { +static unsigned long long power4_mmcr0_counter_mask[8] = { 0x1fUL << (63 - 55), /* PMC1 */ 0x1fUL << (63 - 62), /* PMC2 */ 0, @@ -416,7 +395,7 @@ 0, 0 }; -static unsigned long long power4_mmcr1_counter_mask[POWER4_NUM_EVENT_COUNTERS] = { +static unsigned long long power4_mmcr1_counter_mask[8] = { 0, 0, 0x1fUL << (63 - 36), /* PMC3 */ @@ -427,7 +406,7 @@ 0x1fUL << (63 - 61) /* PMC8 */ }; -static unsigned long long power4_mmcr0_counter_off_val[POWER4_NUM_EVENT_COUNTERS] = { +static unsigned long long power4_mmcr0_counter_off_val[8] = { 0, /* PMC1 */ 0, /* PMC2 */ 0, @@ -437,7 +416,7 @@ 0, 0 }; -static unsigned long long power4_mmcr1_counter_off_val[POWER4_NUM_EVENT_COUNTERS] = { +static unsigned long long power4_mmcr1_counter_off_val[8] = { 0, 0, 0, /* PMC3 */ @@ -448,7 +427,7 @@ 0 /* PMC8 */ }; -static unsigned long long ppc970_mmcr0_counter_off_val[POWER4_NUM_EVENT_COUNTERS] = { +static unsigned long long ppc970_mmcr0_counter_off_val[8] = { 0x8UL << (63 - 55), /* PMC1 */ 0x8UL << (63 - 62), /* PMC2 */ 0, @@ -458,7 +437,7 @@ 0, 0 }; -static unsigned long long ppc970_mmcr1_counter_off_val[POWER4_NUM_EVENT_COUNTERS] = { +static unsigned long long ppc970_mmcr1_counter_off_val[8] = { 0, 0, 0x8UL << (63 - 36), /* PMC3 */ @@ -470,7 +449,7 @@ }; /* These masks are used on POWER5,5+,5++,6,7 */ -static unsigned long long power5_mmcr0_counter_mask[POWER5_NUM_EVENT_COUNTERS] = { +static unsigned long long power5_mmcr0_counter_mask[6] = { 0, 0, 0, @@ -478,7 +457,7 @@ 0, 0 }; -static unsigned long long power5_mmcr1_counter_mask[POWER5_NUM_EVENT_COUNTERS] = { +static unsigned long long power5_mmcr1_counter_mask[6] = { 0xffUL << (63 - 39), /* PMC1 */ 0xffUL << (63 - 47), /* PMC2 */ 0xffUL << (63 - 55), /* PMC3 */ @@ -487,7 +466,7 @@ 0 }; -static unsigned long long power5_mmcr0_counter_off_val[POWER5_NUM_EVENT_COUNTERS] = { +static unsigned long long power5_mmcr0_counter_off_val[6] = { 0, 0, 0, @@ -496,7 +475,7 @@ 0 }; -static unsigned long long power5_mmcr1_counter_off_val[POWER5_NUM_EVENT_COUNTERS] = { +static unsigned long long power5_mmcr1_counter_off_val[6] = { 0, /* PMC1 */ 0, /* PMC2 */ 0, /* PMC3 */ @@ -507,11 +486,6 @@ unsigned *pmd_priv_vec; -static unsigned long long mmcr0_fc5_6_mask; -static unsigned long long *mmcr0_counter_mask; -static unsigned long long *mmcr1_counter_mask; -static unsigned long long *mmcr0_counter_off_val; -static unsigned long long *mmcr1_counter_off_val; /** * pfm_gen_powerpc_dispatch_events @@ -700,39 +674,43 @@ gen_powerpc_support.pmu_type = PFMLIB_PPC970_PMU; gen_powerpc_support.pmu_name = "PPC970"; gen_powerpc_support.pme_count = PPC970_PME_EVENT_COUNT; - gen_powerpc_support.pmd_count = PPC970_NUM_EVENT_COUNTERS; - gen_powerpc_support.pmc_count = PPC970_NUM_CONTROL_REGS; - gen_powerpc_support.num_cnt = PPC970_NUM_EVENT_COUNTERS; + gen_powerpc_support.pmd_count = 8; + gen_powerpc_support.pmc_count = 3; + gen_powerpc_support.num_cnt = 8; mmcr0_fc5_6_mask = 0; mmcr0_counter_mask = power4_mmcr0_counter_mask; mmcr1_counter_mask = power4_mmcr1_counter_mask; mmcr0_counter_off_val = ppc970_mmcr0_counter_off_val; mmcr1_counter_off_val = ppc970_mmcr1_counter_off_val; pmd_priv_vec = gq_pmd_priv_vec; + power_c8_v1_events = ppc970_pe; + power_c8_v1_groups = ppc970_groups; return PFMLIB_SUCCESS; } if (__is_processor(PV_970MP)) { gen_powerpc_support.pmu_type = PFMLIB_PPC970MP_PMU; gen_powerpc_support.pmu_name = "PPC970MP"; gen_powerpc_support.pme_count = PPC970MP_PME_EVENT_COUNT; - gen_powerpc_support.pmd_count = PPC970MP_NUM_EVENT_COUNTERS; - gen_powerpc_support.pmc_count = PPC970MP_NUM_CONTROL_REGS; - gen_powerpc_support.num_cnt = PPC970MP_NUM_EVENT_COUNTERS; + gen_powerpc_support.pmd_count = 8; + gen_powerpc_support.pmc_count = 3; + gen_powerpc_support.num_cnt = 8; mmcr0_fc5_6_mask = 0; mmcr0_counter_mask = power4_mmcr0_counter_mask; mmcr1_counter_mask = power4_mmcr1_counter_mask; mmcr0_counter_off_val = ppc970_mmcr0_counter_off_val; mmcr1_counter_off_val = ppc970_mmcr1_counter_off_val; pmd_priv_vec = gq_pmd_priv_vec; + power_c8_v1_events = ppc970mp_pe; + power_c8_v1_groups = ppc970mp_groups; return PFMLIB_SUCCESS; } if (__is_processor(PV_POWER4) || __is_processor(PV_POWER4p)) { gen_powerpc_support.pmu_type = PFMLIB_PPC970_PMU; gen_powerpc_support.pmu_name = "POWER4"; gen_powerpc_support.pme_count = POWER4_PME_EVENT_COUNT; - gen_powerpc_support.pmd_count = POWER4_NUM_EVENT_COUNTERS; - gen_powerpc_support.pmc_count = POWER4_NUM_CONTROL_REGS; - gen_powerpc_support.num_cnt = POWER4_NUM_EVENT_COUNTERS; + gen_powerpc_support.pmd_count = 8; + gen_powerpc_support.pmc_count = 3; + gen_powerpc_support.num_cnt = 8; mmcr0_fc5_6_mask = 0; mmcr0_counter_mask = power4_mmcr0_counter_mask; mmcr1_counter_mask = power4_mmcr1_counter_mask; @@ -741,15 +719,17 @@ mmcr0_counter_off_val = power4_mmcr0_counter_off_val; mmcr1_counter_off_val = power4_mmcr1_counter_off_val; pmd_priv_vec = gq_pmd_priv_vec; + power_c8_v1_events = power4_pe; + power_c8_v1_groups = power4_groups; return PFMLIB_SUCCESS; } if (__is_processor(PV_POWER5)) { gen_powerpc_support.pmu_type = PFMLIB_POWER5_PMU; gen_powerpc_support.pmu_name = "POWER5"; gen_powerpc_support.pme_count = POWER5_PME_EVENT_COUNT; - gen_powerpc_support.pmd_count = POWER5_NUM_EVENT_COUNTERS; - gen_powerpc_support.pmc_count = POWER5_NUM_CONTROL_REGS; - gen_powerpc_support.num_cnt = POWER5_NUM_EVENT_COUNTERS; + gen_powerpc_support.pmd_count = 6; + gen_powerpc_support.pmc_count = 3; + gen_powerpc_support.num_cnt = 6; mmcr0_fc5_6_mask = MMCR0_FC5_6; mmcr0_counter_off_val = ppc970_mmcr0_counter_off_val; mmcr1_counter_off_val = ppc970_mmcr1_counter_off_val; @@ -758,17 +738,19 @@ mmcr0_counter_off_val = power5_mmcr0_counter_off_val; mmcr1_counter_off_val = power5_mmcr1_counter_off_val; pmd_priv_vec = gr_pmd_priv_vec; + power_c6_v3_events = power5_pe; + power_c6_v3_groups = power5_groups; return PFMLIB_SUCCESS; } if (__is_processor(PV_POWER5p)) { gen_powerpc_support.pmu_type = PFMLIB_POWER5p_PMU; gen_powerpc_support.pmu_name = "POWER5+"; gen_powerpc_support.pme_count = POWER5p_PME_EVENT_COUNT; - gen_powerpc_support.pmd_count = POWER5p_NUM_EVENT_COUNTERS; - gen_powerpc_support.pmc_count = POWER5p_NUM_CONTROL_REGS; + gen_powerpc_support.pmd_count = 6; + gen_powerpc_support.pmc_count = 3; mmcr0_counter_off_val = power4_mmcr0_counter_off_val; mmcr1_counter_off_val = power4_mmcr1_counter_off_val; - gen_powerpc_support.num_cnt = POWER5p_NUM_EVENT_COUNTERS; + gen_powerpc_support.num_cnt = 6; mmcr0_counter_mask = power5_mmcr0_counter_mask; mmcr1_counter_mask = power5_mmcr1_counter_mask; mmcr0_counter_off_val = power5_mmcr0_counter_off_val; @@ -783,15 +765,17 @@ } mmcr0_counter_off_val = power5_mmcr0_counter_off_val; mmcr1_counter_off_val = power5_mmcr1_counter_off_val; + power_c6_v3_events = power5p_pe; + power_c6_v3_groups = power5p_groups; return PFMLIB_SUCCESS; } if (__is_processor(PV_POWER6)) { gen_powerpc_support.pmu_type = PFMLIB_POWER6_PMU; gen_powerpc_support.pmu_name = "POWER6"; gen_powerpc_support.pme_count = POWER6_PME_EVENT_COUNT; - gen_powerpc_support.pmd_count = POWER6_NUM_EVENT_COUNTERS; - gen_powerpc_support.pmc_count = POWER6_NUM_CONTROL_REGS; - gen_powerpc_support.num_cnt = POWER6_NUM_EVENT_COUNTERS; + gen_powerpc_support.pmd_count = 6; + gen_powerpc_support.pmc_count = 3; + gen_powerpc_support.num_cnt = 6; mmcr0_fc5_6_mask = 0; mmcr0_counter_mask = power5_mmcr0_counter_mask; mmcr1_counter_mask = power5_mmcr1_counter_mask; @@ -800,15 +784,17 @@ mmcr0_counter_off_val = power5_mmcr0_counter_off_val; mmcr1_counter_off_val = power5_mmcr1_counter_off_val; pmd_priv_vec = gs_pmd_priv_vec; + power_c6_v4_events = power6_pe; + power_c6_v4_groups = power6_groups; return PFMLIB_SUCCESS; } if (__is_processor(PV_POWER7)) { gen_powerpc_support.pmu_type = PFMLIB_POWER7_PMU; gen_powerpc_support.pmu_name = "POWER7"; gen_powerpc_support.pme_count = POWER7_PME_EVENT_COUNT; - gen_powerpc_support.pmd_count = POWER7_NUM_EVENT_COUNTERS; - gen_powerpc_support.pmc_count = POWER7_NUM_CONTROL_REGS; - gen_powerpc_support.num_cnt = POWER7_NUM_EVENT_COUNTERS; + gen_powerpc_support.pmd_count = 6; + gen_powerpc_support.pmc_count = 3; + gen_powerpc_support.num_cnt = 6; mmcr0_fc5_6_mask = 0; mmcr0_counter_mask = power5_mmcr0_counter_mask; mmcr1_counter_mask = power5_mmcr1_counter_mask; @@ -817,6 +803,8 @@ mmcr0_counter_off_val = power5_mmcr0_counter_off_val; mmcr1_counter_off_val = power5_mmcr1_counter_off_val; pmd_priv_vec = gr_pmd_priv_vec; + power_c6_v4_events = power7_pe; + power_c6_v4_groups = power7_groups; return PFMLIB_SUCCESS; } Index: lib/power4_events.h =================================================================== --- lib.orig/power4_events.h 2009-06-16 10:27:49.000000000 -0700 +++ lib/power4_events.h 2009-07-15 09:27:52.000000000 -0700 @@ -20,7 +20,7 @@ * hand. * */ -static pme_power4_entry_t power4_pe[] = { +static pme_power_c8_v1_entry_t power4_pe[] = { #define POWER4_PME_PM_MRK_LSU_SRQ_INST_VALID 0 [ POWER4_PME_PM_MRK_LSU_SRQ_INST_VALID ] = { .pme_name = "PM_MRK_LSU_SRQ_INST_VALID", @@ -2464,7 +2464,7 @@ }; #define POWER4_PME_EVENT_COUNT 244 -static pmg_power4_group_t power4_groups[] = { +static pmg_power_c8_v1_group_t power4_groups[] = { [ 0 ] = { .pmg_name = "pm_slice0", .pmg_desc = "Time Slice 0", Index: lib/power5+_events.h =================================================================== --- lib.orig/power5+_events.h 2009-06-16 10:27:49.000000000 -0700 +++ lib/power5+_events.h 2009-07-15 09:28:06.000000000 -0700 @@ -20,7 +20,7 @@ * hand. * */ -static pme_power5p_entry_t power5p_pe[] = { +static pme_power_c6_v3_entry_t power5p_pe[] = { #define POWER5p_PME_PM_LSU_REJECT_RELOAD_CDF 0 [ POWER5p_PME_PM_LSU_REJECT_RELOAD_CDF ] = { .pme_name = "PM_LSU_REJECT_RELOAD_CDF", @@ -5820,7 +5820,7 @@ }; #define POWER5p_PME_EVENT_COUNT 483 -static pmg_power5p_group_t power5p_groups[] = { +static pmg_power_c6_v3_group_t power5p_groups[] = { [ 0 ] = { .pmg_name = "pm_utilization", .pmg_desc = "CPI and utilization data", Index: lib/power5_events.h =================================================================== --- lib.orig/power5_events.h 2009-06-16 10:27:49.000000000 -0700 +++ lib/power5_events.h 2009-07-15 09:27:59.000000000 -0700 @@ -20,7 +20,7 @@ * hand. * */ -static pme_power5_entry_t power5_pe[] = { +static pme_power_c6_v3_entry_t power5_pe[] = { #define POWER5_PME_PM_LSU_REJECT_RELOAD_CDF 0 [ POWER5_PME_PM_LSU_REJECT_RELOAD_CDF ] = { .pme_name = "PM_LSU_REJECT_RELOAD_CDF", @@ -5616,7 +5616,7 @@ }; #define POWER5_PME_EVENT_COUNT 466 -static pmg_power5_group_t power5_groups[] = { +static pmg_power_c6_v3_group_t power5_groups[] = { [ 0 ] = { .pmg_name = "pm_utilization", .pmg_desc = "CPI and utilization data", Index: lib/power6_events.h =================================================================== --- lib.orig/power6_events.h 2009-06-16 10:27:49.000000000 -0700 +++ lib/power6_events.h 2009-07-15 09:28:13.000000000 -0700 @@ -20,7 +20,7 @@ * hand. * */ -static pme_power6_entry_t power6_pe[] = { +static pme_power_c6_v4_entry_t power6_pe[] = { #define POWER6_PME_PM_LSU_REJECT_STQ_FULL 0 [ POWER6_PME_PM_LSU_REJECT_STQ_FULL ] = { .pme_name = "PM_LSU_REJECT_STQ_FULL", @@ -7213,7 +7213,7 @@ }; #define POWER6_PME_EVENT_COUNT 553 -static pmg_power6_group_t power6_groups[] = { +static pmg_power_c6_v4_group_t power6_groups[] = { [ 0 ] = { .pmg_name = "pm_utilization", .pmg_desc = "CPI and utilization data", Index: lib/power7_events.h =================================================================== --- lib.orig/power7_events.h 2009-07-14 10:39:49.000000000 -0700 +++ lib/power7_events.h 2009-07-15 09:28:22.000000000 -0700 @@ -20,7 +20,7 @@ * hand. * */ -static pme_power7_entry_t power7_pe[] = { +static pme_power_c6_v4_entry_t power7_pe[] = { #define POWER7_PME_PM_NEST_4 0 [ POWER7_PME_PM_NEST_4 ] = { .pme_name = "PM_NEST_4", @@ -6745,7 +6745,7 @@ }; #define POWER7_PME_EVENT_COUNT 517 -static pmg_power7_group_t power7_groups[] = { +static pmg_power_c6_v4_group_t power7_groups[] = { [ 0 ] = { .pmg_name = "pm_utilization", .pmg_desc = "CPI and utilization data", Index: lib/ppc970_events.h =================================================================== --- lib.orig/ppc970_events.h 2009-06-16 10:27:49.000000000 -0700 +++ lib/ppc970_events.h 2009-07-15 09:27:38.000000000 -0700 @@ -20,7 +20,7 @@ * hand. * */ -static pme_ppc970_entry_t ppc970_pe[] = { +static pme_power_c8_v1_entry_t ppc970_pe[] = { #define PPC970_PME_PM_LSU_REJECT_RELOAD_CDF 0 [ PPC970_PME_PM_LSU_REJECT_RELOAD_CDF ] = { .pme_name = "PM_LSU_REJECT_RELOAD_CDF", @@ -2174,7 +2174,7 @@ }; #define PPC970_PME_EVENT_COUNT 215 -static pmg_ppc970_group_t ppc970_groups[] = { +static pmg_power_c8_v1_group_t ppc970_groups[] = { [ 0 ] = { .pmg_name = "pm_slice0", .pmg_desc = "Time Slice 0", Index: lib/ppc970mp_events.h =================================================================== --- lib.orig/ppc970mp_events.h 2009-06-16 10:27:49.000000000 -0700 +++ lib/ppc970mp_events.h 2009-07-15 09:27:45.000000000 -0700 @@ -20,7 +20,7 @@ * hand. * */ -static pme_ppc970mp_entry_t ppc970mp_pe[] = { +static pme_power_c8_v1_entry_t ppc970mp_pe[] = { #define PPC970MP_PME_PM_LSU_REJECT_RELOAD_CDF 0 [ PPC970MP_PME_PM_LSU_REJECT_RELOAD_CDF ] = { .pme_name = "PM_LSU_REJECT_RELOAD_CDF", @@ -2324,7 +2324,7 @@ }; #define PPC970MP_PME_EVENT_COUNT 230 -static pmg_ppc970mp_group_t ppc970mp_groups[] = { +static pmg_power_c8_v1_group_t ppc970mp_groups[] = { [ 0 ] = { .pmg_name = "pm_slice0", .pmg_desc = "Time Slice 0", Index: lib/pfmlib_power_c6_v3_priv.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ lib/pfmlib_power_c6_v3_priv.h 2009-07-15 09:18:35.000000000 -0700 @@ -0,0 +1,43 @@ +/****************************/ +/* THIS IS OPEN SOURCE CODE */ +/****************************/ + +#ifndef __PFMLIB_POWER_C6_V3_PRIV_H__ +#define __PFMLIB_POWER_C6_V3_PRIV_H__ + +/* +* File: pfmlib_power_c6_v3_priv.h +* CVS: +* Author: Corey Ashford +* cjash...@us.ibm.com +* Mods: <your name here> +* <your email address> +* +* (C) Copyright IBM Corporation, 2009. All Rights Reserved. +* Contributed by Corey Ashford <cjashfor.ibm.com> +* +* Note: This code was automatically generated and should not be modified by +* hand. +* +*/ +typedef struct { + char *pme_name; + unsigned pme_code; + char *pme_short_desc; + char *pme_long_desc; + int pme_event_ids[6]; + unsigned long long pme_group_vector[3]; +} pme_power_c6_v3_entry_t; + +typedef struct { + char *pmg_name; + char *pmg_desc; + int pmg_event_ids[6]; + unsigned long long pmg_mmcr0; + unsigned long long pmg_mmcr1; + unsigned long long pmg_mmcra; +} pmg_power_c6_v3_group_t; + + +#endif + Index: lib/pfmlib_power_c6_v4_priv.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ lib/pfmlib_power_c6_v4_priv.h 2009-07-15 09:18:35.000000000 -0700 @@ -0,0 +1,43 @@ +/****************************/ +/* THIS IS OPEN SOURCE CODE */ +/****************************/ + +#ifndef __PFMLIB_POWER_C6_V4_PRIV_H__ +#define __PFMLIB_POWER_C6_V4_PRIV_H__ + +/* +* File: pfmlib_power_c6_v4_priv.h +* CVS: +* Author: Corey Ashford +* cjash...@us.ibm.com +* Mods: <your name here> +* <your email address> +* +* (C) Copyright IBM Corporation, 2009. All Rights Reserved. +* Contributed by Corey Ashford <cjashfor.ibm.com> +* +* Note: This code was automatically generated and should not be modified by +* hand. +* +*/ +typedef struct { + char *pme_name; + unsigned pme_code; + char *pme_short_desc; + char *pme_long_desc; + int pme_event_ids[6]; + unsigned long long pme_group_vector[4]; +} pme_power_c6_v4_entry_t; + +typedef struct { + char *pmg_name; + char *pmg_desc; + int pmg_event_ids[6]; + unsigned long long pmg_mmcr0; + unsigned long long pmg_mmcr1; + unsigned long long pmg_mmcra; +} pmg_power_c6_v4_group_t; + + +#endif + Index: lib/pfmlib_power_c8_v1_priv.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ lib/pfmlib_power_c8_v1_priv.h 2009-07-15 09:18:35.000000000 -0700 @@ -0,0 +1,43 @@ +/****************************/ +/* THIS IS OPEN SOURCE CODE */ +/****************************/ + +#ifndef __PFMLIB_POWER_C8_V1_PRIV_H__ +#define __PFMLIB_POWER_C8_V1_PRIV_H__ + +/* +* File: pfmlib_power_c8_v1_priv.h +* CVS: +* Author: Corey Ashford +* cjash...@us.ibm.com +* Mods: <your name here> +* <your email address> +* +* (C) Copyright IBM Corporation, 2009. All Rights Reserved. +* Contributed by Corey Ashford <cjashfor.ibm.com> +* +* Note: This code was automatically generated and should not be modified by +* hand. +* +*/ +typedef struct { + char *pme_name; + unsigned pme_code; + char *pme_short_desc; + char *pme_long_desc; + int pme_event_ids[8]; + unsigned long long pme_group_vector[1]; +} pme_power_c8_v1_entry_t; + +typedef struct { + char *pmg_name; + char *pmg_desc; + int pmg_event_ids[8]; + unsigned long long pmg_mmcr0; + unsigned long long pmg_mmcr1; + unsigned long long pmg_mmcra; +} pmg_power_c8_v1_group_t; + + +#endif +
------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge
_______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel