Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Yisheng Xie
Hi Arnaldo,

On 2018/3/7 21:58, Arnaldo Carvalho de Melo wrote:
> Em Wed, Mar 07, 2018 at 11:21:57AM +0100, Jiri Olsa escreveu:
>> On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
>>> In overwrite mode, start will be set to head in perf_mmap__read_init.
>>> Therefore, it is no need to set the start one more in
>>> overwrite_rb_find_range and *start can be used as head instead of
>>> passing head to overwrite_rb_find_range.
>>
>> it conflicts a little with recent cleanup from Kan Liang,,
>>   https://marc.info/?t=15203508281=1=2
>>
>> otherwise it looks ok to me
> 
> yeah, wait a while till I push Kan's simplifications and then resubmit,
> ok?
> 
Sure, I will wait and resubmit.

Thanks
Yisheng

> - Arnaldo
>  
>> jirka
>>
>>>
>>> Signed-off-by: Yisheng Xie 
>>> ---
>>>  tools/perf/util/mmap.c | 15 +++
>>>  1 file changed, 7 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
>>> index 91531a7..6751ac9 100644
>>> --- a/tools/perf/util/mmap.c
>>> +++ b/tools/perf/util/mmap.c
>>> @@ -223,19 +223,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;
>>> @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
>>> overwrite,
>>>  * 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, startp, endp))
>>> +   if (overwrite_rb_find_range(data, md->mask, startp, endp))
>>> return -EINVAL;
>>> }
>>>  
>>> -- 
>>> 1.7.12.4
>>>
> 
> .
> 



Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Yisheng Xie
Hi Arnaldo,

On 2018/3/7 21:58, Arnaldo Carvalho de Melo wrote:
> Em Wed, Mar 07, 2018 at 11:21:57AM +0100, Jiri Olsa escreveu:
>> On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
>>> In overwrite mode, start will be set to head in perf_mmap__read_init.
>>> Therefore, it is no need to set the start one more in
>>> overwrite_rb_find_range and *start can be used as head instead of
>>> passing head to overwrite_rb_find_range.
>>
>> it conflicts a little with recent cleanup from Kan Liang,,
>>   https://marc.info/?t=15203508281=1=2
>>
>> otherwise it looks ok to me
> 
> yeah, wait a while till I push Kan's simplifications and then resubmit,
> ok?
> 
Sure, I will wait and resubmit.

Thanks
Yisheng

> - Arnaldo
>  
>> jirka
>>
>>>
>>> Signed-off-by: Yisheng Xie 
>>> ---
>>>  tools/perf/util/mmap.c | 15 +++
>>>  1 file changed, 7 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
>>> index 91531a7..6751ac9 100644
>>> --- a/tools/perf/util/mmap.c
>>> +++ b/tools/perf/util/mmap.c
>>> @@ -223,19 +223,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;
>>> @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
>>> overwrite,
>>>  * 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, startp, endp))
>>> +   if (overwrite_rb_find_range(data, md->mask, startp, endp))
>>> return -EINVAL;
>>> }
>>>  
>>> -- 
>>> 1.7.12.4
>>>
> 
> .
> 



Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Arnaldo Carvalho de Melo
Em Wed, Mar 07, 2018 at 11:21:57AM +0100, Jiri Olsa escreveu:
> On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
> > In overwrite mode, start will be set to head in perf_mmap__read_init.
> > Therefore, it is no need to set the start one more in
> > overwrite_rb_find_range and *start can be used as head instead of
> > passing head to overwrite_rb_find_range.
> 
> it conflicts a little with recent cleanup from Kan Liang,,
>   https://marc.info/?t=15203508281=1=2
> 
> otherwise it looks ok to me

yeah, wait a while till I push Kan's simplifications and then resubmit,
ok?

- Arnaldo
 
