return ((event->attr.type == PERF_TYPE_HARDWARE) ||
                (event->attr.type == PERF_TYPE_HW_CACHE) ||
                (event->attr.type == PERF_TYPE_RAW)) &&
-               !!(event->hw.flags & PERF_EVENT_FLAG_USER_READ_CNT);
+               !!(event->hw.flags & PERF_EVENT_FLAG_USER_READ_CNT) &&
+               (event->hw.idx != -1);
 }
 
 void arch_perf_update_userpage(struct perf_event *event,
 
 {
        struct perf_event *event = (struct perf_event *)arg;
 
-       csr_write(CSR_SCOUNTEREN,
-                 csr_read(CSR_SCOUNTEREN) | (1 << pmu_sbi_csr_index(event)));
+       if (event->hw.idx != -1)
+               csr_write(CSR_SCOUNTEREN,
+                         csr_read(CSR_SCOUNTEREN) | (1 << pmu_sbi_csr_index(event)));
 }
 
 static void pmu_sbi_reset_scounteren(void *arg)
 {
        struct perf_event *event = (struct perf_event *)arg;
 
-       csr_write(CSR_SCOUNTEREN,
-                 csr_read(CSR_SCOUNTEREN) & ~(1 << pmu_sbi_csr_index(event)));
+       if (event->hw.idx != -1)
+               csr_write(CSR_SCOUNTEREN,
+                         csr_read(CSR_SCOUNTEREN) & ~(1 << pmu_sbi_csr_index(event)));
 }
 
 static void pmu_sbi_ctr_start(struct perf_event *event, u64 ival)
 
        if ((hwc->flags & PERF_EVENT_FLAG_USER_ACCESS) &&
            (hwc->flags & PERF_EVENT_FLAG_USER_READ_CNT))
-               pmu_sbi_set_scounteren((void *)event);
+               on_each_cpu_mask(mm_cpumask(event->owner->mm),
+                                pmu_sbi_set_scounteren, (void *)event, 1);
 }
 
 static void pmu_sbi_ctr_stop(struct perf_event *event, unsigned long flag)
 
        if ((hwc->flags & PERF_EVENT_FLAG_USER_ACCESS) &&
            (hwc->flags & PERF_EVENT_FLAG_USER_READ_CNT))
-               pmu_sbi_reset_scounteren((void *)event);
+               on_each_cpu_mask(mm_cpumask(event->owner->mm),
+                                pmu_sbi_reset_scounteren, (void *)event, 1);
 
        ret = sbi_ecall(SBI_EXT_PMU, SBI_EXT_PMU_COUNTER_STOP, hwc->idx, 1, flag, 0, 0, 0);
        if (ret.error && (ret.error != SBI_ERR_ALREADY_STOPPED) &&