[PATCH] Fixes for IPMI use of timers

From: Corey Minyard
Date: Thu May 19 2005 - 18:38:45 EST



Fix some problems with the high-res timer support.

Signed-off-by: Corey Minyard <minyard@xxxxxxx>

Index: linux-2.6.12-rc4/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
--- linux-2.6.12-rc4.orig/drivers/char/ipmi/ipmi_si_intf.c
+++ linux-2.6.12-rc4/drivers/char/ipmi/ipmi_si_intf.c
@@ -769,10 +769,11 @@

/* We already have irqsave on, so no need for it
here. */
- read_lock(&xtime_lock);
+ read_lock_irqsave(&xtime_lock, flags);
jiffies_now = jiffies;
smi_info->si_timer.expires = jiffies_now;
smi_info->si_timer.sub_expires = get_arch_cycles(jiffies_now);
+ read_unlock_irqrestore(&xtime_lock, flags);

add_usec_to_timer(&smi_info->si_timer, SI_SHORT_TIMEOUT_USEC);

@@ -830,11 +831,11 @@
smi_info->short_timeouts++;
spin_unlock_irqrestore(&smi_info->count_lock, flags);
#if defined(CONFIG_HIGH_RES_TIMERS)
- read_lock(&xtime_lock);
+ read_lock_irqsave(&xtime_lock, flags);
smi_info->si_timer.expires = jiffies;
smi_info->si_timer.sub_expires
= get_arch_cycles(smi_info->si_timer.expires);
- read_unlock(&xtime_lock);
+ read_unlock_irqrestore(&xtime_lock, flags);
add_usec_to_timer(&smi_info->si_timer, SI_SHORT_TIMEOUT_USEC);
#else
smi_info->si_timer.expires = jiffies + 1;