lkml.org 
[lkml]   [2021]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.12 030/161] net: dsa: tag_8021q: fix the VLAN IDs used for encoding sub-VLANs
    Date
    From: Vladimir Oltean <vladimir.oltean@nxp.com>

    [ Upstream commit 4ef8d857b5f494e62bce9085031563fda35f9563 ]

    When using sub-VLANs in the range of 1-7, the resulting value from:

    rx_vid = dsa_8021q_rx_vid_subvlan(ds, port, subvlan);

    is wrong according to the description from tag_8021q.c:

    | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    +-----------+-----+-----------------+-----------+-----------------------+
    | DIR | SVL | SWITCH_ID | SUBVLAN | PORT |
    +-----------+-----+-----------------+-----------+-----------------------+

    For example, when ds->index == 0, port == 3 and subvlan == 1,
    dsa_8021q_rx_vid_subvlan() returns 1027, same as it returns for
    subvlan == 0, but it should have returned 1043.

    This is because the low portion of the subvlan bits are not masked
    properly when writing into the 12-bit VLAN value. They are masked into
    bits 4:3, but they should be masked into bits 5:4.

    Fixes: 3eaae1d05f2b ("net: dsa: tag_8021q: support up to 8 VLANs per port using sub-VLANs")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/dsa/tag_8021q.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/net/dsa/tag_8021q.c b/net/dsa/tag_8021q.c
    index 008c1ec6e20c..122ad5833fb1 100644
    --- a/net/dsa/tag_8021q.c
    +++ b/net/dsa/tag_8021q.c
    @@ -64,7 +64,7 @@
    #define DSA_8021Q_SUBVLAN_HI_SHIFT 9
    #define DSA_8021Q_SUBVLAN_HI_MASK GENMASK(9, 9)
    #define DSA_8021Q_SUBVLAN_LO_SHIFT 4
    -#define DSA_8021Q_SUBVLAN_LO_MASK GENMASK(4, 3)
    +#define DSA_8021Q_SUBVLAN_LO_MASK GENMASK(5, 4)
    #define DSA_8021Q_SUBVLAN_HI(x) (((x) & GENMASK(2, 2)) >> 2)
    #define DSA_8021Q_SUBVLAN_LO(x) ((x) & GENMASK(1, 0))
    #define DSA_8021Q_SUBVLAN(x) \
    --
    2.30.2



    \
     
     \ /
      Last update: 2021-06-08 21:15    [W:4.067 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site