--- trivial-2.5-bk/drivers/net/irda/ep7211_ir.c.orig 2002-12-06 13:56:35.000000000 +1100 +++ trivial-2.5-bk/drivers/net/irda/ep7211_ir.c 2002-12-06 13:56:35.000000000 +1100 @@ -32,11 +32,13 @@ ep7211_ir_change_speed, }; +static spinlock_t ir_lock = SPIN_LOCK_UNLOCKED; + static void ep7211_ir_open(dongle_t *self, struct qos_info *qos) { unsigned int syscon1, flags; - save_flags(flags); cli(); + spin_lock_irqsave(&ir_lock, flags); /* Turn on the SIR encoder. */ syscon1 = clps_readl(SYSCON1); @@ -46,7 +48,7 @@ /* XXX: We should disable modem status interrupts on the first UART (interrupt #14). */ - restore_flags(flags); + spin_unlock_irqrestore(&ir_lock, flags); MOD_INC_USE_COUNT; } @@ -55,7 +57,7 @@ { unsigned int syscon1, flags; - save_flags(flags); cli(); + spin_lock_irqsave(&ir_lock, flags); /* Turn off the SIR encoder. */ syscon1 = clps_readl(SYSCON1); @@ -65,7 +67,7 @@ /* XXX: If we've disabled the modem status interrupts, we should reset them back to their original state. */ - restore_flags(flags); + spin_unlock_irqrestore(&ir_lock, flags); MOD_DEC_USE_COUNT; }