*/
 static int read_counter(struct perf_evsel *counter)
 {
-       int cpu;
+       int nthreads = thread_map__nr(evsel_list->threads);
+       int ncpus = perf_evsel__nr_cpus(counter);
+       int cpu, thread;
 
-       for (cpu = 0; cpu < perf_evsel__nr_cpus(counter); cpu++) {
-               if (perf_evsel__read_cb(counter, cpu, 0, read_cb))
-                       return -1;
+       if (counter->system_wide)
+               nthreads = 1;
+
+       for (thread = 0; thread < nthreads; thread++) {
+               for (cpu = 0; cpu < ncpus; cpu++) {
+                       if (perf_evsel__read_cb(counter, cpu, thread, read_cb))
+                               return -1;
+               }
        }
 
        return 0;