On Mon, Mar 04, 2019 at 07:36:14PM +0000, Song Liu wrote: > > > > On Mar 4, 2019, at 5:52 AM, Jiri Olsa <jo...@redhat.com> wrote: > > > > On Wed, Feb 27, 2019 at 09:06:35PM -0800, Song Liu wrote: > > > > SNIP > > > >> +static int process_bpf_prog_info(struct feat_fd *ff, > >> + void *data __maybe_unused) > >> +{ > >> + struct bpf_prog_info_linear *info_linear; > >> + struct bpf_prog_info_node *info_node; > >> + struct perf_env *env = &ff->ph->env; > >> + u32 count, i; > >> + int err = -1; > >> + > >> + if (do_read_u32(ff, &count)) > >> + return -1; > >> + > >> + down_write(&env->bpf_progs.lock); > >> + > >> + for (i = 0; i < count; ++i) { > >> + u32 info_len, data_len; > >> + > >> + info_linear = NULL; > >> + info_node = NULL; > >> + if (do_read_u32(ff, &info_len)) > >> + goto out; > >> + if (do_read_u32(ff, &data_len)) > >> + goto out; > >> + > >> + if (info_len > sizeof(struct bpf_prog_info)) { > >> + pr_warning("detected invalid bpf_prog_info\n"); > >> + goto out; > >> + } > >> + > >> + info_linear = malloc(sizeof(struct bpf_prog_info_linear) + > >> + data_len); > >> + if (!info_linear) > >> + goto out; > >> + info_linear->info_len = sizeof(struct bpf_prog_info); > >> + info_linear->data_len = data_len; > >> + if (do_read_u64(ff, (u64 *)(&info_linear->arrays))) > >> + goto out; > >> + if (__do_read(ff, &info_linear->info, info_len)) > >> + goto out; > >> + if (info_len < sizeof(struct bpf_prog_info)) > >> + memset(((void *)(&info_linear->info)) + info_len, 0, > >> + sizeof(struct bpf_prog_info) - info_len); > >> + > >> + if (__do_read(ff, info_linear->data, data_len)) > >> + goto out; > >> + > >> + /* endian mismatch, drop the info, continue */ > >> + if (ff->ph->needs_swap) { > >> + free(info_linear); > >> + continue; > >> + } > > > > so in this case we can check for needs_swap in the begining > > of the function and bail out without reading all the data > > If we bail out, perf-record will fail. If we read all the data > but ignore them, perf-record will continue without bpf annotation > support. I think the latter is a better experience with little > effort here.
i did not mean bail out with error, just return 0, warn and go on jirka > > > > > also please display soem error message saying we don't support > > ebpf progs data report over the different endianity > > I will add a warning in the next version. > > Thanks, > Song >