]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
igc: Limit netdev_tc calls to MQPRIO
authorKurt Kanzenbach <kurt@linutronix.de>
Fri, 21 Mar 2025 13:52:38 +0000 (14:52 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Tue, 29 Apr 2025 22:13:43 +0000 (15:13 -0700)
Limit netdev_tc calls to MQPRIO. Currently these calls are made in
igc_tsn_enable_offload() and igc_tsn_disable_offload() which are used by
TAPRIO and ETF as well. However, these are only required for MQPRIO.

Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Mor Bar-Gabay <morx.bar.gabay@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/igc/igc_tsn.c

index 5b06765a35e9a20e01f82002bb64440ce2390a20..27575a1e1777fae67348499acdc36b8227e742cc 100644 (file)
@@ -6730,13 +6730,14 @@ static int igc_tsn_enable_mqprio(struct igc_adapter *adapter,
                                 struct tc_mqprio_qopt_offload *mqprio)
 {
        struct igc_hw *hw = &adapter->hw;
-       int i;
+       int err, i;
 
        if (hw->mac.type != igc_i225)
                return -EOPNOTSUPP;
 
        if (!mqprio->qopt.num_tc) {
                adapter->strict_priority_enable = false;
+               netdev_reset_tc(adapter->netdev);
                goto apply;
        }
 
@@ -6767,6 +6768,21 @@ static int igc_tsn_enable_mqprio(struct igc_adapter *adapter,
        igc_save_mqprio_params(adapter, mqprio->qopt.num_tc,
                               mqprio->qopt.offset);
 
+       err = netdev_set_num_tc(adapter->netdev, adapter->num_tc);
+       if (err)
+               return err;
+
+       for (i = 0; i < adapter->num_tc; i++) {
+               err = netdev_set_tc_queue(adapter->netdev, i, 1,
+                                         adapter->queue_per_tc[i]);
+               if (err)
+                       return err;
+       }
+
+       /* In case the card is configured with less than four queues. */
+       for (; i < IGC_MAX_TX_QUEUES; i++)
+               adapter->queue_per_tc[i] = i;
+
        mqprio->qopt.hw = TC_MQPRIO_HW_OFFLOAD_TCS;
 
 apply:
index b23bf0be007ded4e6864ec11ab796017d94e0d26..cbc49cdcaf6b6194c7dcc2f1d29a3ac627ded9dd 100644 (file)
@@ -320,9 +320,6 @@ static int igc_tsn_disable_offload(struct igc_adapter *adapter)
        wr32(IGC_QBVCYCLET_S, 0);
        wr32(IGC_QBVCYCLET, NSEC_PER_SEC);
 
-       /* Reset mqprio TC configuration. */
-       netdev_reset_tc(adapter->netdev);
-
        /* Restore the default Tx arbitration: Priority 0 has the highest
         * priority and is assigned to queue 0 and so on and so forth.
         */
@@ -394,23 +391,6 @@ static int igc_tsn_enable_offload(struct igc_adapter *adapter)
                igc_tsn_set_retx_qbvfullthreshold(adapter);
 
        if (adapter->strict_priority_enable) {
-               int err;
-
-               err = netdev_set_num_tc(adapter->netdev, adapter->num_tc);
-               if (err)
-                       return err;
-
-               for (i = 0; i < adapter->num_tc; i++) {
-                       err = netdev_set_tc_queue(adapter->netdev, i, 1,
-                                                 adapter->queue_per_tc[i]);
-                       if (err)
-                               return err;
-               }
-
-               /* In case the card is configured with less than four queues. */
-               for (; i < IGC_MAX_TX_QUEUES; i++)
-                       adapter->queue_per_tc[i] = i;
-
                /* Configure queue priorities according to the user provided
                 * mapping.
                 */