From cf9c2fff91a8d06f497eb84ea1931903f9b6bb79 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Thu, 6 Nov 2008 15:55:49 +0000 Subject: [PATCH] Fixed generation of unnecessary software interrupt in e100 driver. --- devices/e100-2.6.20-ethercat.c | 18 +++++++++--------- devices/e100-2.6.24-ethercat.c | 18 +++++++++--------- devices/e100-2.6.26-ethercat.c | 18 +++++++++--------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/devices/e100-2.6.20-ethercat.c b/devices/e100-2.6.20-ethercat.c index 6df1d214..08e765cb 100644 --- a/devices/e100-2.6.20-ethercat.c +++ b/devices/e100-2.6.20-ethercat.c @@ -1642,17 +1642,17 @@ static void e100_watchdog(unsigned long data) mii_check_link(&nic->mii); - /* Software generated interrupt to recover from (rare) Rx - * allocation failure. - * Unfortunately have to use a spinlock to not re-enable interrupts - * accidentally, due to hardware that shares a register between the - * interrupt mask bit and the SW Interrupt generation bit */ - if (!nic->ecdev) + if (!nic->ecdev) { + /* Software generated interrupt to recover from (rare) Rx + * allocation failure. + * Unfortunately have to use a spinlock to not re-enable interrupts + * accidentally, due to hardware that shares a register between the + * interrupt mask bit and the SW Interrupt generation bit */ spin_lock_irq(&nic->cmd_lock); - writeb(readb(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); - e100_write_flush(nic); - if (!nic->ecdev) + writeb(readb(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); + e100_write_flush(nic); spin_unlock_irq(&nic->cmd_lock); + } e100_update_stats(nic); e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex); diff --git a/devices/e100-2.6.24-ethercat.c b/devices/e100-2.6.24-ethercat.c index aa4e5303..e387a5f1 100644 --- a/devices/e100-2.6.24-ethercat.c +++ b/devices/e100-2.6.24-ethercat.c @@ -1658,17 +1658,17 @@ static void e100_watchdog(unsigned long data) mii_check_link(&nic->mii); - /* Software generated interrupt to recover from (rare) Rx - * allocation failure. - * Unfortunately have to use a spinlock to not re-enable interrupts - * accidentally, due to hardware that shares a register between the - * interrupt mask bit and the SW Interrupt generation bit */ - if (!nic->ecdev) + if (!nic->ecdev) { + /* Software generated interrupt to recover from (rare) Rx + * allocation failure. + * Unfortunately have to use a spinlock to not re-enable interrupts + * accidentally, due to hardware that shares a register between the + * interrupt mask bit and the SW Interrupt generation bit */ spin_lock_irq(&nic->cmd_lock); - iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); - e100_write_flush(nic); - if (!nic->ecdev) + iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); + e100_write_flush(nic); spin_unlock_irq(&nic->cmd_lock); + } e100_update_stats(nic); e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex); diff --git a/devices/e100-2.6.26-ethercat.c b/devices/e100-2.6.26-ethercat.c index 3b1ddc4f..ec90a5cb 100644 --- a/devices/e100-2.6.26-ethercat.c +++ b/devices/e100-2.6.26-ethercat.c @@ -1665,17 +1665,17 @@ static void e100_watchdog(unsigned long data) mii_check_link(&nic->mii); - /* Software generated interrupt to recover from (rare) Rx - * allocation failure. - * Unfortunately have to use a spinlock to not re-enable interrupts - * accidentally, due to hardware that shares a register between the - * interrupt mask bit and the SW Interrupt generation bit */ - if (!nic->ecdev) + if (!nic->ecdev) { + /* Software generated interrupt to recover from (rare) Rx + * allocation failure. + * Unfortunately have to use a spinlock to not re-enable interrupts + * accidentally, due to hardware that shares a register between the + * interrupt mask bit and the SW Interrupt generation bit */ spin_lock_irq(&nic->cmd_lock); - iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); - e100_write_flush(nic); - if (!nic->ecdev) + iowrite8(ioread8(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); + e100_write_flush(nic); spin_unlock_irq(&nic->cmd_lock); + } e100_update_stats(nic); e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex);