Fix some problems with the high-res timer support. Signed-off-by: Corey Minyard 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;