Messages in this thread | | | Date | Sat, 02 Aug 2008 09:16:28 +0900 | From | Yasunori Goto <> | Subject | Re: [RFC:Patch: 000/008](memory hotplug) rough idea of pgdat removing |
| |
> Yasunori Goto wrote: > > > I thought it at first, but are there the following worst case? > > > > > > CPU 0 CPU 1 > > ------------------------------------------------------- > > __alloc_pages() > > > > parsing_zonelist() > > : > > enter page_reclarim() > > sleep (and remember zone) : > > : > > update zonelist and node_online_map > > with stop_machine_run() > > free pgdat(). > > remove the Node electrically. > > > > wake up and touch remembered > > zone, but it is removed > > (Oops!!!) > > > > > > > > Anyway, I'm happy if there is better way than my poor idea. :-) > > > > Thanks for your comment. > > Duh. Then the use of RCU would also mean that all of reclaim must > be in a rcu period. So reclaim cannot sleep anymore.
I use srcu_read_lock() (sleepable rcu lock) if kernel must be sleep for page reclaim. So, my patch basic idea is followings.
CPU 0 CPU 1 ------------------------------------------------------- __alloc_pages() rcu_read_lock() and check online bitmap parsing_zonelist() rcu_read_unlock() : enter page_reclarim() srcu_read_lock() parse zone/zonelist. sleep (and remember zone) : : update zonelist and node_online_map with stop_machine_run()
wake up and touch remembered zone, srcu_read_unlock() syncronized_sched(). free_pgdat()
Thanks.
-- Yasunori Goto
| |