Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ea22086 authored by Kees Cook's avatar Kees Cook
Browse files

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.

Cc: Jens Axboe <axboe@kernel.dk>
Cc: "Ed L. Cashin" <ed.cashin@acm.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
parent 10738ba8
Loading
Loading
Loading
Loading
+8 −36
Original line number Original line Diff line number Diff line
@@ -15,49 +15,19 @@ MODULE_AUTHOR("Sam Hopkins <sah@coraid.com>");
MODULE_DESCRIPTION("AoE block/char driver for 2.6.2 and newer 2.6 kernels");
MODULE_DESCRIPTION("AoE block/char driver for 2.6.2 and newer 2.6 kernels");
MODULE_VERSION(VERSION);
MODULE_VERSION(VERSION);


enum { TINIT, TRUN, TKILL };
static struct timer_list timer;


static void
static void discover_timer(struct timer_list *t)
discover_timer(ulong vp)
{
{
	static struct timer_list t;
	mod_timer(t, jiffies + HZ * 60); /* one minute */
	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);
	aoecmd_cfg(0xffff, 0xff);
		return;
	case TKILL:
		spin_lock_irqsave(&lock, flags);
		die = 1;
		spin_unlock_irqrestore(&lock, flags);

		del_timer_sync(&t);
	default:
		return;
	}
}
}


static void
static void
aoe_exit(void)
aoe_exit(void)
{
{
	discover_timer(TKILL);
	del_timer_sync(&timer);


	aoenet_exit();
	aoenet_exit();
	unregister_blkdev(AOE_MAJOR, DEVICE_NAME);
	unregister_blkdev(AOE_MAJOR, DEVICE_NAME);
@@ -93,7 +63,9 @@ aoe_init(void)
		goto blkreg_fail;
		goto blkreg_fail;
	}
	}
	printk(KERN_INFO "aoe: AoE v%s initialised.\n", VERSION);
	printk(KERN_INFO "aoe: AoE v%s initialised.\n", VERSION);
	discover_timer(TINIT);

	timer_setup(&timer, discover_timer, 0);
	discover_timer(&timer);
	return 0;
	return 0;
 blkreg_fail:
 blkreg_fail:
	aoecmd_exit();
	aoecmd_exit();