be2net: Poll for link status till 5s in ethtool diag test
Subsystems (3)
PATCH 1/1 be2net: Poll for link status till 5s in ethtool diag test
After the loopback test is finished,
it takes a few seconds for link to come back up.
Poll for link status every 1 second interval for 5 seconds, only in cases when the link was UP before PHY loopback test was issued.
--- drivers/net/ethernet/emulex/benet/be_ethtool.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
drivers/net/ethernet/emulex/benet/be_ethtool.c +14 -1
@@ -788,9 +788,11 @@ static u64 be_loopback_test(struct be_adapter *adapter, u8 loopback_type,static void be_self_test (struct net_device *netdev,struct ethtool_test *test,u64 *data) { +#define LINK_READY_TIMEOUT 5struct be_adapter *adapter =netdev_priv (netdev);int status;u8 link_status =0 ; +int timeout =netif_carrier_ok (netdev) ?0 :LINK_READY_TIMEOUT ;if (adapter->function_caps &BE_FUNCTION_CAPS_SUPER_NIC ) {dev_err (&adapter->pdev->dev,"Self test not supported\n" );
@@ -822,7 +824,18 @@ be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data) test->flags |=ETH_TEST_FL_FAILED ; } - status =be_cmd_link_status_query (adapter,NULL , &link_status,0 ); +/* After the loopback test is finished, +* it takes a few seconds for the link to comeback up. +* Poll for 5s before reporting a failure to the link test. +*/ +do { + status =be_cmd_link_status_query (adapter,NULL , + &link_status,0 ); +if (link_status || status || ++timeout >=LINK_READY_TIMEOUT ) +break ; +ssleep (1 ); + }while (true); +if (status) { test->flags |=ETH_TEST_FL_FAILED ; data[4 ] =-1 ;
Signature · 1 line
1.8.3.2
From: Ajit Khaparde <[email protected]>
Date: Mon, 5 May 2014 18:20:14 -0500
Quoted 7 lines
After the loopback test is finished,
it takes a few seconds for link to come back up.
Poll for link status every 1 second interval for 5 seconds, only in cases when the link was UP before PHY loopback test was issued.Signed-off-by Suresh Reddy <[email protected]>Signed-off-by Ajit Khaparde <[email protected]>
This is really anti-social, because the RTNL semaphore is held during this entire call.
You are potentially blocking any and all network configuration setting and fetches for up to 5 seconds.