38#define is_ear(i) event_is_ear(itanium_pe+(i))
39#define is_ear_tlb(i) event_is_tlb_ear(itanium_pe+(i))
40#define is_iear(i) event_is_iear(itanium_pe+(i))
41#define is_dear(i) event_is_dear(itanium_pe+(i))
42#define is_btb(i) event_is_btb(itanium_pe+(i))
43#define has_opcm(i) event_opcm_ok(itanium_pe+(i))
44#define has_iarr(i) event_iarr_ok(itanium_pe+(i))
45#define has_darr(i) event_darr_ok(itanium_pe+(i))
47#define evt_use_opcm(e) ((e)->pfp_ita_pmc8.opcm_used != 0 || (e)->pfp_ita_pmc9.opcm_used !=0)
48#define evt_use_irange(e) ((e)->pfp_ita_irange.rr_used)
49#define evt_use_drange(e) ((e)->pfp_ita_drange.rr_used)
51#define evt_umask(e) itanium_pe[(e)].pme_umask
54#define pmc_plm pmc_ita_count_reg.pmc_plm
55#define pmc_ev pmc_ita_count_reg.pmc_ev
56#define pmc_oi pmc_ita_count_reg.pmc_oi
57#define pmc_pm pmc_ita_count_reg.pmc_pm
58#define pmc_es pmc_ita_count_reg.pmc_es
59#define pmc_umask pmc_ita_count_reg.pmc_umask
60#define pmc_thres pmc_ita_count_reg.pmc_thres
61#define pmc_ism pmc_ita_count_reg.pmc_ism
84#define PFMLIB_ITA_PMC_BASE 0
106 for(
i=0;
i < cnt;
i++) {
123#define has_counter(e,b) (itanium_pe[e].pme_counters & (1 << (b)) ? (b) : 0)
129 unsigned int i,j,k,l, m;
130 unsigned int max_l0, max_l1, max_l2, max_l3;
141 for (m=0; m < cnt; m++) {
153 DPRINT(
"max_l0=%u max_l1=%u max_l2=%u max_l3=%u\n", max_l0, max_l1, max_l2, max_l3);
168 if (j ==
i)
continue;
176 if(k ==
i || k == j)
continue;
183 if(l ==
i || l == j || l == k)
continue;
195 for (j=0; j < cnt ; j++ ) {
215 __pfm_vbprintf(
"[PMC%u(pmc%u)=0x%06lx thres=%d es=0x%02x plm=%d umask=0x%x pm=%d ism=0x%x oi=%d] %s\n",
241 unsigned int pos1, pos2;
262 memset(&fake_param, 0,
sizeof(fake_param));
270 DPRINT(
"I-EAR event with no info\n");
306 __pfm_vbprintf(
"[PMC10(pmc10)=0x%lx tlb=%s plm=%d pm=%d ism=0x%x umask=0x%x]\n",
329 unsigned int pos1, pos2;
350 memset(&fake_param, 0,
sizeof(fake_param));
358 DPRINT(
"D-EAR event with no info\n");
399 __pfm_vbprintf(
"[PMC11(pmc11)=0x%lx tlb=%s plm=%d pm=%d ism=0x%x umask=0x%x pt=%d]\n",
440 __pfm_vbprintf(
"[PMC8(pmc8)=0x%lx m=%d i=%d f=%d b=%d match=0x%x mask=0x%x]\n",
464 __pfm_vbprintf(
"[PMC9(pmc9)=0x%lx m=%d i=%d f=%d b=%d match=0x%x mask=0x%x]\n",
487 unsigned int pos1, pos2;
511 memset(&fake_param, 0,
sizeof(fake_param));
521 DPRINT(
"BTB event with no info\n");
547 __pfm_vbprintf(
"[PMC12(pmc12)=0x%lx plm=%d pm=%d tar=%d tm=%d ptm=%d ppm=%d bpt=%d bac=%d]\n",
561 for(
i=8;
i < 17;
i++, pos2++) {
565 __pfm_vbprintf(
"[PMD%u(pmd%u)]\n", pd[pos2].reg_num, pd[pos2].reg_num);
585 for(
i=0;
i < 4;
i++) {
587 if (lim[
i].rr_start == 0 && lim[
i].rr_end == 0)
break;
592 if (mode == 0 && (lim[
i].rr_start & 0xf || lim[
i].rr_end & 0xf))
601 pfmlib_reg_t *br,
int nbr,
int dir,
int *idx,
int *reg_idx,
int plm)
603 unsigned long size, l_addr,
c;
604 unsigned long l_offs = 0, r_offs = 0;
605 unsigned long l_size, r_size;
609 if (nbr < 1 || end <=
start)
return;
613 DPRINT(
"start=0x%016lx end=0x%016lx size=0x%lx bytes (%lu bundles) nbr=%d dir=%d\n",
614 start, end, size, size >> 4, nbr, dir);
620 DPRINT(
"largest power of two possible: 2^%d=0x%lx, crossing=0x%016lx\n",
624 if ((
c - (1UL<<p2)) >=
start) {
625 l_addr =
c - (1UL << p2);
629 if ((
c + (1UL<<p2)) <= end) {
632 l_addr =
c - (1UL << p2);
635 l_size = l_addr -
start;
636 r_size = end - l_addr-(1UL<<p2);
638 DPRINT(
"largest chunk: 2^%d=0x%lx @0x%016lx-0x%016lx\n", p2, 1UL<<p2, l_addr, l_addr+(1UL<<p2));
639 if (l_size)
DPRINT(
"before: 0x%016lx-0x%016lx\n",
start, l_addr);
640 if (r_size)
DPRINT(
"after : 0x%016lx-0x%016lx\n", l_addr+(1UL<<p2), end);
642 if (dir == 0 && l_size != 0 && nbr == 1) {
644 l_addr = end - (1UL << p2);
646 l_offs =
start - l_addr;
647 DPRINT(
">>l_offs: 0x%lx\n", l_offs);
649 }
else if (dir == 1 && r_size != 0 && nbr == 1) {
653 r_offs = l_addr+(1UL<<p2) - end;
654 DPRINT(
">>r_offs: 0x%lx\n", r_offs);
657 l_size = l_addr -
start;
658 r_size = end - l_addr-(1UL<<p2);
660 DPRINT(
">>largest chunk: 2^%d @0x%016lx-0x%016lx\n", p2, l_addr, l_addr+(1UL<<p2));
661 if (l_size && !l_offs)
DPRINT(
">>before: 0x%016lx-0x%016lx\n",
start, l_addr);
662 if (r_size && !r_offs)
DPRINT(
">>after : 0x%016lx-0x%016lx\n", l_addr+(1UL<<p2), end);
686 br[*idx+1].
reg_num = *reg_idx+1;
698 r_nbr = l_nbr = nbr >>1;
706 if (l_size > r_size) {
714 do_normal_rr(l_addr+(1UL<<p2), end, br, r_nbr, 1, idx, reg_idx, plm);
729 for (j=0; j < n_pairs; j++, base_idx += 2) {
734 __pfm_vbprintf(
"brp%u: db%u: 0x%016lx db%u: plm=0x%x mask=0x%016lx end=0x%016lx\n",
735 dbr[base_idx].reg_num>>1,
736 dbr[base_idx].reg_num,
737 dbr[base_idx].reg_value,
738 dbr[base_idx+1].reg_num,
753 int i, j, br_index, reg_idx, prev_index;
761 for (
i=0;
i < n;
i++, in_rr++, out_rr++) {
765 if (br_index == 8)
break;
767 prev_index = br_index;
777 DPRINT(
"br_index=%d reg_idx=%d\n", br_index, reg_idx);
783 for(j=prev_index; j < br_index; j+=2) {
788 if (br[j].reg_value <= in_rr->rr_start)
791 if (r_end >= in_rr->
rr_end)
818 int ret, base_idx = 0;
833 DPRINT(
"n_intervals=%d\n", n_intervals);
870 int ret, base_idx = 0;
885 DPRINT(
"n_intervals=%d\n", n_intervals);
912 __pfm_vbprintf(
"[PMC11(pmc11)=0x%lx tlb=%s plm=%d pm=%d ism=0x%x umask=0x%x pt=%d]\n",
1135 memset(counters, 0,
sizeof(*counters));
1138 for(
i=0; m ;
i++, m>>=1) {
1170 for(
i=4;
i < 8;
i++)
#define PME_ITA_CPU_CYCLES
#define PME_ITA_IA64_INST_RETIRED
static pme_ita_entry_t itanium_pe[]
#define PME_ITA_EVENT_COUNT
static struct timeval start
static double c[MATRIX_SIZE][MATRIX_SIZE]
#define PFMLIB_ERR_FEATCOMB
#define PFMLIB_ERR_IRRALIGN
static int pfm_regmask_set(pfmlib_regmask_t *h, unsigned int b)
#define PFMLIB_ERR_DRRTOOMANY
#define PFMLIB_ERR_DRRINVAL
#define PFMLIB_ERR_TOOMANY
static int pfm_regmask_isset(pfmlib_regmask_t *h, unsigned int b)
#define PFMLIB_ERR_IRRTOOMANY
#define PFMLIB_ERR_NOASSIGN
#define PFMLIB_PFP_SYSTEMWIDE
#define PFMLIB_ERR_IRRINVAL
#define PFMLIB_ERR_NOTSUPP
#define PFMLIB_ITANIUM_PMU
static int pfm_dispatch_iear(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in, pfmlib_output_param_t *outp)
static int pfm_dispatch_opcm(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in, pfmlib_output_param_t *outp)
static int pfm_dispatch_irange(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in, pfmlib_output_param_t *outp, pfmlib_ita_output_param_t *mod_out)
int pfm_ita_support_iarr(unsigned int i)
int pfm_ita_is_btb(unsigned int i)
static int check_intervals(pfmlib_ita_input_rr_t *irr, int mode, int *n_intervals)
int pfm_ita_support_darr(unsigned int i)
pfm_pmu_support_t itanium_support
static int pfm_ita_detect(void)
static void print_one_range(pfmlib_ita_input_rr_desc_t *in_rr, pfmlib_ita_output_rr_desc_t *out_rr, pfmlib_reg_t *dbr, int base_idx, int n_pairs)
static int check_qualifier_constraints(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in)
static void pfm_ita_get_event_counters(unsigned int j, pfmlib_regmask_t *counters)
int pfm_ita_get_event_maxincr(unsigned int i, unsigned int *maxincr)
static void pfm_ita_get_hw_counter_width(unsigned int *width)
int pfm_ita_get_ear_mode(unsigned int i, pfmlib_ita_ear_mode_t *m)
static char * pfm_ita_get_event_name(unsigned int i)
#define has_counter(e, b)
static int pfm_ita_dispatch_events(pfmlib_input_param_t *inp, void *model_in, pfmlib_output_param_t *outp, void *model_out)
static int pfm_dispatch_drange(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in, pfmlib_output_param_t *outp, pfmlib_ita_output_param_t *mod_out)
static int check_range_plm(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in)
int pfm_ita_is_dear_tlb(unsigned int i)
int pfm_ita_get_event_umask(unsigned int i, unsigned long *umask)
int pfm_ita_is_iear_tlb(unsigned int i)
static void pfm_ita_get_impl_pmds(pfmlib_regmask_t *impl_pmds)
static int pfm_ita_dispatch_counters(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in, pfmlib_output_param_t *outp)
int pfm_ita_support_opcm(unsigned int i)
static int valid_assign(unsigned int *as, pfmlib_regmask_t *r_pmcs, unsigned int cnt)
static int pfm_ita_get_inst_retired(pfmlib_event_t *e)
static int pfm_ita_get_cycle_event(pfmlib_event_t *e)
static int compute_normal_rr(pfmlib_ita_input_rr_t *irr, int dfl_plm, int n, int *base_idx, pfmlib_ita_output_rr_t *orr)
int pfm_ita_is_dear(unsigned int i)
static int pfm_ita_get_event_code(unsigned int i, unsigned int cnt, int *code)
int pfm_ita_is_ear(unsigned int i)
static int pfm_dispatch_btb(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in, pfmlib_output_param_t *outp)
int pfm_ita_is_iear_cache(unsigned int i)
int pfm_ita_is_iear(unsigned int i)
static void do_normal_rr(unsigned long start, unsigned long end, pfmlib_reg_t *br, int nbr, int dir, int *idx, int *reg_idx, int plm)
static void pfm_ita_get_impl_pmcs(pfmlib_regmask_t *impl_pmcs)
static int pfm_dispatch_dear(pfmlib_input_param_t *inp, pfmlib_ita_input_param_t *mod_in, pfmlib_output_param_t *outp)
#define evt_use_irange(e)
static void pfm_ita_get_impl_counters(pfmlib_regmask_t *impl_counters)
#define evt_use_drange(e)
int pfm_ita_is_dear_cache(unsigned int i)
@ PFMLIB_ITA_EAR_TLB_MODE
@ PFMLIB_ITA_EAR_CACHE_MODE
#define PMU_ITA_COUNTER_WIDTH
#define PMU_ITA_NUM_COUNTERS
#define PMU_ITA_FIRST_COUNTER
#define PFMLIB_ITA_FL_EVT_NO_QUALCHECK
void __pfm_vbprintf(const char *fmt,...)
#define DPRINT(fmt, a...)
static int pfm_ia64_fls(unsigned long x)
static int pfm_ia64_get_cpu_family(void)
pfmlib_ita_ear_mode_t ear_mode
pfmlib_ita_output_rr_t pfp_ita_irange
pfmlib_ita_output_rr_t pfp_ita_drange
pfmlib_ita_output_rr_desc_t rr_infos[4]
pfmlib_reg_t pfp_pmds[PFMLIB_MAX_PMDS]
pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]
unsigned int pfp_pmc_count
unsigned int pfp_pmd_count
unsigned long long reg_value
unsigned long reg_alt_addr
unsigned long long reg_addr
unsigned long pme_counters
struct pfm_ita_pmc_reg_t::@34 pmc12_ita_reg
struct pfm_ita_pmc_reg_t::@33 pmc11_ita_reg
struct pfm_ita_pmc_reg_t::@32 pmc10_ita_reg
struct pfm_ita_pmc_reg_t::@35 pmc13_ita_reg
struct pfm_ita_pmc_reg_t::@31 pmc8_9_ita_reg