Commit b2b18660 authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Linus Torvalds
Browse files

[PATCH] RCU: clean up a few remaining synchronize_kernel() calls



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: default avatar"Paul E. McKenney" <paulmck@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ae67cd64
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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. */

+1 −1
Original line number Diff line number Diff line
@@ -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;
}

+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);
Loading