return -1;
 }
 
-int isa207_get_alternatives(u64 event, u64 alt[],
-                               const unsigned int ev_alt[][MAX_ALT], int size)
+int isa207_get_alternatives(u64 event, u64 alt[], int size, unsigned int flags,
+                                       const unsigned int ev_alt[][MAX_ALT])
 {
        int i, j, num_alt = 0;
        u64 alt_event;
                }
        }
 
+       if (flags & PPMU_ONLY_COUNT_RUN) {
+               /*
+                * We're only counting in RUN state, so PM_CYC is equivalent to
+                * PM_RUN_CYC and PM_INST_CMPL === PM_RUN_INST_CMPL.
+                */
+               j = num_alt;
+               for (i = 0; i < num_alt; ++i) {
+                       switch (alt[i]) {
+                       case 0x1e:                      /* PMC_CYC */
+                               alt[j++] = 0x600f4;     /* PM_RUN_CYC */
+                               break;
+                       case 0x600f4:
+                               alt[j++] = 0x1e;
+                               break;
+                       case 0x2:                       /* PM_INST_CMPL */
+                               alt[j++] = 0x500fa;     /* PM_RUN_INST_CMPL */
+                               break;
+                       case 0x500fa:
+                               alt[j++] = 0x2;
+                               break;
+                       }
+               }
+               num_alt = j;
+       }
+
        return num_alt;
 }
 
                                unsigned int hwc[], unsigned long mmcr[],
                                struct perf_event *pevents[]);
 void isa207_disable_pmc(unsigned int pmc, unsigned long mmcr[]);
-int isa207_get_alternatives(u64 event, u64 alt[],
-                               const unsigned int ev_alt[][MAX_ALT], int size);
+int isa207_get_alternatives(u64 event, u64 alt[], int size, unsigned int flags,
+                                       const unsigned int ev_alt[][MAX_ALT]);
 void isa207_get_mem_data_src(union perf_mem_data_src *dsrc, u32 flags,
                                                        struct pt_regs *regs);
 void isa207_get_mem_weight(u64 *weight);
 
 
 static int power8_get_alternatives(u64 event, unsigned int flags, u64 alt[])
 {
-       int i, j, num_alt = 0;
-
-       num_alt = isa207_get_alternatives(event, alt, event_alternatives,
-                                       (int)ARRAY_SIZE(event_alternatives));
-       if (flags & PPMU_ONLY_COUNT_RUN) {
-               /*
-                * We're only counting in RUN state, so PM_CYC is equivalent to
-                * PM_RUN_CYC and PM_INST_CMPL === PM_RUN_INST_CMPL.
-                */
-               j = num_alt;
-               for (i = 0; i < num_alt; ++i) {
-                       switch (alt[i]) {
-                       case PM_CYC:
-                               alt[j++] = PM_RUN_CYC;
-                               break;
-                       case PM_RUN_CYC:
-                               alt[j++] = PM_CYC;
-                               break;
-                       case PM_INST_CMPL:
-                               alt[j++] = PM_RUN_INST_CMPL;
-                               break;
-                       case PM_RUN_INST_CMPL:
-                               alt[j++] = PM_INST_CMPL;
-                               break;
-                       }
-               }
-               num_alt = j;
-       }
+       int num_alt = 0;
+
+       num_alt = isa207_get_alternatives(event, alt,
+                                         ARRAY_SIZE(event_alternatives), flags,
+                                         event_alternatives);
 
        return num_alt;
 }
 
 {
        int num_alt = 0;
 
-       num_alt = isa207_get_alternatives(event, alt, power9_event_alternatives,
-                               (int)ARRAY_SIZE(power9_event_alternatives));
+       num_alt = isa207_get_alternatives(event, alt,
+                                         ARRAY_SIZE(power9_event_alternatives), flags,
+                                         power9_event_alternatives);
 
        return num_alt;
 }