OSDN Git Service

i40e: check for netdev before debugfs use
authorShannon Nelson <shannon.nelson@intel.com>
Thu, 6 Mar 2014 09:00:02 +0000 (09:00 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 28 Mar 2014 13:54:00 +0000 (06:54 -0700)
Make sure the VSI has a netdev before trying to use it
in the debugfs netdev_ops commands.

Change-ID: I2d744fc0c32b3226534ce2cde171d9675c5440a6
Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
Signed-off-by: Catherine Sullivan <catherine.sullivan@intel.com>
Tested-by: Kavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_debugfs.c

index afd43d7..3c37386 100644 (file)
@@ -2087,9 +2087,13 @@ static ssize_t i40e_dbg_netdev_ops_write(struct file *filp,
                if (!vsi) {
                        dev_info(&pf->pdev->dev,
                                 "tx_timeout: VSI %d not found\n", vsi_seid);
-                       goto netdev_ops_write_done;
-               }
-               if (rtnl_trylock()) {
+               } else if (!vsi->netdev) {
+                       dev_info(&pf->pdev->dev, "tx_timeout: no netdev for VSI %d\n",
+                                vsi_seid);
+               } else if (test_bit(__I40E_DOWN, &vsi->state)) {
+                       dev_info(&pf->pdev->dev, "tx_timeout: VSI %d not UP\n",
+                                vsi_seid);
+               } else if (rtnl_trylock()) {
                        vsi->netdev->netdev_ops->ndo_tx_timeout(vsi->netdev);
                        rtnl_unlock();
                        dev_info(&pf->pdev->dev, "tx_timeout called\n");
@@ -2108,9 +2112,10 @@ static ssize_t i40e_dbg_netdev_ops_write(struct file *filp,
                if (!vsi) {
                        dev_info(&pf->pdev->dev,
                                 "change_mtu: VSI %d not found\n", vsi_seid);
-                       goto netdev_ops_write_done;
-               }
-               if (rtnl_trylock()) {
+               } else if (!vsi->netdev) {
+                       dev_info(&pf->pdev->dev, "change_mtu: no netdev for VSI %d\n",
+                                vsi_seid);
+               } else if (rtnl_trylock()) {
                        vsi->netdev->netdev_ops->ndo_change_mtu(vsi->netdev,
                                                                mtu);
                        rtnl_unlock();
@@ -2129,9 +2134,10 @@ static ssize_t i40e_dbg_netdev_ops_write(struct file *filp,
                if (!vsi) {
                        dev_info(&pf->pdev->dev,
                                 "set_rx_mode: VSI %d not found\n", vsi_seid);
-                       goto netdev_ops_write_done;
-               }
-               if (rtnl_trylock()) {
+               } else if (!vsi->netdev) {
+                       dev_info(&pf->pdev->dev, "set_rx_mode: no netdev for VSI %d\n",
+                                vsi_seid);
+               } else if (rtnl_trylock()) {
                        vsi->netdev->netdev_ops->ndo_set_rx_mode(vsi->netdev);
                        rtnl_unlock();
                        dev_info(&pf->pdev->dev, "set_rx_mode called\n");
@@ -2149,11 +2155,14 @@ static ssize_t i40e_dbg_netdev_ops_write(struct file *filp,
                if (!vsi) {
                        dev_info(&pf->pdev->dev, "napi: VSI %d not found\n",
                                 vsi_seid);
-                       goto netdev_ops_write_done;
+               } else if (!vsi->netdev) {
+                       dev_info(&pf->pdev->dev, "napi: no netdev for VSI %d\n",
+                                vsi_seid);
+               } else {
+                       for (i = 0; i < vsi->num_q_vectors; i++)
+                               napi_schedule(&vsi->q_vectors[i]->napi);
+                       dev_info(&pf->pdev->dev, "napi called\n");
                }
-               for (i = 0; i < vsi->num_q_vectors; i++)
-                       napi_schedule(&vsi->q_vectors[i]->napi);
-               dev_info(&pf->pdev->dev, "napi called\n");
        } else {
                dev_info(&pf->pdev->dev, "unknown command '%s'\n",
                         i40e_dbg_netdev_ops_buf);