On Mon 09-07-12 19:59:35, Gavin Shan wrote: [...] > Michal, How about the following changelog? > > --- > > sparse_index_init() is designed to be safe if two copies of it race. It > uses "index_init_lock" to ensure that, even in the case of a race, only > one CPU will manage to do: > > mem_section[root] = section; > > On the other hand, sparse_index_init() is possiblly called during system > boot stage and hotplug path as follows. We need't lock during system boot > stage to protect "mem_section[root]" and the function has been protected by > hotplug mutex "mem_hotplug_mutex" as well in hotplug case. So we needn't the > spinklock in the function. The changelog is still hard to read but it's getting there slowly ;) What about the following? --- sparse_index_init uses index_init_lock spinlock to protect root mem_section assignment. The lock is not necessary anymore because the function is called only during the boot (during paging init which is executed only from a single CPU) and from the hotplug code (by add_memory via arch_add_memory) which uses mem_hotplug_mutex. The lock has been introduced by 28ae55c9 (sparsemem extreme: hotplug preparation) and sparse_index_init was used only during boot at that time. Later when the hotplug code (and add_memory) was introduced there was no synchronization so it was possible to online more sections from the same root probably (though I am not 100% sure about that). The first synchronization has been added by 6ad696d2 (mm: allow memory hotplug and hibernation in the same kernel) which has been later replaced by the mem_hotplug_mutex - 20d6c96b (mem-hotplug: introduce {un}lock_memory_hotplug()). Let's remove the lock as it is not needed and it makes the code more confusing. --- -- Michal Hocko SUSE Labs SUSE LINUX s.r.o. Lihovarska 1060/12 190 00 Praha 9 Czech Republic -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>