Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 255531
b: refs/heads/master
c: ca92429
h: refs/heads/master
i:
  255529: 26344da
  255527: d61252d
v: v3
  • Loading branch information
Dmitry Kravkov authored and David S. Miller committed Jun 15, 2011
1 parent bd59621 commit bb72f09
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 15 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: 93ef5c02a436000d6b90ff59c9d25563000eee7f
refs/heads/master: ca92429f5f52a76eb6e161622d813b8224ce0565
43 changes: 29 additions & 14 deletions trunk/drivers/net/bnx2x/bnx2x_cmn.c
Original file line number Diff line number Diff line change
Expand Up @@ -1097,30 +1097,43 @@ void bnx2x_update_max_mf_config(struct bnx2x *bp, u32 value)
}
}

static void bnx2x_free_msix_irqs(struct bnx2x *bp)
/**
* bnx2x_free_msix_irqs - free previously requested MSI-X IRQ vectors
*
* @bp: driver handle
* @nvecs: number of vectors to be released
*/
static void bnx2x_free_msix_irqs(struct bnx2x *bp, int nvecs)
{
int i, offset = 1;
int i, offset = 0;

free_irq(bp->msix_table[0].vector, bp->dev);
if (nvecs == offset)
return;
free_irq(bp->msix_table[offset].vector, bp->dev);
DP(NETIF_MSG_IFDOWN, "released sp irq (%d)\n",
bp->msix_table[0].vector);

bp->msix_table[offset].vector);
offset++;
#ifdef BCM_CNIC
if (nvecs == offset)
return;
offset++;
#endif

for_each_eth_queue(bp, i) {
DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d irq "
"state %x\n", i, bp->msix_table[i + offset].vector,
bnx2x_fp(bp, i, state));
if (nvecs == offset)
return;
DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d "
"irq\n", i, bp->msix_table[offset].vector);

free_irq(bp->msix_table[i + offset].vector, &bp->fp[i]);
free_irq(bp->msix_table[offset++].vector, &bp->fp[i]);
}
}

void bnx2x_free_irq(struct bnx2x *bp)
{
if (bp->flags & USING_MSIX_FLAG)
bnx2x_free_msix_irqs(bp);
bnx2x_free_msix_irqs(bp, BNX2X_NUM_ETH_QUEUES(bp) +
CNIC_CONTEXT_USE + 1);
else if (bp->flags & USING_MSI_FLAG)
free_irq(bp->pdev->irq, bp->dev);
else
Expand Down Expand Up @@ -1193,9 +1206,10 @@ int bnx2x_enable_msix(struct bnx2x *bp)

static int bnx2x_req_msix_irqs(struct bnx2x *bp)
{
int i, rc, offset = 1;
int i, rc, offset = 0;

rc = request_irq(bp->msix_table[0].vector, bnx2x_msix_sp_int, 0,
rc = request_irq(bp->msix_table[offset++].vector,
bnx2x_msix_sp_int, 0,
bp->dev->name, bp->dev);
if (rc) {
BNX2X_ERR("request sp irq failed\n");
Expand All @@ -1213,8 +1227,9 @@ static int bnx2x_req_msix_irqs(struct bnx2x *bp)
rc = request_irq(bp->msix_table[offset].vector,
bnx2x_msix_fp_int, 0, fp->name, fp);
if (rc) {
BNX2X_ERR("request fp #%d irq failed rc %d\n", i, rc);
bnx2x_free_msix_irqs(bp);
BNX2X_ERR("request fp #%d irq (%d) failed rc %d\n", i,
bp->msix_table[offset].vector, rc);
bnx2x_free_msix_irqs(bp, offset);
return -EBUSY;
}

Expand Down

0 comments on commit bb72f09

Please sign in to comment.