lkml.org 
[lkml]   [2021]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 078/103] ibmvnic: avoid calling napi_disable() twice
    Date
    From: Lijun Pan <lijunp213@gmail.com>

    commit 0775ebc4cf8554bdcd2c212669a0868ab68df5c0 upstream.

    __ibmvnic_open calls napi_disable without checking whether NAPI polling
    has already been disabled or not. This could cause napi_disable
    being called twice, which could generate deadlock. For example,
    the first napi_disable will spin until NAPI_STATE_SCHED is cleared
    by napi_complete_done, then set it again.
    When napi_disable is called the second time, it will loop infinitely
    because no dev->poll will be running to clear NAPI_STATE_SCHED.

    To prevent above scenario from happening, call ibmvnic_napi_disable()
    which checks if napi is disabled or not before calling napi_disable.

    Fixes: bfc32f297337 ("ibmvnic: Move resource initialization to its own routine")
    Suggested-by: Thomas Falcon <tlfalcon@linux.ibm.com>
    Signed-off-by: Lijun Pan <lijunp213@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/ibm/ibmvnic.c | 3 +--
    1 file changed, 1 insertion(+), 2 deletions(-)

    --- a/drivers/net/ethernet/ibm/ibmvnic.c
    +++ b/drivers/net/ethernet/ibm/ibmvnic.c
    @@ -1159,8 +1159,7 @@ static int __ibmvnic_open(struct net_dev

    rc = set_link_state(adapter, IBMVNIC_LOGICAL_LNK_UP);
    if (rc) {
    - for (i = 0; i < adapter->req_rx_queues; i++)
    - napi_disable(&adapter->napi[i]);
    + ibmvnic_napi_disable(adapter);
    release_resources(adapter);
    return rc;
    }

    \
     
     \ /
      Last update: 2021-04-19 15:39    [W:4.329 / U:0.232 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site