On Wed, Sep 03, 2025 at 01:59:13PM +0200, Oleg Nesterov wrote:
> Slightly off-topic, but
> 
> On 09/02, Jiri Olsa wrote:
> >
> > @@ -11144,7 +11147,7 @@ static int perf_uprobe_event_init(struct perf_event 
> > *event)
> >  {
> >     int err;
> >     unsigned long ref_ctr_offset;
> > -   bool is_retprobe;
> > +   bool is_retprobe, is_unique;
> >  
> >     if (event->attr.type != perf_uprobe.type)
> >             return -ENOENT;
> > @@ -11159,8 +11162,9 @@ static int perf_uprobe_event_init(struct perf_event 
> > *event)
> >             return -EOPNOTSUPP;
> >  
> >     is_retprobe = event->attr.config & PERF_PROBE_CONFIG_IS_RETPROBE;
> > +   is_unique = event->attr.config & PERF_PROBE_CONFIG_IS_UNIQUE;
> >     ref_ctr_offset = event->attr.config >> PERF_UPROBE_REF_CTR_OFFSET_SHIFT;
> > -   err = perf_uprobe_init(event, ref_ctr_offset, is_retprobe);
> > +   err = perf_uprobe_init(event, ref_ctr_offset, is_retprobe, is_unique);
> 
> I am wondering why (with or without this change) perf_uprobe_init() needs
> the additional arguments besides "event". It can look at event->attr.config
> itself?
> 
> Same for perf_kprobe_init()...

I think that's because we define enum perf_probe_config together
with PMU_FORMAT_ATTRs and code for attr->config parsing, which
makes sense to me

otherwise I think we could pass perf_event_attr all the way to
create_local_trace_[ku]probe 

jirka

Reply via email to