X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fisdn%2Fhardware%2Favm%2Fc4.c;h=0e40acac7ffeb649b7b08efc1e6a07ccecd66516;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=72b57d4fbf3edd5ae9e0e73f25f5c3ce379ccaa7;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/isdn/hardware/avm/c4.c b/drivers/isdn/hardware/avm/c4.c index 72b57d4fb..0e40acac7 100644 --- a/drivers/isdn/hardware/avm/c4.c +++ b/drivers/isdn/hardware/avm/c4.c @@ -662,15 +662,16 @@ static void c4_handle_rx(avmcard *card) static irqreturn_t c4_handle_interrupt(avmcard *card) { + unsigned long flags; u32 status; - spin_lock(&card->lock); + spin_lock_irqsave(&card->lock, flags); status = c4inmeml(card->mbase+DOORBELL); if (status & DBELL_RESET_HOST) { u_int i; c4outmeml(card->mbase+PCI_OUT_INT_MASK, 0x0c); - spin_unlock(&card->lock); + spin_unlock_irqrestore(&card->lock, flags); if (card->nlogcontr == 0) return IRQ_HANDLED; printk(KERN_ERR "%s: unexpected reset\n", card->name); @@ -686,7 +687,7 @@ static irqreturn_t c4_handle_interrupt(avmcard *card) status &= (DBELL_UP_HOST | DBELL_DOWN_HOST); if (!status) { - spin_unlock(&card->lock); + spin_unlock_irqrestore(&card->lock, flags); return IRQ_HANDLED; } c4outmeml(card->mbase+DOORBELL, status); @@ -709,7 +710,7 @@ static irqreturn_t c4_handle_interrupt(avmcard *card) c4_dispatch_tx(card); } } - spin_unlock(&card->lock); + spin_unlock_irqrestore(&card->lock, flags); return IRQ_HANDLED; }