kernel/timers: move tick computation out of irq_lock block

These tick computation can take a significant amount of time, and there
is no reason to do them with interrupts locked.

Change-Id: I2d8803ec6025b827e9450fa493084bbf8be98bad
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
diff --git a/kernel/unified/timer.c b/kernel/unified/timer.c
index d1315f5..be55893 100644
--- a/kernel/unified/timer.c
+++ b/kernel/unified/timer.c
@@ -109,15 +109,19 @@
 	__ASSERT(duration >= 0 && period >= 0 &&
 		 (duration != 0 || period != 0), "invalid parameters\n");
 
+	volatile int32_t period_in_ticks, duration_in_ticks;
+
+	period_in_ticks = _ms_to_ticks(period);
+	duration_in_ticks = _TICK_ALIGN + _ms_to_ticks(duration);
+
 	unsigned int key = irq_lock();
 
 	if (timer->timeout.delta_ticks_from_prev != _INACTIVE) {
 		_abort_timeout(&timer->timeout);
 	}
 
-	timer->period = _ms_to_ticks(period);
-	_add_timeout(NULL, &timer->timeout, &timer->wait_q,
-			_TICK_ALIGN + _ms_to_ticks(duration));
+	timer->period = period_in_ticks;
+	_add_timeout(NULL, &timer->timeout, &timer->wait_q, duration_in_ticks);
 	timer->status = 0;
 	irq_unlock(key);
 }