void serial_test_perf_buffer(void)
 {
-       int err, on_len, nr_on_cpus = 0, nr_cpus, i;
+       int err, on_len, nr_on_cpus = 0, nr_cpus, i, j;
        struct perf_buffer_opts pb_opts = {};
        struct test_perf_buffer *skel;
        cpu_set_t cpu_seen;
                  "got %zu, expected %d\n", perf_buffer__buffer_cnt(pb), nr_on_cpus))
                goto out_close;
 
-       for (i = 0; i < nr_cpus; i++) {
+       for (i = 0, j = 0; i < nr_cpus; i++) {
                if (i >= on_len || !online[i])
                        continue;
 
-               fd = perf_buffer__buffer_fd(pb, i);
+               fd = perf_buffer__buffer_fd(pb, j);
                CHECK(fd < 0 || last_fd == fd, "fd_check", "last fd %d == fd %d\n", last_fd, fd);
                last_fd = fd;
 
-               err = perf_buffer__consume_buffer(pb, i);
+               err = perf_buffer__consume_buffer(pb, j);
                if (CHECK(err, "drain_buf", "cpu %d, err %d\n", i, err))
                        goto out_close;
 
                if (trigger_on_cpu(i))
                        goto out_close;
 
-               err = perf_buffer__consume_buffer(pb, i);
-               if (CHECK(err, "consume_buf", "cpu %d, err %d\n", i, err))
+               err = perf_buffer__consume_buffer(pb, j);
+               if (CHECK(err, "consume_buf", "cpu %d, err %d\n", j, err))
                        goto out_close;
 
                if (CHECK(!CPU_ISSET(i, &cpu_seen), "cpu_seen", "cpu %d not seen\n", i))
                        goto out_close;
+               j++;
        }
 
 out_free_pb: