On Tue, Jul 15, 2014 at 02:31:40AM +0200, Stephane Eranian wrote:
> @@ -618,6 +619,8 @@ static inline void perf_sample_data_init(struct 
> perf_sample_data *data,
>       data->weight = 0;
>       data->data_src.val = 0;
>       data->txn = 0;
> +     data->regs_intr.abi = PERF_SAMPLE_REGS_ABI_NONE;
> +     data->regs_intr.regs = NULL;
>  }

> +static void perf_sample_regs_intr(struct perf_regs *regs_intr,
> +                               struct pt_regs *regs)
> +{
> +     regs_intr->regs = regs;
> +     regs_intr->abi  = perf_reg_abi(current);
> +}

> @@ -4800,6 +4824,20 @@ void perf_prepare_sample(struct perf_event_header 
> *header,
>               data->stack_user_size = stack_size;
>               header->size += size;
>       }
> +
> +     if (sample_type & PERF_SAMPLE_REGS_INTR) {
> +             /* regs dump ABI info */
> +             int size = sizeof(u64);
> +
> +             perf_sample_regs_intr(&data->regs_intr, regs);
> +
> +             if (data->regs_intr.regs) {
> +                     u64 mask = event->attr.sample_regs_intr;
> +                     size += hweight64(mask) * sizeof(u64);
> +             }
> +
> +             header->size += size;
> +     }

Given that the prepare_sample hunk sets both regs_intr fields, the
addition to perf_sample_data_init() is entirely superfluous, no?

Attachment: pgp2ZGuXJiy1i.pgp
Description: PGP signature

Reply via email to