Patch "igc: Fix double reset adapter triggered from a single taprio cmd" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    igc: Fix double reset adapter triggered from a single taprio cmd

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     igc-fix-double-reset-adapter-triggered-from-a-single.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4a40687fa395dbe2c912f4e7d8c3e373dda7a70b
Author: Faizal Rahim <faizal.abdul.rahim@xxxxxxxxxxxxxxx>
Date:   Tue Jul 30 10:33:02 2024 -0700

    igc: Fix double reset adapter triggered from a single taprio cmd
    
    [ Upstream commit b9e7fc0aeda79031a101610b2fcb12bf031056e9 ]
    
    Following the implementation of "igc: Add TransmissionOverrun counter"
    patch, when a taprio command is triggered by user, igc processes two
    commands: TAPRIO_CMD_REPLACE followed by TAPRIO_CMD_STATS. However, both
    commands unconditionally pass through igc_tsn_offload_apply() which
    evaluates and triggers reset adapter. The double reset causes issues in
    the calculation of adapter->qbv_count in igc.
    
    TAPRIO_CMD_REPLACE command is expected to reset the adapter since it
    activates qbv. It's unexpected for TAPRIO_CMD_STATS to do the same
    because it doesn't configure any driver-specific TSN settings. So, the
    evaluation in igc_tsn_offload_apply() isn't needed for TAPRIO_CMD_STATS.
    
    To address this, commands parsing are relocated to
    igc_tsn_enable_qbv_scheduling(). Commands that don't require an adapter
    reset will exit after processing, thus avoiding igc_tsn_offload_apply().
    
    Fixes: d3750076d464 ("igc: Add TransmissionOverrun counter")
    Signed-off-by: Faizal Rahim <faizal.abdul.rahim@xxxxxxxxxxxxxxx>
    Acked-by: Vinicius Costa Gomes <vinicius.gomes@xxxxxxxxx>
    Reviewed-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Tested-by: Mor Bar-Gabay <morx.bar.gabay@xxxxxxxxx>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
    Link: https://patch.msgid.link/20240730173304.865479-1-anthony.l.nguyen@xxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index e83700ad7e622..d80bbcdeb93ed 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -6208,21 +6208,6 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,
 	size_t n;
 	int i;
 
-	switch (qopt->cmd) {
-	case TAPRIO_CMD_REPLACE:
-		break;
-	case TAPRIO_CMD_DESTROY:
-		return igc_tsn_clear_schedule(adapter);
-	case TAPRIO_CMD_STATS:
-		igc_taprio_stats(adapter->netdev, &qopt->stats);
-		return 0;
-	case TAPRIO_CMD_QUEUE_STATS:
-		igc_taprio_queue_stats(adapter->netdev, &qopt->queue_stats);
-		return 0;
-	default:
-		return -EOPNOTSUPP;
-	}
-
 	if (qopt->base_time < 0)
 		return -ERANGE;
 
@@ -6331,7 +6316,23 @@ static int igc_tsn_enable_qbv_scheduling(struct igc_adapter *adapter,
 	if (hw->mac.type != igc_i225)
 		return -EOPNOTSUPP;
 
-	err = igc_save_qbv_schedule(adapter, qopt);
+	switch (qopt->cmd) {
+	case TAPRIO_CMD_REPLACE:
+		err = igc_save_qbv_schedule(adapter, qopt);
+		break;
+	case TAPRIO_CMD_DESTROY:
+		err = igc_tsn_clear_schedule(adapter);
+		break;
+	case TAPRIO_CMD_STATS:
+		igc_taprio_stats(adapter->netdev, &qopt->stats);
+		return 0;
+	case TAPRIO_CMD_QUEUE_STATS:
+		igc_taprio_queue_stats(adapter->netdev, &qopt->queue_stats);
+		return 0;
+	default:
+		return -EOPNOTSUPP;
+	}
+
 	if (err)
 		return err;
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux