diff options
Diffstat (limited to 'kernel/notifier.c')
| -rw-r--r-- | kernel/notifier.c | 57 | 
1 files changed, 15 insertions, 42 deletions
diff --git a/kernel/notifier.c b/kernel/notifier.c index 2488ba7eb56..4803da6eab6 100644 --- a/kernel/notifier.c +++ b/kernel/notifier.c @@ -1,6 +1,6 @@  #include <linux/kdebug.h>  #include <linux/kprobes.h> -#include <linux/module.h> +#include <linux/export.h>  #include <linux/notifier.h>  #include <linux/rcupdate.h>  #include <linux/vmalloc.h> @@ -71,9 +71,9 @@ static int notifier_chain_unregister(struct notifier_block **nl,   *	@returns:	notifier_call_chain returns the value returned by the   *			last notifier function called.   */ -static int __kprobes notifier_call_chain(struct notifier_block **nl, -					unsigned long val, void *v, -					int nr_to_call,	int *nr_calls) +static int notifier_call_chain(struct notifier_block **nl, +			       unsigned long val, void *v, +			       int nr_to_call, int *nr_calls)  {  	int ret = NOTIFY_DONE;  	struct notifier_block *nb, *next_nb; @@ -102,6 +102,7 @@ static int __kprobes notifier_call_chain(struct notifier_block **nl,  	}  	return ret;  } +NOKPROBE_SYMBOL(notifier_call_chain);  /*   *	Atomic notifier chain routines.  Registration and unregistration @@ -172,9 +173,9 @@ EXPORT_SYMBOL_GPL(atomic_notifier_chain_unregister);   *	Otherwise the return value is the return value   *	of the last notifier function called.   */ -int __kprobes __atomic_notifier_call_chain(struct atomic_notifier_head *nh, -					unsigned long val, void *v, -					int nr_to_call, int *nr_calls) +int __atomic_notifier_call_chain(struct atomic_notifier_head *nh, +				 unsigned long val, void *v, +				 int nr_to_call, int *nr_calls)  {  	int ret; @@ -184,13 +185,15 @@ int __kprobes __atomic_notifier_call_chain(struct atomic_notifier_head *nh,  	return ret;  }  EXPORT_SYMBOL_GPL(__atomic_notifier_call_chain); +NOKPROBE_SYMBOL(__atomic_notifier_call_chain); -int __kprobes atomic_notifier_call_chain(struct atomic_notifier_head *nh, -		unsigned long val, void *v) +int atomic_notifier_call_chain(struct atomic_notifier_head *nh, +			       unsigned long val, void *v)  {  	return __atomic_notifier_call_chain(nh, val, v, -1, NULL);  }  EXPORT_SYMBOL_GPL(atomic_notifier_call_chain); +NOKPROBE_SYMBOL(atomic_notifier_call_chain);  /*   *	Blocking notifier chain routines.  All access to the chain is @@ -309,7 +312,7 @@ int __blocking_notifier_call_chain(struct blocking_notifier_head *nh,  	 * racy then it does not matter what the result of the test  	 * is, we re-check the list after having taken the lock anyway:  	 */ -	if (rcu_dereference_raw(nh->head)) { +	if (rcu_access_pointer(nh->head)) {  		down_read(&nh->rwsem);  		ret = notifier_call_chain(&nh->head, val, v, nr_to_call,  					nr_calls); @@ -525,40 +528,9 @@ void srcu_init_notifier_head(struct srcu_notifier_head *nh)  }  EXPORT_SYMBOL_GPL(srcu_init_notifier_head); -/** - *	register_reboot_notifier - Register function to be called at reboot time - *	@nb: Info about notifier function to be called - * - *	Registers a function with the list of functions - *	to be called at reboot time. - * - *	Currently always returns zero, as blocking_notifier_chain_register() - *	always returns zero. - */ -int register_reboot_notifier(struct notifier_block *nb) -{ -	return blocking_notifier_chain_register(&reboot_notifier_list, nb); -} -EXPORT_SYMBOL(register_reboot_notifier); - -/** - *	unregister_reboot_notifier - Unregister previously registered reboot notifier - *	@nb: Hook to be unregistered - * - *	Unregisters a previously registered reboot - *	notifier function. - * - *	Returns zero on success, or %-ENOENT on failure. - */ -int unregister_reboot_notifier(struct notifier_block *nb) -{ -	return blocking_notifier_chain_unregister(&reboot_notifier_list, nb); -} -EXPORT_SYMBOL(unregister_reboot_notifier); -  static ATOMIC_NOTIFIER_HEAD(die_chain); -int notrace __kprobes notify_die(enum die_val val, const char *str, +int notrace notify_die(enum die_val val, const char *str,  	       struct pt_regs *regs, long err, int trap, int sig)  {  	struct die_args args = { @@ -571,6 +543,7 @@ int notrace __kprobes notify_die(enum die_val val, const char *str,  	};  	return atomic_notifier_call_chain(&die_chain, val, &args);  } +NOKPROBE_SYMBOL(notify_die);  int register_die_notifier(struct notifier_block *nb)  {  | 
