Patch "net: dsa: felix: fix oversize frame dropping for always closed tc-taprio gates" has been added to the 6.4-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

    net: dsa: felix: fix oversize frame dropping for always closed tc-taprio gates

to the 6.4-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:
     net-dsa-felix-fix-oversize-frame-dropping-for-always.patch
and it can be found in the queue-6.4 subdirectory.

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



commit 094cc85a126225198f64ff6e7cdfeb67fadadf61
Author: Vladimir Oltean <vladimir.oltean@xxxxxxx>
Date:   Thu Aug 17 15:01:11 2023 +0300

    net: dsa: felix: fix oversize frame dropping for always closed tc-taprio gates
    
    [ Upstream commit d44036cad31170da0cb9c728e80743f84267da6e ]
    
    The blamed commit resolved a bug where frames would still get stuck at
    egress, even though they're smaller than the maxSDU[tc], because the
    driver did not take into account the extra 33 ns that the queue system
    needs for scheduling the frame.
    
    It now takes that into account, but the arithmetic that we perform in
    vsc9959_tas_remaining_gate_len_ps() is buggy, because we operate on
    64-bit unsigned integers, so gate_len_ns - VSC9959_TAS_MIN_GATE_LEN_NS
    may become a very large integer if gate_len_ns < 33 ns.
    
    In practice, this means that we've introduced a regression where all
    traffic class gates which are permanently closed will not get detected
    by the driver, and we won't enable oversize frame dropping for them.
    
    Before:
    mscc_felix 0000:00:00.5: port 0: max frame size 1526 needs 12400000 ps, 1152000 ps for mPackets at speed 1000
    mscc_felix 0000:00:00.5: port 0 tc 0 min gate len 1000000, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 1 min gate len 0, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 2 min gate len 0, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 3 min gate len 0, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 4 min gate len 0, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 5 min gate len 0, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 6 min gate len 0, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 7 min gate length 5120 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 615 octets including FCS
    
    After:
    mscc_felix 0000:00:00.5: port 0: max frame size 1526 needs 12400000 ps, 1152000 ps for mPackets at speed 1000
    mscc_felix 0000:00:00.5: port 0 tc 0 min gate len 1000000, sending all frames
    mscc_felix 0000:00:00.5: port 0 tc 1 min gate length 0 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 1 octets including FCS
    mscc_felix 0000:00:00.5: port 0 tc 2 min gate length 0 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 1 octets including FCS
    mscc_felix 0000:00:00.5: port 0 tc 3 min gate length 0 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 1 octets including FCS
    mscc_felix 0000:00:00.5: port 0 tc 4 min gate length 0 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 1 octets including FCS
    mscc_felix 0000:00:00.5: port 0 tc 5 min gate length 0 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 1 octets including FCS
    mscc_felix 0000:00:00.5: port 0 tc 6 min gate length 0 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 1 octets including FCS
    mscc_felix 0000:00:00.5: port 0 tc 7 min gate length 5120 ns not enough for max frame size 1526 at 1000 Mbps, dropping frames over 615 octets including FCS
    
    Fixes: 11afdc6526de ("net: dsa: felix: tc-taprio intervals smaller than MTU should send at least one packet")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20230817120111.3522827-1-vladimir.oltean@xxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c
index ca69973ae91b9..b1ecd08cec96a 100644
--- a/drivers/net/dsa/ocelot/felix_vsc9959.c
+++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
@@ -1081,6 +1081,9 @@ static u64 vsc9959_tas_remaining_gate_len_ps(u64 gate_len_ns)
 	if (gate_len_ns == U64_MAX)
 		return U64_MAX;
 
+	if (gate_len_ns < VSC9959_TAS_MIN_GATE_LEN_NS)
+		return 0;
+
 	return (gate_len_ns - VSC9959_TAS_MIN_GATE_LEN_NS) * PSEC_PER_NSEC;
 }
 



[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