block/aoe: discover_timer: Convert timers to use timer_setup()
Subsystems (2)
PATCH 1/1 block/aoe: discover_timer: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer() to pass the timer pointer explicitly.
This refactors the discover_timer to remove the needless locking and state machine used for synchronizing timer death. Using del_timer_sync() will already do the right thing.
--- drivers/block/aoe/aoemain.c | 44 ++++++++------------------------------------ 1 file changed, 8 insertions(+), 36 deletions(-)
drivers/block/aoe/aoemain.c +8 -36
@@ -15,49 +15,19 @@ MODULE_AUTHOR("Sam Hopkins <[email protected]>");MODULE_DESCRIPTION ("AoE block/char driver for 2.6.2 and newer 2.6 kernels" );MODULE_VERSION (VERSION ); -enum {TINIT ,TRUN ,TKILL }; +static struct timer_list timer; -static void -discover_timer (ulong vp) +static void discover_timer (struct timer_list *t) { -static struct timer_list t; -static volatile ulong die; -static spinlock_t lock; -ulong flags; -enum {DTIMERTICK =HZ *60 };/* one minute */ - -switch (vp) { -case TINIT : -init_timer (&t); -spin_lock_init (&lock); - t.data =TRUN ; - t.function = discover_timer; - die =0 ; -case TRUN : -spin_lock_irqsave (&lock, flags); -if (!die) { - t.expires = jiffies +DTIMERTICK ; -add_timer (&t); - } -spin_unlock_irqrestore (&lock, flags); - -aoecmd_cfg (0xffff ,0xff ); -return ; -case TKILL : -spin_lock_irqsave (&lock, flags); - die =1 ; -spin_unlock_irqrestore (&lock, flags); +mod_timer (t, jiffies +HZ *60 );/* one minute */ -del_timer_sync (&t); -default : -return ; - } +aoecmd_cfg (0xffff ,0xff ); }static void aoe_exit (void ) { -discover_timer (TKILL ); +del_timer_sync (&timer);aoenet_exit ();unregister_blkdev (AOE_MAJOR ,DEVICE_NAME );
@@ -93,7 +63,9 @@ aoe_init(void) goto blkreg_fail; }printk (KERN_INFO "aoe: AoE v%s initialised.\n" ,VERSION ); -discover_timer (TINIT ); + +timer_setup (&timer, discover_timer,0 ); +discover_timer (&timer);return 0 ; blkreg_fail:aoecmd_exit ();
Signature · 6 lines
2.7.4 -- Kees Cook Pixel Security
Quoted 7 lines · Kees Cook
In preparation for unconditionally passing the struct
timer_listpointer to all timer callbacks, switch to using the newtimer_setup()andfrom_timer()to pass the timer pointer explicitly.This refactors the
discover_timerto remove the needless locking and state machine used for synchronizing timer death. Usingdel_timer_sync()will already do the right thing.
Looks OK to me, thanks.
Signature · 1 line
Ed