From: Chandra Seetharaman <sekharan@us.ibm.com>
To: akpm@osdl.org
Cc: linux-kernel@vger.kernel.org, lse-tech@lists.sourceforge.net,
stern@rowland.harvard.edu
Subject: [PATCH 3/7]: notifier_head changes with removal of reducdant protection
Date: Wed, 23 Nov 2005 15:40:39 -0800 [thread overview]
Message-ID: <1132789239.9460.22.camel@linuxchandra> (raw)
This patch includes changes to notifier chain head definitions and removal
of additional protection that is no longer needed.
Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
-----
drivers/cpufreq/cpufreq.c | 19 +++----------------
kernel/cpu.c | 12 ++----------
kernel/module.c | 17 +++--------------
kernel/profile.c | 35 +++++------------------------------
4 files changed, 13 insertions(+), 70 deletions(-)
Index: l2615-rc1-notifiers/drivers/cpufreq/cpufreq.c
===================================================================
--- l2615-rc1-notifiers.orig/drivers/cpufreq/cpufreq.c
+++ l2615-rc1-notifiers/drivers/cpufreq/cpufreq.c
@@ -50,9 +50,8 @@ static inline void adjust_jiffies(unsign
* changes to devices when the CPU clock speed changes.
* The mutex locks both lists.
*/
-static struct notifier_block *cpufreq_policy_notifier_list;
-static struct notifier_block *cpufreq_transition_notifier_list;
-static DECLARE_RWSEM (cpufreq_notifier_rwsem);
+static BLOCKING_NOTIFIER_HEAD(cpufreq_policy_notifier_list);
+static BLOCKING_NOTIFIER_HEAD(cpufreq_transition_notifier_list);
static LIST_HEAD(cpufreq_governor_list);
@@ -241,7 +240,6 @@ void cpufreq_notify_transition(struct cp
freqs->flags = cpufreq_driver->flags;
dprintk("notification %u of frequency transition to %u kHz\n", state, freqs->new);
- down_read(&cpufreq_notifier_rwsem);
switch (state) {
case CPUFREQ_PRECHANGE:
/* detect if the driver reported a value as "old frequency" which
@@ -269,7 +267,6 @@ void cpufreq_notify_transition(struct cp
cpufreq_cpu_data[freqs->cpu]->cur = freqs->new;
break;
}
- up_read(&cpufreq_notifier_rwsem);
}
EXPORT_SYMBOL_GPL(cpufreq_notify_transition);
@@ -1052,7 +1049,6 @@ int cpufreq_register_notifier(struct not
{
int ret;
- down_write(&cpufreq_notifier_rwsem);
switch (list) {
case CPUFREQ_TRANSITION_NOTIFIER:
ret = notifier_chain_register(&cpufreq_transition_notifier_list, nb);
@@ -1063,7 +1059,6 @@ int cpufreq_register_notifier(struct not
default:
ret = -EINVAL;
}
- up_write(&cpufreq_notifier_rwsem);
return ret;
}
@@ -1084,7 +1079,6 @@ int cpufreq_unregister_notifier(struct n
{
int ret;
- down_write(&cpufreq_notifier_rwsem);
switch (list) {
case CPUFREQ_TRANSITION_NOTIFIER:
ret = notifier_chain_unregister(&cpufreq_transition_notifier_list, nb);
@@ -1095,7 +1089,6 @@ int cpufreq_unregister_notifier(struct n
default:
ret = -EINVAL;
}
- up_write(&cpufreq_notifier_rwsem);
return ret;
}
@@ -1281,8 +1274,6 @@ static int __cpufreq_set_policy(struct c
if (ret)
goto error_out;
- down_read(&cpufreq_notifier_rwsem);
-
/* adjust if necessary - all reasons */
notifier_call_chain(&cpufreq_policy_notifier_list, CPUFREQ_ADJUST,
policy);
@@ -1294,17 +1285,13 @@ static int __cpufreq_set_policy(struct c
/* verify the cpu speed can be set within this limit,
which might be different to the first one */
ret = cpufreq_driver->verify(policy);
- if (ret) {
- up_read(&cpufreq_notifier_rwsem);
+ if (ret)
goto error_out;
- }
/* notification of the new policy */
notifier_call_chain(&cpufreq_policy_notifier_list, CPUFREQ_NOTIFY,
policy);
- up_read(&cpufreq_notifier_rwsem);
-
data->min = policy->min;
data->max = policy->max;
Index: l2615-rc1-notifiers/kernel/cpu.c
===================================================================
--- l2615-rc1-notifiers.orig/kernel/cpu.c
+++ l2615-rc1-notifiers/kernel/cpu.c
@@ -19,7 +19,7 @@
DECLARE_MUTEX(cpucontrol);
EXPORT_SYMBOL_GPL(cpucontrol);
-static struct notifier_block *cpu_chain;
+static BLOCKING_NOTIFIER_HEAD(cpu_chain);
/*
* Used to check by callers if they need to acquire the cpucontrol
@@ -42,21 +42,13 @@ EXPORT_SYMBOL_GPL(current_in_cpu_hotplug
/* Need to know about CPUs going up/down? */
int register_cpu_notifier(struct notifier_block *nb)
{
- int ret;
-
- if ((ret = down_interruptible(&cpucontrol)) != 0)
- return ret;
- ret = notifier_chain_register(&cpu_chain, nb);
- up(&cpucontrol);
- return ret;
+ return notifier_chain_register(&cpu_chain, nb);
}
EXPORT_SYMBOL(register_cpu_notifier);
void unregister_cpu_notifier(struct notifier_block *nb)
{
- down(&cpucontrol);
notifier_chain_unregister(&cpu_chain, nb);
- up(&cpucontrol);
}
EXPORT_SYMBOL(unregister_cpu_notifier);
Index: l2615-rc1-notifiers/kernel/module.c
===================================================================
--- l2615-rc1-notifiers.orig/kernel/module.c
+++ l2615-rc1-notifiers/kernel/module.c
@@ -62,26 +62,17 @@ static DEFINE_SPINLOCK(modlist_lock);
static DECLARE_MUTEX(module_mutex);
static LIST_HEAD(modules);
-static DECLARE_MUTEX(notify_mutex);
-static struct notifier_block * module_notify_list;
+static BLOCKING_NOTIFIER_HEAD(module_notify_list);
int register_module_notifier(struct notifier_block * nb)
{
- int err;
- down(¬ify_mutex);
- err = notifier_chain_register(&module_notify_list, nb);
- up(¬ify_mutex);
- return err;
+ return notifier_chain_register(&module_notify_list, nb);
}
EXPORT_SYMBOL(register_module_notifier);
int unregister_module_notifier(struct notifier_block * nb)
{
- int err;
- down(¬ify_mutex);
- err = notifier_chain_unregister(&module_notify_list, nb);
- up(¬ify_mutex);
- return err;
+ return notifier_chain_unregister(&module_notify_list, nb);
}
EXPORT_SYMBOL(unregister_module_notifier);
@@ -1905,9 +1896,7 @@ sys_init_module(void __user *umod,
/* Drop lock so they can recurse */
up(&module_mutex);
- down(¬ify_mutex);
notifier_call_chain(&module_notify_list, MODULE_STATE_COMING, mod);
- up(¬ify_mutex);
/* Start the module */
if (mod->init != NULL)
Index: l2615-rc1-notifiers/kernel/profile.c
===================================================================
--- l2615-rc1-notifiers.orig/kernel/profile.c
+++ l2615-rc1-notifiers/kernel/profile.c
@@ -86,61 +86,41 @@ void __init profile_init(void)
#ifdef CONFIG_PROFILING
-static DECLARE_RWSEM(profile_rwsem);
-static DEFINE_RWLOCK(handoff_lock);
-static struct notifier_block * task_exit_notifier;
-static struct notifier_block * task_free_notifier;
-static struct notifier_block * munmap_notifier;
+static BLOCKING_NOTIFIER_HEAD(task_exit_notifier);
+static ATOMIC_NOTIFIER_HEAD(task_free_notifier);
+static BLOCKING_NOTIFIER_HEAD(munmap_notifier);
void profile_task_exit(struct task_struct * task)
{
- down_read(&profile_rwsem);
notifier_call_chain(&task_exit_notifier, 0, task);
- up_read(&profile_rwsem);
}
int profile_handoff_task(struct task_struct * task)
{
int ret;
- read_lock(&handoff_lock);
ret = notifier_call_chain(&task_free_notifier, 0, task);
- read_unlock(&handoff_lock);
return (ret == NOTIFY_OK) ? 1 : 0;
}
void profile_munmap(unsigned long addr)
{
- down_read(&profile_rwsem);
notifier_call_chain(&munmap_notifier, 0, (void *)addr);
- up_read(&profile_rwsem);
}
int task_handoff_register(struct notifier_block * n)
{
- int err = -EINVAL;
-
- write_lock(&handoff_lock);
- err = notifier_chain_register(&task_free_notifier, n);
- write_unlock(&handoff_lock);
- return err;
+ return notifier_chain_register(&task_free_notifier, n);
}
int task_handoff_unregister(struct notifier_block * n)
{
- int err = -EINVAL;
-
- write_lock(&handoff_lock);
- err = notifier_chain_unregister(&task_free_notifier, n);
- write_unlock(&handoff_lock);
- return err;
+ return notifier_chain_unregister(&task_free_notifier, n);
}
int profile_event_register(enum profile_type type, struct notifier_block * n)
{
int err = -EINVAL;
- down_write(&profile_rwsem);
-
switch (type) {
case PROFILE_TASK_EXIT:
err = notifier_chain_register(&task_exit_notifier, n);
@@ -150,8 +130,6 @@ int profile_event_register(enum profile_
break;
}
- up_write(&profile_rwsem);
-
return err;
}
@@ -160,8 +138,6 @@ int profile_event_unregister(enum profil
{
int err = -EINVAL;
- down_write(&profile_rwsem);
-
switch (type) {
case PROFILE_TASK_EXIT:
err = notifier_chain_unregister(&task_exit_notifier, n);
@@ -171,7 +147,6 @@ int profile_event_unregister(enum profil
break;
}
- up_write(&profile_rwsem);
return err;
}
--
----------------------------------------------------------------------
Chandra Seetharaman | Be careful what you choose....
- sekharan@us.ibm.com | .......you may get it.
----------------------------------------------------------------------
reply other threads:[~2005-11-23 23:42 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1132789239.9460.22.camel@linuxchandra \
--to=sekharan@us.ibm.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lse-tech@lists.sourceforge.net \
--cc=stern@rowland.harvard.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.