| Date | Tue, 21 Mar 2023 14:25:29 +0100 | From | Frederic Weisbecker <> | Subject | Re: [PATCH v5 16/18] timer: Implement the hierarchical pull model |
| |
On Wed, Mar 01, 2023 at 03:17:42PM +0100, Anna-Maria Behnsen wrote: > +static bool tmigr_inactive_up(struct tmigr_group *group, > + struct tmigr_group *child, > + void *ptr) > +{ > + union tmigr_state curstate, newstate; > + struct tmigr_walk *data = ptr; > + bool walk_done; > + u32 childmask; > + > + childmask = data->childmask; > + newstate = curstate = data->groupstate; > + > +retry: > + walk_done = true; > + > + /* Reset active bit when child is no longer active */ > + if (!data->childstate.active) > + newstate.active &= ~(u8)childmask; > + > + if (newstate.migrator == (u8)childmask) { > + /* > + * Find a new migrator for the group, because child group > + * is idle! > + */ > + if (!data->childstate.active) { > + unsigned long new_migr_bit, active = newstate.active; > + > + new_migr_bit = find_first_bit(&active, BIT_CNT); > + > + /* Changes need to be propagated */ > + walk_done = false;
Do you need to propagate the changes even if you found a new migrator for the group?
> + > + if (new_migr_bit != BIT_CNT) > + newstate.migrator = BIT(new_migr_bit); > + else > + newstate.migrator = TMIGR_NONE;
Thanks.
|