lkml.org 
[lkml]   [2021]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 048/126] net: ethernet: aquantia: Handle error cleanup of start on open
    Date
    From: Nathan Rossi <nathan.rossi@digi.com>

    [ Upstream commit 8a28af7a3e85ddf358f8c41e401a33002f7a9587 ]

    The aq_nic_start function can fail in a variety of cases which leaves
    the device in broken state.

    An example case where the start function fails is the
    request_threaded_irq which can be interrupted, resulting in a EINTR
    result. This can be manually triggered by bringing the link up (e.g. ip
    link set up) and triggering a SIGINT on the initiating process (e.g.
    Ctrl+C). This would put the device into a half configured state.
    Subsequently bringing the link up again would cause the napi_enable to
    BUG.

    In order to correctly clean up the failed attempt to start a device call
    aq_nic_stop.

    Signed-off-by: Nathan Rossi <nathan.rossi@digi.com>
    Reviewed-by: Igor Russkikh <irusskikh@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/aquantia/atlantic/aq_main.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_main.c b/drivers/net/ethernet/aquantia/atlantic/aq_main.c
    index 8f70a3909929..4af0cd9530de 100644
    --- a/drivers/net/ethernet/aquantia/atlantic/aq_main.c
    +++ b/drivers/net/ethernet/aquantia/atlantic/aq_main.c
    @@ -71,8 +71,10 @@ static int aq_ndev_open(struct net_device *ndev)
    goto err_exit;

    err = aq_nic_start(aq_nic);
    - if (err < 0)
    + if (err < 0) {
    + aq_nic_stop(aq_nic);
    goto err_exit;
    + }

    err_exit:
    if (err < 0)
    --
    2.30.1


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