IPMI timer shutdown cleanup
PATCH 1/1 IPMI timer shutdown cleanup
Clean up the timer shutdown handling in the IPMI driver.
Signed-off-by Corey Minyard <[email protected]>
drivers/char/ipmi/ipmi_msghandler.c +5 -12
@@ -2806,16 +2806,13 @@the queue and this silliness can go away. */ #define IPMI_REQUEST_EV_TIME (1000 / (IPMI_TIMEOUT_TIME)) -static volatile int stop_operation =0 ; -static volatile int timer_stopped =0 ; +static atomic_t stop_operation;static unsigned int ticks_to_req_ev =IPMI_REQUEST_EV_TIME ;static void ipmi_timeout (unsigned long data) { -if (stop_operation) { - timer_stopped =1 ; +if (atomic_read (&stop_operation))return ; - } ticks_to_req_ev--;if (ticks_to_req_ev ==0 ) {
@@ -2825,8 +2822,7 @@ipmi_timeout_handler (IPMI_TIMEOUT_TIME ); - ipmi_timer.expires +=IPMI_TIMEOUT_JIFFIES ; -add_timer (&ipmi_timer); +mod_timer (&ipmi_timer, jiffies +IPMI_TIMEOUT_JIFFIES ); }
@@ -3189,11 +3185,8 @@/* Tell the timer to stop, then wait for it to stop. This avoids problems with race conditions removing the timer here. */ - stop_operation =1 ; -while (!timer_stopped) { -set_current_state (TASK_UNINTERRUPTIBLE ); -schedule_timeout (1 ); - } +atomic_inc (&stop_operation); +del_timer_sync (&ipmi_timer);remove_proc_entry (proc_ipmi_root->name, &proc_root);