On Thu, 18 Oct 2007 17:53:00 +0900 Takenori Nagano wrote: > This patch adds new notifier function tunable_notifier_chain. Its base is > atomic_notifier_chain. > > Thanks, > > --- > > Signed-off-by: Takenori Nagano <t-nagano at ah.jp.nec.com> > > --- > diff -uprN linux-2.6.23.orig/kernel/sys.c linux-2.6.23/kernel/sys.c > --- linux-2.6.23.orig/kernel/sys.c 2007-10-10 05:31:38.000000000 +0900 > +++ linux-2.6.23/kernel/sys.c 2007-10-18 10:08:52.728000000 +0900 > @@ -38,6 +38,7 @@ > #include <linux/syscalls.h> > #include <linux/kprobes.h> > #include <linux/user_namespace.h> > +#include <linux/debugfs.h> > > #include <asm/uaccess.h> > #include <asm/io.h> > @@ -393,6 +394,243 @@ int blocking_notifier_call_chain(struct > EXPORT_SYMBOL_GPL(blocking_notifier_call_chain); > +/** > + * tunable_atomic_notifier_chain_register > + * - Add notifier to an tunable notifier chain Function name & short description must be on one (long?) line. :( > + * @nh: Pointer to head of the tunable notifier chain > + * @n: New entry in notifier chain > + * @name: Pointer to the name of the new notifier entry > + * @desc: Pointer to the description of new entry > + * > + * Adds a notifier to an tunable notifier chain and makes control dir. > + * > + * Returns zero on success or %-ENODEV on failure. > + */ > + > +int tunable_atomic_notifier_chain_register( > + struct tunable_atomic_notifier_head *nh, > + struct tunable_atomic_notifier_block *n, char *name, char *desc) > +{ > +} > + > +EXPORT_SYMBOL_GPL(tunable_atomic_notifier_chain_register); > + > +/** > + * tunable_atomic_notifier_chain_unregister > + * - Remove notifier from a tunable notifier chain Ditto. > + * @nh: Pointer to head of the tunable notifier chain > + * @n: Entry to remove from notifier chain > + * > + * Removes a notifier from a tunable notifier chain. > + * > + * Retunrns zero on success or %-ENOENT on failure. > + */ > + > +int tunable_atomic_notifier_chain_unregister( > + struct tunable_atomic_notifier_head *nh, > + struct tunable_atomic_notifier_block *n) > +{ > +} > + > +EXPORT_SYMBOL_GPL(tunable_atomic_notifier_chain_unregister); > + > +/** > + * __tunable_atomic_notifier_call_chain > + * - Call functions in a tunable notifier chain Same. > + * @nh: Pointer to head of the tunable notifier chain > + * @val: Value passed unmodified to notifier function > + * @v: Pointer passed unmodified to notifier function > + * @nt_to_call: See the comment for notifier_call_chain @nr_to_call: ... > + * @nr_calls: See the comment for notifier_call_chain > + * > + * Calls each function in a notifier chain in turn. The functions > + * run in an atomic context, so they must not block. > + * This routine uses RCU to synchronize with changes to the chain. > + * > + * If the return value of the notifier can be and'ed > + * with %NOTIFY_STOP_MASK then tunable_atomic_notifier_call_chain() > + * will return immediately, with the return value of > + * the notifier function which halted execution. > + * Otherwise the return value is the return value > + * of the last notifier function called. > + */ > + > +int __kprobes __tunable_atomic_notifier_call_chain( > + struct tunable_atomic_notifier_head *nh, > + unsigned long val, void *v, > + int nr_to_call, int *nr_calls) > +{ > + int ret; > + > + rcu_read_lock(); > + ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls); > + rcu_read_unlock(); > + return ret; > +} > + > +EXPORT_SYMBOL_GPL(__tunable_atomic_notifier_call_chain); Blank line is usually omitted before EXPORT_SYMBOL.... --- ~Randy