static void show_event_info(char *name, unsigned int idx) { pfmlib_regmask_t cnt, impl_cnt; char *desc; unsigned int n1, n2, i, c; int code, prev_code = 0, first = 1; int ret; pfm_get_event_counters(idx, &cnt); pfm_get_num_counters(&n2); pfm_get_impl_counters(&impl_cnt); n1 = n2; printf("#-----------------------------\n" "Name : %s\n", name); pfm_get_event_description(idx, &desc); printf("Desc : %s\n", desc); free(desc); printf("Code :"); for (i=0; n1; i++) { if (pfm_regmask_isset(&impl_cnt, i)) n1--; if (pfm_regmask_isset(&cnt, i)) { pfm_get_event_code_counter(idx,i,&code); if (first == 1 || code != prev_code) { printf(" 0x%x", code); first = 0; } prev_code = code; } } putchar('\n'); n1 = n2; printf("Counters : [ "); for (i=0; n1; i++) { if (pfm_regmask_isset(&impl_cnt, i)) n1--; if (pfm_regmask_isset(&cnt, i)) printf("%d ", i); } puts("]"); pfm_get_num_event_masks(idx, &n1); for (i = 0; i < n1; i++) { ret = pfm_get_event_mask_name(idx, i, name, max_len+1); if (ret != PFMLIB_SUCCESS) continue; pfm_get_event_mask_description(idx, i, &desc); pfm_get_event_mask_code(idx, i, &c); printf("Umask-%02u : 0x%02x : [%s] : %s\n", i, c, name, desc); free(desc); } }
static int setup_preset_term(int *native, pfmlib_event_t *event) { /* It seems this could be greatly simplified. If impl_cnt is non-zero, the event lives on a counter. Therefore the entire routine could be: if (impl_cnt!= 0) encode_native_event. Am I wrong? */ pfmlib_regmask_t impl_cnt, evnt_cnt; unsigned int n; int j, ret; /* find out which counters it lives on */ if ((ret = pfm_get_event_counters(event->event,&evnt_cnt)) != PFMLIB_SUCCESS) { PAPIERROR("pfm_get_event_counters(%d,%p): %s",event->event,&evnt_cnt,pfm_strerror(ret)); return(PAPI_EBUG); } if ((ret = pfm_get_impl_counters(&impl_cnt)) != PFMLIB_SUCCESS) { PAPIERROR("pfm_get_impl_counters(%p): %s", &impl_cnt, pfm_strerror(ret)); return(PAPI_EBUG); } /* Make sure this event lives on some counter, if so, put in the description. If not, BUG */ if ((ret = pfm_get_num_counters(&n)) != PFMLIB_SUCCESS) { PAPIERROR("pfm_get_num_counters(%d): %s", n, pfm_strerror(ret)); return(PAPI_EBUG); } for (j=0;n;j++) { if (pfm_regmask_isset(&impl_cnt, j)) { n--; if (pfm_regmask_isset(&evnt_cnt,j)) { *native = encode_native_event(event->event,event->num_masks,event->unit_masks); return(PAPI_OK); } } } PAPIERROR("PAPI preset 0x%08x PFM event %d did not have any available counters", event->event, j); return(PAPI_ENOEVNT); }