There are events and masks in the AMD64 PMU that are supported only by
certain revisions. If some event or mask is unsupported,
pfm_get_event_name() or pfm_get_event_mask_name() return
PFMLIB_ERR_BADHOST. This patch changes pfmon in a way that those
events or masks are skipped if the functions above return an error.

Signed-off-by: Robert Richter <robert.rich...@amd.com>
---
 pfmon/pfmon.c |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/pfmon/pfmon.c b/pfmon/pfmon.c
index dde3d6e..8df02b7 100644
--- a/pfmon/pfmon.c
+++ b/pfmon/pfmon.c
@@ -611,13 +611,15 @@ show_event_name(unsigned int idx, const char *name, int 
mode)
        if (!mask_name)
                fatal_error("cannot allocate memory for mask name\n");
 
-       pfm_get_num_event_masks(idx, &n);
+       if (pfm_get_num_event_masks(idx, &n) != PFMLIB_SUCCESS)
+               return;
        if (n == 0 || mode == 0) {
                printf("%s\n", name);
                return;
        }
        for (i = 0; n; n--, i++) {
-               pfm_get_event_mask_name(idx, i, mask_name, l);
+               if (pfm_get_event_mask_name(idx, i, mask_name, l) != 
PFMLIB_SUCCESS)
+                       continue;
                printf("%s:%s\n", name, mask_name);
        }
        free(mask_name);
@@ -650,18 +652,19 @@ pfmon_list_all_events(char *pattern, int mode)
                        fatal_error("error in regular expression for event 
\"%s\"\n", pattern);
 
                for(i=0; i < count; i++) {
-                       pfm_get_event_name(i, name, len);
-
-                       if (regexec(&preg, name, 0, NULL, 0) == 0) {
-                               show_event_name(i, name, mode);
-                               done = 1;
-                       }
+                       if (pfm_get_event_name(i, name, len) != PFMLIB_SUCCESS)
+                               continue;
+                       if (regexec(&preg, name, 0, NULL, 0) != 0)
+                               continue;
+                       show_event_name(i, name, mode);
+                       done = 1;
                }
                if (done == 0)
                        fatal_error("event not found\n");
        } else {
                for(i=0; i < count; i++) {
-                       pfm_get_event_name(i, name, len);
+                       if (pfm_get_event_name(i, name, len) != PFMLIB_SUCCESS)
+                               continue;
                        show_event_name(i, name, mode);
                }
        }
@@ -1238,7 +1241,8 @@ __pfmon_show_event_info(unsigned int idx)
        free(desc);
        for (i = 0; n; n--, i++) {
                pfm_get_event_mask_description(idx, i, &desc);
-               pfm_get_event_mask_name(idx, i, name, PFMON_MAX_EVTNAME_LEN);
+               if (pfm_get_event_mask_name(idx, i, name, 
PFMON_MAX_EVTNAME_LEN) != PFMLIB_SUCCESS)
+                       continue;
                pfm_get_event_mask_code(idx, i, &c);
                printf("Umask-%02u : 0x%02x : [%s] : %s\n", i, c, name, desc);
                free(desc);
@@ -1283,11 +1287,12 @@ pfmon_show_event_info(char *event)
 
        pfm_get_num_events(&c);
        for(i=0; i < c; i++) {
-               pfm_get_event_name(i, name, PFMON_MAX_EVTNAME_LEN);
-               if (regexec(&preg, name, 0, NULL, 0) == 0) {
-                       __pfmon_show_event_info(i);
-                       found = 1;
-               }
+               if (pfm_get_event_name(i, name, PFMON_MAX_EVTNAME_LEN) != 
PFMLIB_SUCCESS)
+                       continue;
+               if (regexec(&preg, name, 0, NULL, 0) != 0)
+                       continue;
+               __pfmon_show_event_info(i);
+               found = 1;
        }
        if (!found)
                fatal_error("event \"%s\" not found\n", event);
-- 
1.6.1.2



------------------------------------------------------------------------------
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to