• Wei Fang's avatar
    net: enetc: correct the indexes of highest and 2nd highest TCs · 21225873
    Wei Fang authored
    For ENETC hardware, the TCs are numbered from 0 to N-1, where N
    is the number of TCs. Numerically higher TC has higher priority.
    It's obvious that the highest priority TC index should be N-1 and
    the 2nd highest priority TC index should be N-2.
    
    However, the previous logic uses netdev_get_prio_tc_map() to get
    the indexes of highest priority and 2nd highest priority TCs, it
    does not make sense and is incorrect to give a "tc" argument to
    netdev_get_prio_tc_map(). So the driver may get the wrong indexes
    of the two highest priotiry TCs which would lead to failed to set
    the CBS for the two highest priotiry TCs.
    
    e.g.
    $ tc qdisc add dev eno0 parent root handle 100: mqprio num_tc 6 \
    	map 0 0 1 1 2 3 4 5 queues 1@0 1@1 1@2 1@3 2@4 2@6 hw 1
    $ tc qdisc replace dev eno0 parent 100:6 cbs idleslope 100000 \
    	sendslope -900000 hicredit 12 locredit -113 offload 1
    $ Error: Specified device failed to setup cbs hardware offload.
      ^^^^^
    
    In this example, the previous logic deems the indexes of the two
    highest priotiry TCs should be 3 and 2. Actually, the indexes are
    5 and 4, because the number of TCs is 6. So it would be failed to
    configure the CBS for the two highest priority TCs.
    
    Fixes: c431047c ("enetc: add support Credit Based Shaper(CBS) for hardware offload")
    Signed-off-by: default avatarWei Fang <wei.fang@nxp.com>
    Reviewed-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    21225873
enetc_qos.c 37 KB