union perf_event *event;
        int sample_id_all = 1, cpu;
        static char *kwlist[] = { "cpu", "sample_id_all", NULL };
+       struct perf_mmap *md;
+       u64 end, start;
        int err;
 
        if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist,
                                         &cpu, &sample_id_all))
                return NULL;
 
-       event = perf_evlist__mmap_read(evlist, cpu);
+       md = &evlist->mmap[cpu];
+       if (perf_mmap__read_init(md, false, &start, &end) < 0)
+               goto end;
+
+       event = perf_mmap__read_event(md, false, &start, end);
        if (event != NULL) {
                PyObject *pyevent = pyrf_event__new(event);
                struct pyrf_event *pevent = (struct pyrf_event *)pyevent;
                err = perf_evsel__parse_sample(evsel, event, &pevent->sample);
 
                /* Consume the even only after we parsed it out. */
-               perf_evlist__mmap_consume(evlist, cpu);
+               perf_mmap__consume(md, false);
 
                if (err)
                        return PyErr_Format(PyExc_OSError,
                                            "perf: can't parse sample, err=%d", err);
                return pyevent;
        }
-
+end:
        Py_INCREF(Py_None);
        return Py_None;
 }