Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 194591
b: refs/heads/master
c: 41b7e4c
h: refs/heads/master
i:
  194589: 349d23b
  194587: 7812ef7
  194583: d6d2492
  194575: 2e53a2a
  194559: d61d5ef
v: v3
  • Loading branch information
Steve Hodgson authored and David S. Miller committed Apr 28, 2010
1 parent 5228f8f commit f29f78f
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b7b40eeb0f76e73503a7e5a98d1353c2e42d9a18
refs/heads/master: 41b7e4c3268d9d2056b9c94cceb386649f7b185b
23 changes: 9 additions & 14 deletions trunk/drivers/net/sfc/nic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1356,33 +1356,28 @@ static irqreturn_t efx_legacy_interrupt(int irq, void *dev_id)
}
result = IRQ_HANDLED;

} else if (EFX_WORKAROUND_15783(efx) &&
efx->irq_zero_count++ == 0) {
} else if (EFX_WORKAROUND_15783(efx)) {
efx_qword_t *event;

/* Ensure we rearm all event queues */
/* We can't return IRQ_HANDLED more than once on seeing ISR=0
* because this might be a shared interrupt. */
if (efx->irq_zero_count++ == 0)
result = IRQ_HANDLED;

/* Ensure we schedule or rearm all event queues */
efx_for_each_channel(channel, efx) {
event = efx_event(channel, channel->eventq_read_ptr);
if (efx_event_present(event))
efx_schedule_channel(channel);
else
efx_nic_eventq_read_ack(channel);
}

result = IRQ_HANDLED;
}

if (result == IRQ_HANDLED) {
efx->last_irq_cpu = raw_smp_processor_id();
EFX_TRACE(efx, "IRQ %d on CPU %d status " EFX_DWORD_FMT "\n",
irq, raw_smp_processor_id(), EFX_DWORD_VAL(reg));
} else if (EFX_WORKAROUND_15783(efx)) {
/* We can't return IRQ_HANDLED more than once on seeing ISR0=0
* because this might be a shared interrupt, but we do need to
* check the channel every time and preemptively rearm it if
* it's idle. */
efx_for_each_channel(channel, efx) {
if (!channel->work_pending)
efx_nic_eventq_read_ack(channel);
}
}

return result;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/net/sfc/workarounds.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
/* Truncated IPv4 packets can confuse the TX packet parser */
#define EFX_WORKAROUND_15592 EFX_WORKAROUND_FALCON_AB
/* Legacy ISR read can return zero once */
#define EFX_WORKAROUND_15783 EFX_WORKAROUND_SIENA
#define EFX_WORKAROUND_15783 EFX_WORKAROUND_ALWAYS
/* Legacy interrupt storm when interrupt fifo fills */
#define EFX_WORKAROUND_17213 EFX_WORKAROUND_SIENA

Expand Down

0 comments on commit f29f78f

Please sign in to comment.