> jirka
> 
> > 
> > Signed-off-by: Yisheng Xie 
> > ---
> >  tools/perf/util/mmap.c | 15 +++
> >  1 file changed, 7 insertions(+), 8 deletions(-)
> > 
> > diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> > index 91531a7..6751ac9 100644
> > --- a/tools/perf/util/mmap.c
> > +++ b/tools/perf/util/mmap.c
> > @@ -223,19 +223,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;
> > @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
> > overwrite,
> >  * 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, startp, endp))
> > +   if (overwrite_rb_find_range(data, md->mask, startp, endp))
> > return -EINVAL;
> > }
> >  
> > -- 
> > 1.7.12.4
> > 


Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Arnaldo Carvalho de Melo
Em Wed, Mar 07, 2018 at 11:21:57AM +0100, Jiri Olsa escreveu:
> On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
> > In overwrite mode, start will be set to head in perf_mmap__read_init.
> > Therefore, it is no need to set the start one more in
> > overwrite_rb_find_range and *start can be used as head instead of
> > passing head to overwrite_rb_find_range.
> 
> it conflicts a little with recent cleanup from Kan Liang,,
>   https://marc.info/?t=15203508281=1=2
> 
> otherwise it looks ok to me

yeah, wait a while till I push Kan's simplifications and then resubmit,
ok?

- Arnaldo
 
> jirka
> 
> > 
> > Signed-off-by: Yisheng Xie 
> > ---
> >  tools/perf/util/mmap.c | 15 +++
> >  1 file changed, 7 insertions(+), 8 deletions(-)
> > 
> > diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> > index 91531a7..6751ac9 100644
> > --- a/tools/perf/util/mmap.c
> > +++ b/tools/perf/util/mmap.c
> > @@ -223,19 +223,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;
> > @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
> > overwrite,
> >  * 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, startp, endp))
> > +   if (overwrite_rb_find_range(data, md->mask, startp, endp))
> > return -EINVAL;
> > }
> >  
> > -- 
> > 1.7.12.4
> > 


Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Yisheng Xie
Hi jirka,

On 2018/3/7 18:21, Jiri Olsa wrote:
> On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
>> In overwrite mode, start will be set to head in perf_mmap__read_init.
>> Therefore, it is no need to set the start one more in
>> overwrite_rb_find_range and *start can be used as head instead of
>> passing head to overwrite_rb_find_range.
> 
> it conflicts a little with recent cleanup from Kan Liang,,
>   https://marc.info/?t=15203508281=1=2
> 
> otherwise it looks ok to me
> 

I can send the next version based on Kan's patch after his patches are in the 
tree.

Thanks
Yisheng

> jirka
> 
>>
>> Signed-off-by: Yisheng Xie 
>> ---
>>  tools/perf/util/mmap.c | 15 +++
>>  1 file changed, 7 insertions(+), 8 deletions(-)
>>
>> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
>> index 91531a7..6751ac9 100644
>> --- a/tools/perf/util/mmap.c
>> +++ b/tools/perf/util/mmap.c
>> @@ -223,19 +223,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;
>> @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
>> overwrite,
>>   * 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, startp, endp))
>> +if (overwrite_rb_find_range(data, md->mask, startp, endp))
>>  return -EINVAL;
>>  }
>>  
>> -- 
>> 1.7.12.4
>>
> 
> .
> 



Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Yisheng Xie
Hi jirka,

On 2018/3/7 18:21, Jiri Olsa wrote:
> On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
>> In overwrite mode, start will be set to head in perf_mmap__read_init.
>> Therefore, it is no need to set the start one more in
>> overwrite_rb_find_range and *start can be used as head instead of
>> passing head to overwrite_rb_find_range.
> 
> it conflicts a little with recent cleanup from Kan Liang,,
>   https://marc.info/?t=15203508281=1=2
> 
> otherwise it looks ok to me
> 

I can send the next version based on Kan's patch after his patches are in the 
tree.

Thanks
Yisheng

