| From foo@baz Thu Feb 27 20:11:26 PST 2014 |
| From: Nithin Sujir <nsujir@broadcom.com> |
| Date: Thu, 6 Feb 2014 14:13:05 -0800 |
| Subject: tg3: Fix deadlock in tg3_change_mtu() |
| |
| From: Nithin Sujir <nsujir@broadcom.com> |
| |
| [ Upstream commit c6993dfd7db9b0c6b7ca7503a56fda9236a4710f ] |
| |
| Quoting David Vrabel - |
| "5780 cards cannot have jumbo frames and TSO enabled together. When |
| jumbo frames are enabled by setting the MTU, the TSO feature must be |
| cleared. This is done indirectly by calling netdev_update_features() |
| which will call tg3_fix_features() to actually clear the flags. |
| |
| netdev_update_features() will also trigger a new netlink message for the |
| feature change event which will result in a call to tg3_get_stats64() |
| which deadlocks on the tg3 lock." |
| |
| tg3_set_mtu() does not need to be under the tg3 lock since converting |
| the flags to use set_bit(). Move it out to after tg3_netif_stop(). |
| |
| Reported-by: David Vrabel <david.vrabel@citrix.com> |
| Tested-by: David Vrabel <david.vrabel@citrix.com> |
| Signed-off-by: Michael Chan <mchan@broadcom.com> |
| Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/broadcom/tg3.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/ethernet/broadcom/tg3.c |
| +++ b/drivers/net/ethernet/broadcom/tg3.c |
| @@ -13965,12 +13965,12 @@ static int tg3_change_mtu(struct net_dev |
| |
| tg3_netif_stop(tp); |
| |
| + tg3_set_mtu(dev, tp, new_mtu); |
| + |
| tg3_full_lock(tp, 1); |
| |
| tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); |
| |
| - tg3_set_mtu(dev, tp, new_mtu); |
| - |
| /* Reset PHY, otherwise the read DMA engine will be in a mode that |
| * breaks all requests to 256 bytes. |
| */ |