#include #include #include #include static void do_blink(unsigned long data); static DEFINE_TIMER(blink_timer, do_blink, 0 ,0); static void do_blink(unsigned long data) { static long count; if (panic_blink) panic_blink(count++); blink_timer.expires = jiffies + msecs_to_jiffies(1); add_timer(&blink_timer); } static int blink_panic_event(struct notifier_block *blk, unsigned long event, void *arg) { do_blink(0); return 0; } static struct notifier_block blink_notify = { .notifier_call = blink_panic_event, }; static __init int blink_init(void) { printk(KERN_INFO "Enabling keyboard blinking\n"); atomic_notifier_chain_register(&panic_notifier_list, &blink_notify); return 0; } static __exit void blink_remove(void) { del_timer_sync(&blink_timer); atomic_notifier_chain_unregister(&panic_notifier_list, &blink_notify); } module_init(blink_init); module_exit(blink_remove);