Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/smc911x.c
This commit is contained in:
@@ -3277,6 +3277,20 @@ static void nv_link_irq(struct net_device *dev)
|
||||
dprintk(KERN_DEBUG "%s: link change notification done.\n", dev->name);
|
||||
}
|
||||
|
||||
static void nv_msi_workaround(struct fe_priv *np)
|
||||
{
|
||||
|
||||
/* Need to toggle the msi irq mask within the ethernet device,
|
||||
* otherwise, future interrupts will not be detected.
|
||||
*/
|
||||
if (np->msi_flags & NV_MSI_ENABLED) {
|
||||
u8 __iomem *base = np->base;
|
||||
|
||||
writel(0, base + NvRegMSIIrqMask);
|
||||
writel(NVREG_MSI_VECTOR_0_ENABLED, base + NvRegMSIIrqMask);
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t nv_nic_irq(int foo, void *data)
|
||||
{
|
||||
struct net_device *dev = (struct net_device *) data;
|
||||
@@ -3299,6 +3313,8 @@ static irqreturn_t nv_nic_irq(int foo, void *data)
|
||||
if (!(events & np->irqmask))
|
||||
break;
|
||||
|
||||
nv_msi_workaround(np);
|
||||
|
||||
spin_lock(&np->lock);
|
||||
nv_tx_done(dev);
|
||||
spin_unlock(&np->lock);
|
||||
@@ -3414,6 +3430,8 @@ static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
|
||||
if (!(events & np->irqmask))
|
||||
break;
|
||||
|
||||
nv_msi_workaround(np);
|
||||
|
||||
spin_lock(&np->lock);
|
||||
nv_tx_done_optimized(dev, TX_WORK_PER_LOOP);
|
||||
spin_unlock(&np->lock);
|
||||
@@ -3754,6 +3772,8 @@ static irqreturn_t nv_nic_irq_test(int foo, void *data)
|
||||
if (!(events & NVREG_IRQ_TIMER))
|
||||
return IRQ_RETVAL(0);
|
||||
|
||||
nv_msi_workaround(np);
|
||||
|
||||
spin_lock(&np->lock);
|
||||
np->intr_test = 1;
|
||||
spin_unlock(&np->lock);
|
||||
|
Reference in New Issue
Block a user