Patch "net: mscc: ocelot: fix incorrect IFH SRC_PORT field in ocelot_ifh_set_basic()" has been added to the 6.1-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: mscc: ocelot: fix incorrect IFH SRC_PORT field in ocelot_ifh_set_basic()

to the 6.1-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-mscc-ocelot-fix-incorrect-ifh-src_port-field-in-.patch
and it can be found in the queue-6.1 subdirectory.

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



commit 97b908529311ae75a75c9da3692187b5650bbcd7
Author: Vladimir Oltean <vladimir.oltean@xxxxxxx>
Date:   Thu Dec 12 18:55:45 2024 +0200

    net: mscc: ocelot: fix incorrect IFH SRC_PORT field in ocelot_ifh_set_basic()
    
    [ Upstream commit 2d5df3a680ffdaf606baa10636bdb1daf757832e ]
    
    Packets injected by the CPU should have a SRC_PORT field equal to the
    CPU port module index in the Analyzer block (ocelot->num_phys_ports).
    
    The blamed commit copied the ocelot_ifh_set_basic() call incorrectly
    from ocelot_xmit_common() in net/dsa/tag_ocelot.c. Instead of calling
    with "x", it calls with BIT_ULL(x), but the field is not a port mask,
    but rather a single port index.
    
    [ side note: this is the technical debt of code duplication :( ]
    
    The error used to be silent and doesn't appear to have other
    user-visible manifestations, but with new changes in the packing
    library, it now fails loudly as follows:
    
    ------------[ cut here ]------------
    Cannot store 0x40 inside bits 46-43 - will truncate
    sja1105 spi2.0: xmit timed out
    WARNING: CPU: 1 PID: 102 at lib/packing.c:98 __pack+0x90/0x198
    sja1105 spi2.0: timed out polling for tstamp
    CPU: 1 UID: 0 PID: 102 Comm: felix_xmit
    Tainted: G        W        N 6.13.0-rc1-00372-gf706b85d972d-dirty #2605
    Call trace:
     __pack+0x90/0x198 (P)
     __pack+0x90/0x198 (L)
     packing+0x78/0x98
     ocelot_ifh_set_basic+0x260/0x368
     ocelot_port_inject_frame+0xa8/0x250
     felix_port_deferred_xmit+0x14c/0x258
     kthread_worker_fn+0x134/0x350
     kthread+0x114/0x138
    
    The code path pertains to the ocelot switchdev driver and to the felix
    secondary DSA tag protocol, ocelot-8021q. Here seen with ocelot-8021q.
    
    The messenger (packing) is not really to blame, so fix the original
    commit instead.
    
    Fixes: e1b9e80236c5 ("net: mscc: ocelot: fix QoS class for injected packets with "ocelot-8021q"")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Reviewed-by: Simon Horman <horms@xxxxxxxxxx>
    Link: https://patch.msgid.link/20241212165546.879567-1-vladimir.oltean@xxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c
index 310a36356f56..71dbdac38020 100644
--- a/drivers/net/ethernet/mscc/ocelot.c
+++ b/drivers/net/ethernet/mscc/ocelot.c
@@ -1161,7 +1161,7 @@ void ocelot_ifh_set_basic(void *ifh, struct ocelot *ocelot, int port,
 
 	memset(ifh, 0, OCELOT_TAG_LEN);
 	ocelot_ifh_set_bypass(ifh, 1);
-	ocelot_ifh_set_src(ifh, BIT_ULL(ocelot->num_phys_ports));
+	ocelot_ifh_set_src(ifh, ocelot->num_phys_ports);
 	ocelot_ifh_set_dest(ifh, BIT_ULL(port));
 	ocelot_ifh_set_qos_class(ifh, qos_class);
 	ocelot_ifh_set_tag_type(ifh, tag_type);




[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