diff options
| author | David S. Miller <davem@davemloft.net> | 2014-10-10 15:39:22 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-10-10 15:39:22 -0400 |
| commit | 01d2d484e49e9bc0ed9b5fdaf345a0e2bf35ffed (patch) | |
| tree | 755e1ac9da55cb85cdf1af2dbad21379019a1b03 | |
| parent | 35b7a1915aa33da812074744647db0d9262a555c (diff) | |
| parent | 61b423a8a0bd9aeaa046f9a24bed42e3a953a936 (diff) | |
Merge branch 'bcmgenet_systemport'
Florian Fainelli says:
====================
net: bcmgenet & systemport fixes
This patch series fixes an off-by-one error introduced during a previous
change, and the two other fixes fix a wake depth imbalance situation for
the Wake-on-LAN interrupt line.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/broadcom/bcmsysport.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/genet/bcmgenet.c | 9 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | 4 |
3 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c index 075688188644..9ae36979bdee 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c | |||
| @@ -436,7 +436,8 @@ static int bcm_sysport_set_wol(struct net_device *dev, | |||
| 436 | /* Flag the device and relevant IRQ as wakeup capable */ | 436 | /* Flag the device and relevant IRQ as wakeup capable */ |
| 437 | if (wol->wolopts) { | 437 | if (wol->wolopts) { |
| 438 | device_set_wakeup_enable(kdev, 1); | 438 | device_set_wakeup_enable(kdev, 1); |
| 439 | enable_irq_wake(priv->wol_irq); | 439 | if (priv->wol_irq_disabled) |
| 440 | enable_irq_wake(priv->wol_irq); | ||
| 440 | priv->wol_irq_disabled = 0; | 441 | priv->wol_irq_disabled = 0; |
| 441 | } else { | 442 | } else { |
| 442 | device_set_wakeup_enable(kdev, 0); | 443 | device_set_wakeup_enable(kdev, 0); |
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index fff2634b6f34..fdc9ec09e453 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c | |||
| @@ -1285,11 +1285,6 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_priv *priv, | |||
| 1285 | cb = &priv->rx_cbs[priv->rx_read_ptr]; | 1285 | cb = &priv->rx_cbs[priv->rx_read_ptr]; |
| 1286 | skb = cb->skb; | 1286 | skb = cb->skb; |
| 1287 | 1287 | ||
| 1288 | rxpktprocessed++; | ||
| 1289 | |||
| 1290 | priv->rx_read_ptr++; | ||
| 1291 | priv->rx_read_ptr &= (priv->num_rx_bds - 1); | ||
| 1292 | |||
| 1293 | /* We do not have a backing SKB, so we do not have a | 1288 | /* We do not have a backing SKB, so we do not have a |
| 1294 | * corresponding DMA mapping for this incoming packet since | 1289 | * corresponding DMA mapping for this incoming packet since |
| 1295 | * bcmgenet_rx_refill always either has both skb and mapping or | 1290 | * bcmgenet_rx_refill always either has both skb and mapping or |
| @@ -1404,6 +1399,10 @@ refill: | |||
| 1404 | err = bcmgenet_rx_refill(priv, cb); | 1399 | err = bcmgenet_rx_refill(priv, cb); |
| 1405 | if (err) | 1400 | if (err) |
| 1406 | netif_err(priv, rx_err, dev, "Rx refill failed\n"); | 1401 | netif_err(priv, rx_err, dev, "Rx refill failed\n"); |
| 1402 | |||
| 1403 | rxpktprocessed++; | ||
| 1404 | priv->rx_read_ptr++; | ||
| 1405 | priv->rx_read_ptr &= (priv->num_rx_bds - 1); | ||
| 1407 | } | 1406 | } |
| 1408 | 1407 | ||
| 1409 | return rxpktprocessed; | 1408 | return rxpktprocessed; |
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c b/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c index b82b7e4e06b2..149a0d70c108 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c | |||
| @@ -86,7 +86,9 @@ int bcmgenet_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
| 86 | /* Flag the device and relevant IRQ as wakeup capable */ | 86 | /* Flag the device and relevant IRQ as wakeup capable */ |
| 87 | if (wol->wolopts) { | 87 | if (wol->wolopts) { |
| 88 | device_set_wakeup_enable(kdev, 1); | 88 | device_set_wakeup_enable(kdev, 1); |
| 89 | enable_irq_wake(priv->wol_irq); | 89 | /* Avoid unbalanced enable_irq_wake calls */ |
| 90 | if (priv->wol_irq_disabled) | ||
| 91 | enable_irq_wake(priv->wol_irq); | ||
| 90 | priv->wol_irq_disabled = false; | 92 | priv->wol_irq_disabled = false; |
| 91 | } else { | 93 | } else { |
| 92 | device_set_wakeup_enable(kdev, 0); | 94 | device_set_wakeup_enable(kdev, 0); |
