• Li RongQing's avatar
    watchdog: refuse to unload softdog module when its timer is running · 5889f06b
    Li RongQing authored
    the softdog has static variables which are accessed if its timer is
    still running after the driver is unloaded. and lead to crash:
    
       $modprobe softdog
       $echo 1 >/dev/watchdog
       $modprobe -r softdog
    
       CPU 20 Unable to handle kernel paging request at virtual address
       Oops[#1]:
       CPU: 20 PID: 0 Comm: swapper/20 Not tainted 4.1.13-WR8.0.0.0_standard
       ...
       Modules linked in: [last unloaded: softdog]
        ....
       Call Trace:
       [<ffffffff801e142c>] cascade+0x34/0xb0
       [<ffffffff801e1964>] run_timer_softirq+0x30c/0x368
       [<ffffffff80181044>] __do_softirq+0x1ec/0x418
       [<ffffffff801815d0>] irq_exit+0x90/0x98
       [<ffffffff8010749c>] plat_irq_dispatch+0xa4/0x140
       [<ffffffff80152740>] ret_from_irq+0x0/0x4
       [<ffffffff801529e0>] __r4k_wait+0x20/0x40
       [<ffffffff801c2278>] cpu_startup_entry+0x2a0/0x368
       [<ffffffff8015fa64>] start_secondary+0x444/0x4d8
    
    add the module ref when timer is running to avoid to unload the softdog
    module
    Signed-off-by: default avatarLi RongQing <roy.qing.li@gmail.com>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
    5889f06b
softdog.c 4.66 KB