On Thu, Apr 15, 2021 at 10:53:33PM +0800, Jin, Yao wrote: SNIP
> > With my current code, > > static int parse_events__with_hybrid_pmu(struct parse_events_state > *parse_state, > const char *str, char *pmu_name, > struct list_head *list) > { > struct parse_events_state ps = { > .list = LIST_HEAD_INIT(ps.list), > .stoken = PE_START_EVENTS, > .pmu_name = pmu_name, > .idx = parse_state->idx, > }; > int ret; > > ret = parse_events__scanner(str, &ps); > perf_pmu__parse_cleanup(); > > if (!ret) { > if (!list_empty(&ps.list)) { > list_splice(&ps.list, list); > parse_state->idx = ps.idx; > } > } > > return ret; > } > > The new created evsels are added to the tail of list (ps.list) and ps.list > is joined to the list (the parameter 'list'). > > If we want to reuse the __parse_events(), we may need to: > > struct evlist *evlist = evlist__new(); there's the original evlist pointer passed to the initial parser that we should use no? > > __parse_events(evlist, str, NULL, NULL); > Add the evsels in evlist to the tail of list (the parameter 'list') > evlist__delete(evlist); > > Is my understanding correct? > > Yes, we have to change the interface of __parse_events() by adding a new > parameter 'pmu_name', which will bring much more changes. I agree to make > this change in follow-up patches. let's check on this over the next version thanks, jirka