sfc: lower stack usage in efx_ethtool_self_test
drivers/net/sfc/ethtool.c: In function ‘efx_ethtool_self_test’: drivers/net/sfc/ethtool.c:613: warning: the frame size of 1200 bytes is larger than 1024 bytes Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Acked-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
fe29ec41aa
commit
28801f351f
@@ -569,9 +569,14 @@ static void efx_ethtool_self_test(struct net_device *net_dev,
|
|||||||
struct ethtool_test *test, u64 *data)
|
struct ethtool_test *test, u64 *data)
|
||||||
{
|
{
|
||||||
struct efx_nic *efx = netdev_priv(net_dev);
|
struct efx_nic *efx = netdev_priv(net_dev);
|
||||||
struct efx_self_tests efx_tests;
|
struct efx_self_tests *efx_tests;
|
||||||
int already_up;
|
int already_up;
|
||||||
int rc;
|
int rc = -ENOMEM;
|
||||||
|
|
||||||
|
efx_tests = kzalloc(sizeof(*efx_tests), GFP_KERNEL);
|
||||||
|
if (!efx_tests)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
if (efx->state != STATE_RUNNING) {
|
if (efx->state != STATE_RUNNING) {
|
||||||
@@ -589,13 +594,11 @@ static void efx_ethtool_self_test(struct net_device *net_dev,
|
|||||||
if (rc) {
|
if (rc) {
|
||||||
netif_err(efx, drv, efx->net_dev,
|
netif_err(efx, drv, efx->net_dev,
|
||||||
"failed opening device.\n");
|
"failed opening device.\n");
|
||||||
goto fail2;
|
goto fail1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&efx_tests, 0, sizeof(efx_tests));
|
rc = efx_selftest(efx, efx_tests, test->flags);
|
||||||
|
|
||||||
rc = efx_selftest(efx, &efx_tests, test->flags);
|
|
||||||
|
|
||||||
if (!already_up)
|
if (!already_up)
|
||||||
dev_close(efx->net_dev);
|
dev_close(efx->net_dev);
|
||||||
@@ -604,10 +607,11 @@ static void efx_ethtool_self_test(struct net_device *net_dev,
|
|||||||
rc == 0 ? "passed" : "failed",
|
rc == 0 ? "passed" : "failed",
|
||||||
(test->flags & ETH_TEST_FL_OFFLINE) ? "off" : "on");
|
(test->flags & ETH_TEST_FL_OFFLINE) ? "off" : "on");
|
||||||
|
|
||||||
fail2:
|
|
||||||
fail1:
|
fail1:
|
||||||
/* Fill ethtool results structures */
|
/* Fill ethtool results structures */
|
||||||
efx_ethtool_fill_self_tests(efx, &efx_tests, NULL, data);
|
efx_ethtool_fill_self_tests(efx, efx_tests, NULL, data);
|
||||||
|
kfree(efx_tests);
|
||||||
|
fail:
|
||||||
if (rc)
|
if (rc)
|
||||||
test->flags |= ETH_TEST_FL_FAILED;
|
test->flags |= ETH_TEST_FL_FAILED;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user