struct ethtool_test *eth_test, u64 *data)
 {
        struct i40e_netdev_priv *np = netdev_priv(netdev);
+       bool if_running = netif_running(netdev);
        struct i40e_pf *pf = np->vsi->back;
 
        if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
                netif_info(pf, drv, netdev, "offline testing starting\n");
 
                set_bit(__I40E_TESTING, &pf->state);
+               /* If the device is online then take it offline */
+               if (if_running)
+                       /* indicate we're in test mode */
+                       dev_close(netdev);
+               else
+                       i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED));
 
                /* Link test performed before hardware reset
                 * so autoneg doesn't interfere with test result
 
                clear_bit(__I40E_TESTING, &pf->state);
                i40e_do_reset(pf, (1 << __I40E_PF_RESET_REQUESTED));
+
+               if (if_running)
+                       dev_open(netdev);
        } else {
                /* Online tests */
                netif_info(pf, drv, netdev, "online testing starting\n");