On Fri, May 16, 2014 at 10:41 PM, Viresh Kumar <[email protected]> wrote: > On 16 May 2014 22:38, Inderpal Singh <[email protected]> wrote: >>>> + while (!list_empty(&dev_opp->opp_list)) { >>>> + opp = list_entry_rcu(dev_opp->opp_list.next, >>>> + struct dev_pm_opp, node); >>> >>> list_for_each_entry_rcu ? >>> >> >> list_for_each_entry_rcu can not be used as opp is being deleted in the loop. > > So what? The above code can be replaced easily I think. > This is how it is implemented: > > #define list_for_each_entry_rcu(pos, head, member) \ > for (pos = list_entry_rcu((head)->next, typeof(*pos), member); \ > &pos->member != (head); \ > pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
by the time "pos = list_entry_rcu(pos->member. next, typeof(*pos), member)" is executed, the pos would have been freed in the loop. > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to [email protected] > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

