diff options
author | Florian Fainelli <f.fainelli@gmail.com> | 2014-10-10 13:51:54 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-10 15:39:15 -0400 |
commit | 61b423a8a0bd9aeaa046f9a24bed42e3a953a936 (patch) | |
tree | 755e1ac9da55cb85cdf1af2dbad21379019a1b03 /drivers | |
parent | 083731a8fbe71d83fc908adf137dc98ee352f280 (diff) |
net: systemport: avoid unbalanced enable_irq_wake calls
Multiple enable_irq_wake() calls will keep increasing the IRQ
wake_depth, which ultimately leads to the following types of
situation:
1) enable Wake-on-LAN interrupt w/o password
2) enable Wake-on-LAN interrupt w/ password
3) enable Wake-on-LAN interrupt w/o password
4) disable Wake-on-LAN interrupt
After step 4), SYSTEMPORT would always wake-up the system no matter what
wake-up device we use, which is not what we want. Fix this by making
sure there are no unbalanced enable_irq_wake() calls.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ethernet/broadcom/bcmsysport.c | 3 |
1 files changed, 2 insertions, 1 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); |