#include #include #define USER_DEFINED_NOTIFIER_COMMAND 0x0001 /* PROVIDER */ static BLOCKING_NOTIFIER_HEAD(user_defined_chain); /* CONSUMER */ int consumer_callback( struct notifier_block *self, unsigned long val, void *data) { printk("consumer: val: %ld, data: %p\n", val, data); return NOTIFY_DONE; } static struct notifier_block user_defined_notifier = { .notifier_call = consumer_callback, }; static int __init notifier_init(void) { blocking_notifier_chain_register( &user_defined_chain, &user_defined_notifier); /* PROVIDER */ blocking_notifier_call_chain( &user_defined_chain, USER_DEFINED_NOTIFIER_COMMAND, NULL); return 0; } static void __exit notifier_exit(void) { blocking_notifier_chain_unregister( &user_defined_chain, &user_defined_notifier); } module_init(notifier_init); module_exit(notifier_exit); MODULE_LICENSE("GPL");