[PATCH] RCU: clean up a few remaining synchronize_kernel() calls
authorPaul E. McKenney <paulmck@us.ibm.com>
Sat, 25 Jun 2005 21:55:38 +0000 (14:55 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 25 Jun 2005 23:24:38 +0000 (16:24 -0700)
2.6.12-rc6-mm1 has a few remaining synchronize_kernel()s, some (but not
all) in comments.  This patch changes these synchronize_kernel() calls (and
comments) to synchronize_rcu() or synchronize_sched() as follows:

- arch/x86_64/kernel/mce.c mce_read(): change to synchronize_sched() to
  handle races with machine-check exceptions (synchronize_rcu() would not cut
  it given RCU implementations intended for hardcore realtime use.

- drivers/input/serio/i8042.c i8042_stop(): change to synchronize_sched() to
  handle races with i8042_interrupt() interrupt handler.  Again,
  synchronize_rcu() would not cut it given RCU implementations intended for
  hardcore realtime use.

- include/*/kdebug.h comments: change to synchronize_sched() to handle races
  with NMIs.  As before, synchronize_rcu() would not cut it...

- include/linux/list.h comment: change to synchronize_rcu(), since this
  comment is for list_del_rcu().

- security/keys/key.c unregister_key_type(): change to synchronize_rcu(),
  since this is interacting with RCU read side.

- security/keys/process_keys.c install_session_keyring(): change to
  synchronize_rcu(), since this is interacting with RCU read side.

Signed-off-by: "Paul E. McKenney" <paulmck@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/x86_64/kernel/mce.c
drivers/input/serio/i8042.c
include/asm-i386/kdebug.h
include/asm-ppc64/kdebug.h
include/asm-sparc64/kdebug.h
include/asm-x86_64/kdebug.h
include/linux/list.h
security/keys/key.c
security/keys/process_keys.c

index 7ab15c8ab95f66292b6953255d22ddc76ea3981e..21e70625a4953e26361c060c432f1803393952c5 100644 (file)
@@ -411,7 +411,7 @@ static ssize_t mce_read(struct file *filp, char __user *ubuf, size_t usize, loff
        memset(mcelog.entry, 0, next * sizeof(struct mce));
        mcelog.next = 0;
 
-       synchronize_kernel();   
+       synchronize_sched();
 
        /* Collect entries that were still getting written before the synchronize. */
 
index 5900de3c3f4f04b0936d2788edf5461681dc075e..a9bf549c8dc5b0e8f637f691938d7fd2bd9de2e5 100644 (file)
@@ -396,7 +396,7 @@ static void i8042_stop(struct serio *serio)
        struct i8042_port *port = serio->port_data;
 
        port->exists = 0;
-       synchronize_kernel();
+       synchronize_sched();
        port->serio = NULL;
 }
 
index de6498b0d49381e0d37cb0318ab245d6c28acdd4..b3f8d5f59d5d8fc02cc1c5f88bce01921c641496 100644 (file)
@@ -18,7 +18,7 @@ struct die_args {
 };
 
 /* Note - you should never unregister because that can race with NMIs.
-   If you really want to do it first unregister - then synchronize_kernel - then free.
+   If you really want to do it first unregister - then synchronize_sched - then free.
   */
 int register_die_notifier(struct notifier_block *nb);
 extern struct notifier_block *i386die_chain;
index 488634258a722ee7da2319b61caae04ff877f1e4..d383d161cf8d9b24e28b1f230ae7dedec81cbfdd 100644 (file)
@@ -17,7 +17,7 @@ struct die_args {
 
 /*
    Note - you should never unregister because that can race with NMIs.
-   If you really want to do it first unregister - then synchronize_kernel -
+   If you really want to do it first unregister - then synchronize_sched -
    then free.
  */
 int register_die_notifier(struct notifier_block *nb);
index f70d3dad01f9398166409397efbf2f5013959654..6321f5a0198d4811c3a7ed4a8bbf2efed4b86a37 100644 (file)
@@ -16,7 +16,7 @@ struct die_args {
 };
 
 /* Note - you should never unregister because that can race with NMIs.
- * If you really want to do it first unregister - then synchronize_kernel
+ * If you really want to do it first unregister - then synchronize_sched
  * - then free.
  */
 int register_die_notifier(struct notifier_block *nb);
index 6277f75cbb4b3f1a25330cf80280e9118f63f8a3..b90341994d80f6e78d18f685cca99e15baea8e37 100644 (file)
@@ -14,7 +14,7 @@ struct die_args {
 }; 
 
 /* Note - you should never unregister because that can race with NMIs.
-   If you really want to do it first unregister - then synchronize_kernel - then free. 
+   If you really want to do it first unregister - then synchronize_sched - then free.
   */
 int register_die_notifier(struct notifier_block *nb);
 extern struct notifier_block *die_chain;
index 399b51d1721880e6eac3d8b293a140938bf7eb17..aab2db21b013e438c672dbfe4fcceb065bf578d3 100644 (file)
@@ -185,7 +185,7 @@ static inline void list_del(struct list_head *entry)
  * list_for_each_entry_rcu().
  *
  * Note that the caller is not permitted to immediately free
- * the newly deleted entry.  Instead, either synchronize_kernel()
+ * the newly deleted entry.  Instead, either synchronize_rcu()
  * or call_rcu() must be used to defer freeing until an RCU
  * grace period has elapsed.
  */
index 3304d37bb379e1b23afbe732c4d2c93513c9e6d6..fb89f9844465587caa5f3333eabf1a877e0e0848 100644 (file)
@@ -980,7 +980,7 @@ void unregister_key_type(struct key_type *ktype)
        spin_unlock(&key_serial_lock);
 
        /* make sure everyone revalidates their keys */
-       synchronize_kernel();
+       synchronize_rcu();
 
        /* we should now be able to destroy the payloads of all the keys of
         * this type with impunity */
index 34db087bbcc7d0cdcb08266bdaf840067adb1311..9b0369c5a223acbf951178e87ebbb0789458b507 100644 (file)
@@ -234,7 +234,7 @@ static int install_session_keyring(struct task_struct *tsk,
        ret = 0;
 
        /* we're using RCU on the pointer */
-       synchronize_kernel();
+       synchronize_rcu();
        key_put(old);
  error:
        return ret;