|
@@ -199,19 +199,18 @@ int perf_mmap__mmap(struct perf_mmap *map, struct mmap_params *mp, int fd)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int overwrite_rb_find_range(void *buf, int mask, u64 head, u64 *start, u64 *end)
|
|
|
+static int overwrite_rb_find_range(void *buf, int mask, u64 *start, u64 *end)
|
|
|
{
|
|
|
struct perf_event_header *pheader;
|
|
|
- u64 evt_head = head;
|
|
|
+ u64 evt_head = *start;
|
|
|
int size = mask + 1;
|
|
|
|
|
|
- pr_debug2("overwrite_rb_find_range: buf=%p, head=%"PRIx64"\n", buf, head);
|
|
|
- pheader = (struct perf_event_header *)(buf + (head & mask));
|
|
|
- *start = head;
|
|
|
+ pr_debug2("%s: buf=%p, start=%"PRIx64"\n", __func__, buf, *start);
|
|
|
+ pheader = (struct perf_event_header *)(buf + (*start & mask));
|
|
|
while (true) {
|
|
|
- if (evt_head - head >= (unsigned int)size) {
|
|
|
+ if (evt_head - *start >= (unsigned int)size) {
|
|
|
pr_debug("Finished reading overwrite ring buffer: rewind\n");
|
|
|
- if (evt_head - head > (unsigned int)size)
|
|
|
+ if (evt_head - *start > (unsigned int)size)
|
|
|
evt_head -= pheader->size;
|
|
|
*end = evt_head;
|
|
|
return 0;
|
|
@@ -262,7 +261,7 @@ int perf_mmap__read_init(struct perf_mmap *md)
|
|
|
* Backward ring buffer is full. We still have a chance to read
|
|
|
* most of data from it.
|
|
|
*/
|
|
|
- if (overwrite_rb_find_range(data, md->mask, head, &md->start, &md->end))
|
|
|
+ if (overwrite_rb_find_range(data, md->mask, &md->start, &md->end))
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|