Skip to content

Commit

Permalink
be2net: fix to set proper flow control on resume
Browse files Browse the repository at this point in the history
If be2 goes into suspend after a user changes the flow control settings,
we are not programming them back after resume. This patch takes care of it.
We now get the flow control settings before going to suspend mode and
then apply them during resume.

Signed-off-by: Ajit Khaparde <ajitk@serverengines.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ajit Khaparde authored and David S. Miller committed Nov 7, 2009
1 parent bb7b228 commit 9e90c96
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 4 deletions.
2 changes: 2 additions & 0 deletions drivers/net/benet/be.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,8 @@ struct be_adapter {
u32 port_num;
bool promiscuous;
u32 cap;
u32 rx_fc; /* Rx flow control */
u32 tx_fc; /* Tx flow control */
};

extern const struct ethtool_ops be_ethtool_ops;
Expand Down
8 changes: 5 additions & 3 deletions drivers/net/benet/be_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,10 +323,12 @@ be_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *ecmd)

if (ecmd->autoneg != 0)
return -EINVAL;
adapter->tx_fc = ecmd->tx_pause;
adapter->rx_fc = ecmd->rx_pause;

status = be_cmd_set_flow_control(adapter, ecmd->tx_pause,
ecmd->rx_pause);
if (!status)
status = be_cmd_set_flow_control(adapter,
adapter->tx_fc, adapter->rx_fc);
if (status)
dev_warn(&adapter->pdev->dev, "Pause param set failed.\n");

return status;
Expand Down
8 changes: 7 additions & 1 deletion drivers/net/benet/be_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1652,7 +1652,8 @@ static int be_setup(struct be_adapter *adapter)
if (status != 0)
goto mccqs_destroy;

status = be_cmd_set_flow_control(adapter, true, true);
status = be_cmd_set_flow_control(adapter,
adapter->tx_fc, adapter->rx_fc);
if (status != 0)
goto mccqs_destroy;
return 0;
Expand Down Expand Up @@ -1909,6 +1910,10 @@ static void be_netdev_init(struct net_device *netdev)

adapter->rx_csum = true;

/* Default settings for Rx and Tx flow control */
adapter->rx_fc = true;
adapter->tx_fc = true;

netif_set_gso_max_size(netdev, 65535);

BE_SET_NETDEV_OPS(netdev, &be_netdev_ops);
Expand Down Expand Up @@ -2171,6 +2176,7 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t state)
be_close(netdev);
rtnl_unlock();
}
be_cmd_get_flow_control(adapter, &adapter->tx_fc, &adapter->rx_fc);
be_clear(adapter);

pci_save_state(pdev);
Expand Down

0 comments on commit 9e90c96

Please sign in to comment.