lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 002/178] enetc: Fix tx rings bitmap iteration range, irq handling
    Date
    From: Claudiu Manoil <claudiu.manoil@nxp.com>

    [ Upstream commit 0574e2000fc3103cbc69ba82ec1175ce171fdf5e ]

    The rings bitmap of an interrupt vector encodes
    which of the device's rings were assigned to that
    interrupt vector.
    Hence the iteration range of the tx rings bitmap
    (for_each_set_bit()) should be the total number of
    Tx rings of that netdevice instead of the number of
    rings assigned to the interrupt vector.
    Since there are 2 cores, and one interrupt vector for
    each core, the number of rings asigned to an interrupt
    vector is half the number of available rings.
    The impact of this error is that the upper half of the
    tx rings could still generate interrupts during napi
    polling.

    Fixes: d4fd0404c1c9 ("enetc: Introduce basic PF and VF ENETC ethernet drivers")
    Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/freescale/enetc/enetc.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
    index b6ff893074092..4ef4d41b0d8d6 100644
    --- a/drivers/net/ethernet/freescale/enetc/enetc.c
    +++ b/drivers/net/ethernet/freescale/enetc/enetc.c
    @@ -254,7 +254,7 @@ static irqreturn_t enetc_msix(int irq, void *data)
    /* disable interrupts */
    enetc_wr_reg(v->rbier, 0);

    - for_each_set_bit(i, &v->tx_rings_map, v->count_tx_rings)
    + for_each_set_bit(i, &v->tx_rings_map, ENETC_MAX_NUM_TXQS)
    enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i), 0);

    napi_schedule_irqoff(&v->napi);
    @@ -290,7 +290,7 @@ static int enetc_poll(struct napi_struct *napi, int budget)
    /* enable interrupts */
    enetc_wr_reg(v->rbier, ENETC_RBIER_RXTIE);

    - for_each_set_bit(i, &v->tx_rings_map, v->count_tx_rings)
    + for_each_set_bit(i, &v->tx_rings_map, ENETC_MAX_NUM_TXQS)
    enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i),
    ENETC_TBIER_TXTIE);

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 21:53    [W:4.076 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site