• Gautham R Shenoy's avatar
    Extend notifier_call_chain to count nr_calls made · 6f7cc11a
    Gautham R Shenoy authored
    Since 2.6.18-something, the community has been bugged by the problem to
    provide a clean and a stable mechanism to postpone a cpu-hotplug event as
    lock_cpu_hotplug was badly broken.
    
    This is another proposal towards solving that problem.  This one is along the
    lines of the solution provided in kernel/workqueue.c
    
    Instead of having a global mechanism like lock_cpu_hotplug, we allow the
    subsytems to define their own per-subsystem hot cpu mutexes.  These would be
    taken(released) where ever we are currently calling
    lock_cpu_hotplug(unlock_cpu_hotplug).
    
    Also, in the per-subsystem hotcpu callback function,we take this mutex before
    we handle any pre-cpu-hotplug events and release it once we finish handling
    the post-cpu-hotplug events.  A standard means for doing this has been
    provided in [PATCH 2/4] and demonstrated in [PATCH 3/4].
    
    The ordering of these per-subsystem mutexes might still prove to be a
    problem, but hopefully lockdep should help us get out of that muddle.
    
    The patch set to be applied against linux-2.6.19-rc5 is as follows:
    
    [PATCH 1/4] :	Extend notifier_call_chain with an option to specify the
    		number of notifications to be sent and also count the
    		number of notifications actually sent.
    
    [PATCH 2/4] :	Define events CPU_LOCK_ACQUIRE and CPU_LOCK_RELEASE
    		and send out notifications for these in _cpu_up and
    		_cpu_down. This would help us standardise the acquire and
    		release of the subsystem locks in the hotcpu
    		callback functions of these subsystems.
    
    [PATCH 3/4] :	Eliminate lock_cpu_hotplug from kernel/sched.c.
    
    [PATCH 4/4] :	In workqueue_cpu_callback function, acquire(release) the
    		workqueue_mutex while handling
    		CPU_LOCK_ACQUIRE(CPU_LOCK_RELEASE).
    
    If the per-subsystem-locking approach survives the test of time, we can expect
    a slow phasing out of lock_cpu_hotplug, which has not yet been eliminated in
    these patches :)
    
    This patch:
    
    Provide notifier_call_chain with an option to call only a specified number of
    notifiers and also record the number of call to notifiers made.
    
    The need for this enhancement was identified in the post entitled
    "Slab - Eliminate lock_cpu_hotplug from slab"
    (http://lkml.org/lkml/2006/10/28/92) by Ravikiran G Thirumalai and
    Andrew Morton.
    
    This patch adds two additional parameters to notifier_call_chain API namely
     - int nr_to_calls : Number of notifier_functions to be called.
     		     The don't care value is -1.
    
     - unsigned int *nr_calls : Records the total number of notifier_funtions
    			    called by notifier_call_chain. The don't care
    			    value is NULL.
    
    [michal.k.k.piotrowski@gmail.com: build fix]
    Credit: Andrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarGautham R Shenoy <ego@in.ibm.com>
    Signed-off-by: default avatarMichal Piotrowski <michal.k.k.piotrowski@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6f7cc11a
sys.c 55.7 KB