Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue
[platform/kernel/linux-rpi.git] / drivers / net / ethernet / intel / i40e / i40e_ethtool.c
index a8a2b5f..c70dec6 100644 (file)
@@ -5083,7 +5083,7 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)
        enum i40e_admin_queue_err adq_err;
        struct i40e_vsi *vsi = np->vsi;
        struct i40e_pf *pf = vsi->back;
-       bool is_reset_needed;
+       u32 reset_needed = 0;
        i40e_status status;
        u32 i, j;
 
@@ -5128,9 +5128,11 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)
 flags_complete:
        changed_flags = orig_flags ^ new_flags;
 
-       is_reset_needed = !!(changed_flags & (I40E_FLAG_VEB_STATS_ENABLED |
-               I40E_FLAG_LEGACY_RX | I40E_FLAG_SOURCE_PRUNING_DISABLED |
-               I40E_FLAG_DISABLE_FW_LLDP));
+       if (changed_flags & I40E_FLAG_DISABLE_FW_LLDP)
+               reset_needed = I40E_PF_RESET_AND_REBUILD_FLAG;
+       if (changed_flags & (I40E_FLAG_VEB_STATS_ENABLED |
+           I40E_FLAG_LEGACY_RX | I40E_FLAG_SOURCE_PRUNING_DISABLED))
+               reset_needed = BIT(__I40E_PF_RESET_REQUESTED);
 
        /* Before we finalize any flag changes, we need to perform some
         * checks to ensure that the changes are supported and safe.
@@ -5252,7 +5254,7 @@ flags_complete:
                                case I40E_AQ_RC_EEXIST:
                                        dev_warn(&pf->pdev->dev,
                                                 "FW LLDP agent is already running\n");
-                                       is_reset_needed = false;
+                                       reset_needed = 0;
                                        break;
                                case I40E_AQ_RC_EPERM:
                                        dev_warn(&pf->pdev->dev,
@@ -5281,8 +5283,8 @@ flags_complete:
        /* Issue reset to cause things to take effect, as additional bits
         * are added we will need to create a mask of bits requiring reset
         */
-       if (is_reset_needed)
-               i40e_do_reset(pf, BIT(__I40E_PF_RESET_REQUESTED), true);
+       if (reset_needed)
+               i40e_do_reset(pf, reset_needed, true);
 
        return 0;
 }