On Thu, Jul 16, 2015 at 8:51 PM, Mel Gorman wrote: > On Thu, Jul 16, 2015 at 08:13:38PM +0300, Konstantin Khlebnikov wrote: >> > @@ -1187,14 +1195,14 @@ void __init page_alloc_init_late(void) >> > {pgdat_init_rwsempgdat_init_rwsempgdat_init_rwsem >> > int nid; >> > >> > + /* There will be num_node_state(N_MEMORY) threads */ >> > + atomic_set(&pgdat_init_n_undone, num_node_state(N_MEMORY)); >> > for_each_node_state(nid, N_MEMORY) { >> > - down_read(&pgdat_init_rwsem); >> >> Rw-sem have special "non-owner" mode for keeping lockdep away. >> This should be enough: >> > > I think in this case that the completions look nicer though so I think > I'll keep them. Ok. Not a big deal, they are anyway in init sections. BTW there's another option: wait_on_atomic_t / wake_up_atomic_t like wait_on_bit but atomic_t > > -- > Mel Gorman > SUSE Labs