Alexey Budankov <alexey.budan...@linux.intel.com> writes:

> Now I figured that not all indexed events are always located under 
> the root with the same cpu, and it depends on the order of insertion
> e.g. with insertion order 01,02,03,14,15,16 we get this:
>
>      02
>     /  \
>    01  14
>       /  \
>      03  15
>            \
>            16
>
> and it is unclear how to iterate cpu==0 part of tree in this case.

Using this example, rb_next() should take you through the nodes in this
order (assuming you start with 01): 01, 02, 03, 14, etc. So you iterate
while event->cpu==cpu using rb_next() and you should be fine.

> Iterating cpu specific subtree like this:
>
> #define for_each_group_event(event, group, cpu, pmu, field)    \
>       for (event = rb_entry_safe(group_first(group, cpu, pmu), \
>                                  typeof(*event), field);       \
>            event && event->cpu == cpu && event->pmu == pmu;    \
>            event = rb_entry_safe(rb_next(&event->field),       \
>                                  typeof(*event), field))

Afaict, this assumes that you are also ordering on event->pmu, which
should be reflected in your _less function. And also assuming that
group_first() is doing the right thing. Can we see the code?

Regards,
--
Alex

Reply via email to