> jirka
> 
>>
>> Signed-off-by: Yisheng Xie 
>> ---
>>  tools/perf/util/mmap.c | 15 +++
>>  1 file changed, 7 insertions(+), 8 deletions(-)
>>
>> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
>> index 91531a7..6751ac9 100644
>> --- a/tools/perf/util/mmap.c
>> +++ b/tools/perf/util/mmap.c
>> @@ -223,19 +223,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;
>> @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
>> overwrite,
>>   * 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, startp, endp))
>> +if (overwrite_rb_find_range(data, md->mask, startp, endp))
>>  return -EINVAL;
>>  }
>>  
>> -- 
>> 1.7.12.4
>>
> 
> .
> 



Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Jiri Olsa
On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
> In overwrite mode, start will be set to head in perf_mmap__read_init.
> Therefore, it is no need to set the start one more in
> overwrite_rb_find_range and *start can be used as head instead of
> passing head to overwrite_rb_find_range.

it conflicts a little with recent cleanup from Kan Liang,,
  https://marc.info/?t=15203508281=1=2

otherwise it looks ok to me

jirka

> 
> Signed-off-by: Yisheng Xie 
> ---
>  tools/perf/util/mmap.c | 15 +++
>  1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> index 91531a7..6751ac9 100644
> --- a/tools/perf/util/mmap.c
> +++ b/tools/perf/util/mmap.c
> @@ -223,19 +223,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;
> @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
> overwrite,
>* 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, startp, endp))
> + if (overwrite_rb_find_range(data, md->mask, startp, endp))
>   return -EINVAL;
>   }
>  
> -- 
> 1.7.12.4
> 


Re: [PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-07 Thread Jiri Olsa
On Tue, Mar 06, 2018 at 07:44:23PM +0800, Yisheng Xie wrote:
> In overwrite mode, start will be set to head in perf_mmap__read_init.
> Therefore, it is no need to set the start one more in
> overwrite_rb_find_range and *start can be used as head instead of
> passing head to overwrite_rb_find_range.

it conflicts a little with recent cleanup from Kan Liang,,
  https://marc.info/?t=15203508281=1=2

otherwise it looks ok to me

jirka

> 
> Signed-off-by: Yisheng Xie 
> ---
>  tools/perf/util/mmap.c | 15 +++
>  1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
> index 91531a7..6751ac9 100644
> --- a/tools/perf/util/mmap.c
> +++ b/tools/perf/util/mmap.c
> @@ -223,19 +223,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;
> @@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
> overwrite,
>* 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, startp, endp))
> + if (overwrite_rb_find_range(data, md->mask, startp, endp))
>   return -EINVAL;
>   }
>  
> -- 
> 1.7.12.4
> 


[PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-06 Thread Yisheng Xie
In overwrite mode, start will be set to head in perf_mmap__read_init.
Therefore, it is no need to set the start one more in
overwrite_rb_find_range and *start can be used as head instead of
passing head to overwrite_rb_find_range.

Signed-off-by: Yisheng Xie 
---
 tools/perf/util/mmap.c | 15 +++
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
index 91531a7..6751ac9 100644
--- a/tools/perf/util/mmap.c
+++ b/tools/perf/util/mmap.c
@@ -223,19 +223,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;
@@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
overwrite,
 * 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, startp, endp))
+   if (overwrite_rb_find_range(data, md->mask, startp, endp))
return -EINVAL;
}
 
-- 
1.7.12.4



[PATCH] perf mmap: Discard head in overwrite_rb_find_range

2018-03-06 Thread Yisheng Xie
In overwrite mode, start will be set to head in perf_mmap__read_init.
Therefore, it is no need to set the start one more in
overwrite_rb_find_range and *start can be used as head instead of
passing head to overwrite_rb_find_range.

Signed-off-by: Yisheng Xie 
---
 tools/perf/util/mmap.c | 15 +++
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
index 91531a7..6751ac9 100644
--- a/tools/perf/util/mmap.c
+++ b/tools/perf/util/mmap.c
@@ -223,19 +223,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;
@@ -287,7 +286,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool 
overwrite,
 * 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, startp, endp))
+   if (overwrite_rb_find_range(data, md->mask, startp, endp))
return -EINVAL;
}
 
-- 
1.7.12.4