.. | .. |
---|
3987 | 3987 | union perf_event *event, |
---|
3988 | 3988 | struct evlist **pevlist) |
---|
3989 | 3989 | { |
---|
3990 | | - u32 i, ids, n_ids; |
---|
| 3990 | + u32 i, n_ids; |
---|
| 3991 | + u64 *ids; |
---|
3991 | 3992 | struct evsel *evsel; |
---|
3992 | 3993 | struct evlist *evlist = *pevlist; |
---|
3993 | 3994 | |
---|
.. | .. |
---|
4003 | 4004 | |
---|
4004 | 4005 | evlist__add(evlist, evsel); |
---|
4005 | 4006 | |
---|
4006 | | - ids = event->header.size; |
---|
4007 | | - ids -= (void *)&event->attr.id - (void *)event; |
---|
4008 | | - n_ids = ids / sizeof(u64); |
---|
| 4007 | + n_ids = event->header.size - sizeof(event->header) - event->attr.attr.size; |
---|
| 4008 | + n_ids = n_ids / sizeof(u64); |
---|
4009 | 4009 | /* |
---|
4010 | 4010 | * We don't have the cpu and thread maps on the header, so |
---|
4011 | 4011 | * for allocating the perf_sample_id table we fake 1 cpu and |
---|
.. | .. |
---|
4014 | 4014 | if (perf_evsel__alloc_id(&evsel->core, 1, n_ids)) |
---|
4015 | 4015 | return -ENOMEM; |
---|
4016 | 4016 | |
---|
| 4017 | + ids = (void *)&event->attr.attr + event->attr.attr.size; |
---|
4017 | 4018 | for (i = 0; i < n_ids; i++) { |
---|
4018 | | - perf_evlist__id_add(&evlist->core, &evsel->core, 0, i, event->attr.id[i]); |
---|
| 4019 | + perf_evlist__id_add(&evlist->core, &evsel->core, 0, i, ids[i]); |
---|
4019 | 4020 | } |
---|
4020 | 4021 | |
---|
4021 | 4022 | return 0; |
---|