lkml.org 
[lkml]   [2020]   [Mar]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 047/170] net: ena: fix incorrect setting of the number of msix vectors
    Date
    From: Arthur Kiyanovski <akiyano@amazon.com>

    [ Upstream commit ce1f352162828ba07470328828a32f47aa759020 ]

    Overview:
    We don't frequently change the msix vectors throughout the life cycle of
    the driver. We do so in two functions: ena_probe() and ena_restore().
    ena_probe() is only called when the driver is loaded. ena_restore() on the
    other hand is called during device reset / resume operations.

    We use num_io_queues for calculating and allocating the number of msix
    vectors. At ena_probe() this value is equal to max_num_io_queues and thus
    this is not an issue, however ena_restore() might be called after the
    number of io queues has changed.

    A possible bug scenario is as follows:

    * Change number of queues from 8 to 4.
    (num_io_queues = 4, max_num_io_queues = 8, msix_vecs = 9,)
    * Trigger reset occurs -> ena_restore is called.
    (num_io_queues = 4, max_num_io_queues =8 , msix_vecs = 5)
    * Change number of queues from 4 to 6.
    (num_io_queues = 6, max_num_io_queues = 8, msix_vecs = 5)
    * The driver will reset due to failure of check_for_rx_interrupt_queue()

    Fix:
    This can be easily fixed by always using max_num_io_queues to init the
    msix_vecs, since this number won't change as opposed to num_io_queues.

    Fixes: 4d19266022ec ("net: ena: multiple queue creation related cleanups")
    Signed-off-by: Sameeh Jubran <sameehj@amazon.com>
    Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/amazon/ena/ena_netdev.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
    +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
    @@ -1346,7 +1346,7 @@ static int ena_enable_msix(struct ena_ad
    }

    /* Reserved the max msix vectors we might need */
    - msix_vecs = ENA_MAX_MSIX_VEC(adapter->num_io_queues);
    + msix_vecs = ENA_MAX_MSIX_VEC(adapter->max_num_io_queues);
    netif_dbg(adapter, probe, adapter->netdev,
    "trying to enable MSI-X, vectors %d\n", msix_vecs);


    \
     
     \ /
      Last update: 2020-03-31 11:04    [W:4.927 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site