From: Greg Kroah-Hartman Date: Sun, 1 Sep 2024 09:39:15 +0000 (+0200) Subject: 6.1-stable patches X-Git-Tag: v4.19.321~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9dc408a6f388581c485a0f19fb7cad699125dac4;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches added patches: igc-fix-qbv-tx-latency-by-setting-gtxoffset.patch igc-fix-reset-adapter-logics-when-tx-mode-change.patch --- diff --git a/queue-6.1/igc-fix-qbv-tx-latency-by-setting-gtxoffset.patch b/queue-6.1/igc-fix-qbv-tx-latency-by-setting-gtxoffset.patch new file mode 100644 index 00000000000..a258d95eefe --- /dev/null +++ b/queue-6.1/igc-fix-qbv-tx-latency-by-setting-gtxoffset.patch @@ -0,0 +1,90 @@ +From 6c3fc0b1c3d073bd6fc3bf43dbd0e64240537464 Mon Sep 17 00:00:00 2001 +From: Faizal Rahim +Date: Sun, 7 Jul 2024 08:53:18 -0400 +Subject: igc: Fix qbv tx latency by setting gtxoffset + +From: Faizal Rahim + +commit 6c3fc0b1c3d073bd6fc3bf43dbd0e64240537464 upstream. + +A large tx latency issue was discovered during testing when only QBV was +enabled. The issue occurs because gtxoffset was not set when QBV is +active, it was only set when launch time is active. + +The patch "igc: Correct the launchtime offset" only sets gtxoffset when +the launchtime_enable field is set by the user. Enabling launchtime_enable +ultimately sets the register IGC_TXQCTL_QUEUE_MODE_LAUNCHT (referred to as +LaunchT in the SW user manual). + +Section 7.5.2.6 of the IGC i225/6 SW User Manual Rev 1.2.4 states: +"The latency between transmission scheduling (launch time) and the +time the packet is transmitted to the network is listed in Table 7-61." + +However, the patch misinterprets the phrase "launch time" in that section +by assuming it specifically refers to the LaunchT register, whereas it +actually denotes the generic term for when a packet is released from the +internal buffer to the MAC transmit logic. + +This launch time, as per that section, also implicitly refers to the QBV +gate open time, where a packet waits in the buffer for the QBV gate to +open. Therefore, latency applies whenever QBV is in use. TSN features such +as QBU and QAV reuse QBV, making the latency universal to TSN features. + +Discussed with i226 HW owner (Shalev, Avi) and we were in agreement that +the term "launch time" used in Section 7.5.2.6 is not clear and can be +easily misinterpreted. Avi will update this section to: +"When TQAVCTRL.TRANSMIT_MODE = TSN, the latency between transmission +scheduling and the time the packet is transmitted to the network is listed +in Table 7-61." + +Fix this issue by using igc_tsn_is_tx_mode_in_tsn() as a condition to +write to gtxoffset, aligning with the newly updated SW User Manual. + +Tested: +1. Enrol taprio on talker board + base-time 0 + cycle-time 1000000 + flags 0x2 + index 0 cmd S gatemask 0x1 interval1 + index 0 cmd S gatemask 0x1 interval2 + + Note: + interval1 = interval for a 64 bytes packet to go through + interval2 = cycle-time - interval1 + +2. Take tcpdump on listener board + +3. Use udp tai app on talker to send packets to listener + +4. Check the timestamp on listener via wireshark + +Test Result: +100 Mbps: 113 ~193 ns +1000 Mbps: 52 ~ 84 ns +2500 Mbps: 95 ~ 223 ns + +Note that the test result is similar to the patch "igc: Correct the +launchtime offset". + +Fixes: 790835fcc0cb ("igc: Correct the launchtime offset") +Signed-off-by: Faizal Rahim +Reviewed-by: Simon Horman +Acked-by: Vinicius Costa Gomes +Tested-by: Mor Bar-Gabay +Signed-off-by: Tony Nguyen +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/intel/igc/igc_tsn.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/ethernet/intel/igc/igc_tsn.c ++++ b/drivers/net/ethernet/intel/igc/igc_tsn.c +@@ -61,7 +61,7 @@ void igc_tsn_adjust_txtime_offset(struct + struct igc_hw *hw = &adapter->hw; + u16 txoffset; + +- if (!is_any_launchtime(adapter)) ++ if (!igc_tsn_is_tx_mode_in_tsn(adapter)) + return; + + switch (adapter->link_speed) { diff --git a/queue-6.1/igc-fix-reset-adapter-logics-when-tx-mode-change.patch b/queue-6.1/igc-fix-reset-adapter-logics-when-tx-mode-change.patch new file mode 100644 index 00000000000..02686468bc8 --- /dev/null +++ b/queue-6.1/igc-fix-reset-adapter-logics-when-tx-mode-change.patch @@ -0,0 +1,74 @@ +From 0afeaeb5dae86aceded0d5f0c3a54d27858c0c6f Mon Sep 17 00:00:00 2001 +From: Faizal Rahim +Date: Sun, 7 Jul 2024 08:53:17 -0400 +Subject: igc: Fix reset adapter logics when tx mode change + +From: Faizal Rahim + +commit 0afeaeb5dae86aceded0d5f0c3a54d27858c0c6f upstream. + +Following the "igc: Fix TX Hang issue when QBV Gate is close" changes, +remaining issues with the reset adapter logic in igc_tsn_offload_apply() +have been observed: + +1. The reset adapter logics for i225 and i226 differ, although they should + be the same according to the guidelines in I225/6 HW Design Section + 7.5.2.1 on software initialization during tx mode changes. +2. The i225 resets adapter every time, even though tx mode doesn't change. + This occurs solely based on the condition igc_is_device_id_i225() when + calling schedule_work(). +3. i226 doesn't reset adapter for tsn->legacy tx mode changes. It only + resets adapter for legacy->tsn tx mode transitions. +4. qbv_count introduced in the patch is actually not needed; in this + context, a non-zero value of qbv_count is used to indicate if tx mode + was unconditionally set to tsn in igc_tsn_enable_offload(). This could + be replaced by checking the existing register + IGC_TQAVCTRL_TRANSMIT_MODE_TSN bit. + +This patch resolves all issues and enters schedule_work() to reset the +adapter only when changing tx mode. It also removes reliance on qbv_count. + +qbv_count field will be removed in a future patch. + +Test ran: + +1. Verify reset adapter behaviour in i225/6: + a) Enrol a new GCL + Reset adapter observed (tx mode change legacy->tsn) + b) Enrol a new GCL without deleting qdisc + No reset adapter observed (tx mode remain tsn->tsn) + c) Delete qdisc + Reset adapter observed (tx mode change tsn->legacy) + +2. Tested scenario from "igc: Fix TX Hang issue when QBV Gate is closed" + to confirm it remains resolved. + +Fixes: 175c241288c0 ("igc: Fix TX Hang issue when QBV Gate is closed") +Signed-off-by: Faizal Rahim +Reviewed-by: Simon Horman +Acked-by: Vinicius Costa Gomes +Tested-by: Mor Bar-Gabay +Signed-off-by: Tony Nguyen +[ Only want the igc_tsn_is_tx_mode_in_tsn() portion of this for older stable + kernels - gregkh ] +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/intel/igc/igc_tsn.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/drivers/net/ethernet/intel/igc/igc_tsn.c ++++ b/drivers/net/ethernet/intel/igc/igc_tsn.c +@@ -49,6 +49,13 @@ static unsigned int igc_tsn_new_flags(st + return new_flags; + } + ++static bool igc_tsn_is_tx_mode_in_tsn(struct igc_adapter *adapter) ++{ ++ struct igc_hw *hw = &adapter->hw; ++ ++ return !!(rd32(IGC_TQAVCTRL) & IGC_TQAVCTRL_TRANSMIT_MODE_TSN); ++} ++ + void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter) + { + struct igc_hw *hw = &adapter->hw; diff --git a/queue-6.1/series b/queue-6.1/series index 69747fa0373..0c47e235613 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -64,3 +64,5 @@ usb-core-sysfs-unmerge-usb3_hardware_lpm_attr_group-in-remove_power_attributes.p usb-cdnsp-fix-incorrect-index-in-cdnsp_get_hw_deq-function.patch usb-cdnsp-fix-for-link-trb-with-tc.patch phy-zynqmp-enable-reference-clock-correctly.patch +igc-fix-reset-adapter-logics-when-tx-mode-change.patch +igc-fix-qbv-tx-latency-by-setting-gtxoffset.patch