On 12/06/2011 07:19 AM, Arnaldo Carvalho de Melo wrote:
> Em Mon, Nov 28, 2011 at 12:03:31PM +0300, Andrew Vagin escreveu:
>> It's opposition of perf_session__parse_sample.
>>
>> v2: fixed mistakes which David Arhen found
> 
> Ok, I'm taking this one, David, can I added an 'Acked-by: you"? Or even
> "reviewed-by:" ?
> 
> I'm just changing 'data' to 'sample', data is way to vague, I kept it
> for a while in the past just to reduce patch size, but this is something
> completely new, so better use 'sample'.
> 
> - Arnaldo
>  
>> Signed-off-by: Andrew Vagin <ava...@openvz.org>
>> ---
>>  tools/perf/util/event.h   |    2 +
>>  tools/perf/util/evsel.c   |   74 
>> +++++++++++++++++++++++++++++++++++++++++++++
>>  tools/perf/util/session.h |    9 +++++
>>  3 files changed, 85 insertions(+), 0 deletions(-)
>>
>> diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
>> index 357a85b..0493101 100644
>> --- a/tools/perf/util/event.h
>> +++ b/tools/perf/util/event.h
>> @@ -187,5 +187,7 @@ const char *perf_event__name(unsigned int id);
>>  int perf_event__parse_sample(const union perf_event *event, u64 type,
>>                           int sample_size, bool sample_id_all,
>>                           struct perf_sample *sample, bool swapped);
>> +int perf_event__change_sample(union perf_event *event, u64 type,
>> +                         const struct perf_sample *data, bool swapped);
>>  
>>  #endif /* __PERF_RECORD_H */
>> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
>> index e426264..d697568 100644
>> --- a/tools/perf/util/evsel.c
>> +++ b/tools/perf/util/evsel.c
>> @@ -494,3 +494,77 @@ int perf_event__parse_sample(const union perf_event 
>> *event, u64 type,
>>  
>>      return 0;
>>  }
>> +
>> +int perf_event__change_sample(union perf_event *event, u64 type,
>> +                         const struct perf_sample *data, bool swapped)
>> +{
>> +    u64 *array;
>> +
>> +    /*
>> +     * used for cross-endian analysis. See git commit 65014ab3
>> +     * for why this goofiness is needed.
>> +     */
>> +    union {
>> +            u64 val64;
>> +            u32 val32[2];
>> +    } u;
>> +
>> +    array = event->sample.array;
>> +
>> +    if (type & PERF_SAMPLE_IP) {
>> +            event->ip.ip = data->ip;
>> +            array++;
>> +    }
>> +
>> +    if (type & PERF_SAMPLE_TID) {
>> +            u.val32[0] = data->pid;
>> +            u.val32[1] = data->tid;
>> +            if (swapped) {
>> +                    /* undo swap of u64, then swap on individual u32s */

Comment is from the parse sample code; this is the inverse of that code
so the comment needs to be updated here.

>> +                    u.val32[0] = bswap_32(u.val32[0]);
>> +                    u.val32[1] = bswap_32(u.val32[1]);
>> +                    u.val64 = bswap_64(u.val64);
>> +            }
>> +
>> +            *array = u.val64;
>> +            array++;
>> +    }
>> +
>> +    if (type & PERF_SAMPLE_TIME) {
>> +            *array = data->time;
>> +            array++;
>> +    }
>> +
>> +    if (type & PERF_SAMPLE_ADDR) {
>> +            *array = data->addr;
>> +            array++;
>> +    }
>> +
>> +    if (type & PERF_SAMPLE_ID) {
>> +            *array = data->id;
>> +            array++;
>> +    }
>> +
>> +    if (type & PERF_SAMPLE_STREAM_ID) {
>> +            *array = data->stream_id;
>> +            array++;
>> +    }
>> +
>> +    if (type & PERF_SAMPLE_CPU) {
>> +            u.val32[0] = data->cpu;
>> +            if (swapped) {
>> +                    /* undo swap of u64, then swap on individual u32s */

Ditto on that comment.

I did not test it, but the logic is in the inverse of parse_sample so it
should be correct.

Arnaldo: you could use remove the 2 comment lines on the commit since
there are no logic impacts.

Reviewed-by: David Ahern <dsah...@gmail.com>

David

_______________________________________________
Devel mailing list
Devel@openvz.org
https://openvz.org/mailman/listinfo/devel

Reply via email to