]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/profile.c
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
[linux-2.6-omap-h63xx.git] / kernel / profile.c
index ad81f799a9b4ad29fee8836e6ef0651e2dba0819..68afe121e5071f0574e37e7b9e20f1d66bd4c290 100644 (file)
@@ -87,72 +87,52 @@ 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);
+       blocking_notifier_call_chain(&task_exit_notifier, 0, task);
 }
  
 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);
+       ret = atomic_notifier_call_chain(&task_free_notifier, 0, task);
        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);
+       blocking_notifier_call_chain(&munmap_notifier, 0, (void *)addr);
 }
 
 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 atomic_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 atomic_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);
+                       err = blocking_notifier_chain_register(
+                                       &task_exit_notifier, n);
                        break;
                case PROFILE_MUNMAP:
-                       err = notifier_chain_register(&munmap_notifier, n);
+                       err = blocking_notifier_chain_register(
+                                       &munmap_notifier, n);
                        break;
        }
  
-       up_write(&profile_rwsem);
        return err;
 }
 
@@ -161,18 +141,17 @@ int profile_event_unregister(enum profile_type type, struct notifier_block * n)
 {
        int err = -EINVAL;
  
-       down_write(&profile_rwsem);
        switch (type) {
                case PROFILE_TASK_EXIT:
-                       err = notifier_chain_unregister(&task_exit_notifier, n);
+                       err = blocking_notifier_chain_unregister(
+                                       &task_exit_notifier, n);
                        break;
                case PROFILE_MUNMAP:
-                       err = notifier_chain_unregister(&munmap_notifier, n);
+                       err = blocking_notifier_chain_unregister(
+                                       &munmap_notifier, n);
                        break;
        }
 
-       up_write(&profile_rwsem);
        return err;
 }
 
@@ -320,7 +299,7 @@ out:
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
-static int __devinit profile_cpu_callback(struct notifier_block *info,
+static int profile_cpu_callback(struct notifier_block *info,
                                        unsigned long action, void *__cpu)
 {
        int node, cpu = (unsigned long)__cpu;