813 SUBDBG(
"ENTER: PapiEventCode: %p, *PapiEventCode: %#x, modifier: %d, event_table: %p\n", PapiEventCode, *PapiEventCode, modifier, event_table);
817 char event_string[BUFSIZ];
818 pfm_pmu_info_t pinfo;
819 pfm_event_info_t einfo;
827 SUBDBG(
"EXIT: Invalid component first event code: %d\n", code);
832 memset( &einfo, 0,
sizeof( pfm_event_info_t ));
833 einfo.size =
sizeof(pfm_event_info_t);
834 if ((
ret = pfm_get_event_info(code, PFM_OS_PERF_EVENT_EXT, &einfo)) != PFM_SUCCESS) {
835 SUBDBG(
"EXIT: pfm_get_event_info returned: %d\n",
ret);
840 memset( &pinfo, 0,
sizeof(pfm_pmu_info_t) );
841 pinfo.size =
sizeof(pfm_pmu_info_t);
842 ret=pfm_get_pmu_info(einfo.pmu, &pinfo);
843 if (
ret!=PFM_SUCCESS) {
844 SUBDBG(
"EXIT: pfm_get_pmu_info returned: %d\n",
ret);
849 sprintf (event_string,
"%s::%s", pinfo.name, einfo.name);
850 SUBDBG(
"code: %#x, pmu: %s, event: %s, event_string: %s\n", code, pinfo.name, einfo.name, event_string);
859 SUBDBG(
"EXIT: Allocating event: '%s' failed\n", event_string);
865 SUBDBG(
"EXIT: event code: %#x\n", *PapiEventCode);
871 SUBDBG(
"EXIT: *PapiEventCode: %#x\n", *PapiEventCode);
880 if ((code = pfm_get_event_next(*PapiEventCode)) < 0) {
883 memset( &einfo, 0,
sizeof( pfm_event_info_t ));
884 einfo.size =
sizeof(pfm_event_info_t);
885 if ((
ret = pfm_get_event_info(*PapiEventCode, PFM_OS_PERF_EVENT_EXT, &einfo)) != PFM_SUCCESS) {
886 SUBDBG(
"EXIT: pfm_get_event_info returned: %d\n",
ret);
889 SUBDBG(
"*PapiEventCode: %#x, event: %s\n", *PapiEventCode, einfo.name);
894 SUBDBG(
"pnum: %d\n", pnum);
897 SUBDBG(
"EXIT: No more PMUs to list, returning: %d\n", code);
904 memset( &einfo, 0,
sizeof( pfm_event_info_t ));
905 einfo.size =
sizeof(pfm_event_info_t);
906 if ((
ret = pfm_get_event_info(code, PFM_OS_PERF_EVENT_EXT, &einfo)) != PFM_SUCCESS) {
907 SUBDBG(
"EXIT: pfm_get_event_info returned: %d\n",
ret);
912 memset( &pinfo, 0,
sizeof(pfm_pmu_info_t) );
913 pinfo.size =
sizeof(pfm_pmu_info_t);
914 ret=pfm_get_pmu_info(einfo.pmu, &pinfo);
915 if (
ret!=PFM_SUCCESS) {
916 SUBDBG(
"EXIT: pfm_get_pmu_info returned: %d\n",
ret);
921 sprintf (event_string,
"%s::%s", pinfo.name, einfo.name);
922 SUBDBG(
"code: %#x, pmu: %s, event: %s, event_string: %s\n", code, pinfo.name, einfo.name, event_string);
931 SUBDBG(
"EXIT: Allocating event: '%s' failed\n", event_string);
937 SUBDBG(
"EXIT: event code: %#x\n", *PapiEventCode);
944 SUBDBG(
"EXIT: *PapiEventCode: %#x\n", *PapiEventCode);
950 SUBDBG(
"EXIT: do not support umask combos yet\n");
957 memset( &einfo, 0,
sizeof( pfm_event_info_t ));
958 einfo.size =
sizeof(pfm_event_info_t);
959 if ((
ret = pfm_get_event_info(*PapiEventCode, PFM_OS_PERF_EVENT_EXT, &einfo)) != PFM_SUCCESS) {
960 SUBDBG(
"EXIT: pfm_get_event_info returned: %d\n",
ret);
966 max_umasks = einfo.nattrs;
970 SUBDBG(
"EXIT: already processed all umasks: attr_idx: %d\n",
attr_idx);
977 SUBDBG(
"EXIT: _papi_hwi_get_ntv_idx returned: %d\n", ntv_idx);
981 if ((ename == NULL) || (strlen(ename) >=
sizeof(event_string))) {
982 SUBDBG(
"EXIT: Event name will not fit into buffer\n");
985 strcpy (event_string, ename);
986 SUBDBG(
"event_string: %s\n", event_string);
990 pfm_event_attr_info_t ainfo;
991 memset (&ainfo, 0,
sizeof(pfm_event_attr_info_t));
992 ainfo.size =
sizeof(pfm_event_attr_info_t);
993 ret = pfm_get_event_attr_info(*PapiEventCode,
attr_idx, PFM_OS_PERF_EVENT_EXT, &ainfo);
994 if (
ret != PFM_SUCCESS) {
998 SUBDBG(
"*PapiEventCode: %#x, attr_idx: %d, type: %d, name: %s, description: %s\n", *PapiEventCode,
attr_idx, ainfo.type, ainfo.name, ainfo.desc);
1000 if (strlen(event_string) + strlen(ainfo.name) + 35 >
sizeof(event_string)) {
1001 SUBDBG(
"EXIT: Event name and mask will not fit into buffer\n");
1005 strcat (event_string,
":");
1006 strcat (event_string, ainfo.name);
1007 switch (ainfo.type) {
1008 case PFM_ATTR_UMASK:
1010 case PFM_ATTR_MOD_BOOL:
1011 case PFM_ATTR_MOD_INTEGER:
1013 strcat(event_string,
"=0");
1016 SUBDBG(
"EXIT: Unsupported attribute type: %d", ainfo.type);
1027 SUBDBG(
"EXIT: Allocating event: '%s' failed\n", event_string);
1034 SUBDBG(
"EXIT: event code: %#x\n", *PapiEventCode);
1044 SUBDBG(
"EXIT: event code: %#x\n", *PapiEventCode);
1050 SUBDBG(
"EXIT: do not support enumerating groups in this component\n");
1056 SUBDBG(
"EXIT: Invalid modifier argument provided\n");
static int get_first_event_next_pmu(int pmu_idx, int pmu_type)
int _papi_hwi_get_ntv_idx(unsigned int papi_evt_code)
unsigned int _papi_hwi_get_papi_event_code()
struct native_event_t * native_events
static int find_existing_event(const char *name, struct native_event_table_t *event_table)
int _papi_libpfm4_error(int pfm_error)
#define SUBDBG(format, args...)
static struct native_event_t * allocate_native_event(const char *name, int libpfm4_index, int cidx, struct native_event_table_t *event_table)