i40e: Disable iWARP VSI PETCP_ENA flag on netdev down events
[linux-2.6-microblaze.git] / drivers / net / ethernet / intel / i40e / i40e_client.c
index 1b1e2ac..0de9610 100644 (file)
@@ -378,11 +378,11 @@ void i40e_client_subtask(struct i40e_pf *pf)
        if (!client || !cdev)
                return;
 
-       /* Here we handle client opens. If the client is down, but
-        * the netdev is up, then open the client.
+       /* Here we handle client opens. If the client is down, and
+        * the netdev is registered, then open the client.
         */
        if (!test_bit(__I40E_CLIENT_INSTANCE_OPENED, &cdev->state)) {
-               if (!test_bit(__I40E_VSI_DOWN, vsi->state) &&
+               if (vsi->netdev_registered &&
                    client->ops && client->ops->open) {
                        set_bit(__I40E_CLIENT_INSTANCE_OPENED, &cdev->state);
                        ret = client->ops->open(&cdev->lan_info, client);
@@ -393,17 +393,19 @@ void i40e_client_subtask(struct i40e_pf *pf)
                                i40e_client_del_instance(pf);
                        }
                }
-       } else {
-       /* Likewise for client close. If the client is up, but the netdev
-        * is down, then close the client.
-        */
-               if (test_bit(__I40E_VSI_DOWN, vsi->state) &&
-                   client->ops && client->ops->close) {
-                       clear_bit(__I40E_CLIENT_INSTANCE_OPENED, &cdev->state);
-                       client->ops->close(&cdev->lan_info, client, false);
-                       i40e_client_release_qvlist(&cdev->lan_info);
-               }
        }
+
+       /* enable/disable PE TCP_ENA flag based on netdev down/up
+        */
+       if (test_bit(__I40E_VSI_DOWN, vsi->state))
+               i40e_client_update_vsi_ctxt(&cdev->lan_info, client,
+                                           0, 0, 0,
+                                           I40E_CLIENT_VSI_FLAG_TCP_ENABLE);
+       else
+               i40e_client_update_vsi_ctxt(&cdev->lan_info, client,
+                                           0, 0,
+                                           I40E_CLIENT_VSI_FLAG_TCP_ENABLE,
+                                           I40E_CLIENT_VSI_FLAG_TCP_ENABLE);
 }
 
 /**
@@ -717,13 +719,13 @@ static int i40e_client_update_vsi_ctxt(struct i40e_info *ldev,
                return -ENOENT;
        }
 
-       if ((valid_flag & I40E_CLIENT_VSI_FLAG_TCP_PACKET_ENABLE) &&
-           (flag & I40E_CLIENT_VSI_FLAG_TCP_PACKET_ENABLE)) {
+       if ((valid_flag & I40E_CLIENT_VSI_FLAG_TCP_ENABLE) &&
+           (flag & I40E_CLIENT_VSI_FLAG_TCP_ENABLE)) {
                ctxt.info.valid_sections =
                        cpu_to_le16(I40E_AQ_VSI_PROP_QUEUE_OPT_VALID);
                ctxt.info.queueing_opt_flags |= I40E_AQ_VSI_QUE_OPT_TCP_ENA;
-       } else if ((valid_flag & I40E_CLIENT_VSI_FLAG_TCP_PACKET_ENABLE) &&
-                 !(flag & I40E_CLIENT_VSI_FLAG_TCP_PACKET_ENABLE)) {
+       } else if ((valid_flag & I40E_CLIENT_VSI_FLAG_TCP_ENABLE) &&
+                 !(flag & I40E_CLIENT_VSI_FLAG_TCP_ENABLE)) {
                ctxt.info.valid_sections =
                        cpu_to_le16(I40E_AQ_VSI_PROP_QUEUE_OPT_VALID);
                ctxt.info.queueing_opt_flags &= ~I40E_AQ_VSI_QUE_OPT_TCP_ENA;