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 <k...@linutronix.de>
---
 drivers/net/ethernet/intel/igc/igc_main.c | 18 +++++++++++++++++-
 drivers/net/ethernet/intel/igc/igc_tsn.c  | 20 --------------------
 2 files changed, 17 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_main.c 
b/drivers/net/ethernet/intel/igc/igc_main.c
index 
472f009630c98e60c7166ceb8d05cb094f6c837b..240b6075197fb1e61077a736ddf8f9e67c1ed5cd
 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -6679,13 +6679,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;
        }
 
@@ -6716,6 +6717,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:
diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c 
b/drivers/net/ethernet/intel/igc/igc_tsn.c
index 
1e44374ca1ffbb86e9893266c590f318984ef574..67632356083708f82a099141a4b68ba10e06f952
 100644
--- a/drivers/net/ethernet/intel/igc/igc_tsn.c
+++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
@@ -157,9 +157,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.
         */
@@ -206,23 +203,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.
                 */

-- 
2.39.5

Reply via email to