lkml.org 
[lkml]   [2022]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 069/201] net: stmmac: fix pm runtime issue in stmmac_dvr_remove()
    Date
    From: Biao Huang <biao.huang@mediatek.com>

    [ Upstream commit 0d9a15913b871e03fdd3b3d90a2e665fb22f9bcf ]

    If netif is running when stmmac_dvr_remove is invoked,
    the unregister_netdev will call ndo_stop(stmmac_release) and
    vlan_kill_rx_filter(stmmac_vlan_rx_kill_vid).

    Currently, stmmac_dvr_remove() will disable pm runtime before
    unregister_netdev. When stmmac_vlan_rx_kill_vid is invoked,
    pm_runtime_resume_and_get in it returns EACCESS error number,
    and reports:

    dwmac-mediatek 11021000.ethernet eth0: stmmac_dvr_remove: removing driver
    dwmac-mediatek 11021000.ethernet eth0: FPE workqueue stop
    dwmac-mediatek 11021000.ethernet eth0: failed to kill vid 0081/0

    Move the pm_runtime_disable to the end of stmmac_dvr_remove
    to fix this issue.

    Fixes: 6449520391dfc ("net: stmmac: properly handle with runtime pm in stmmac_dvr_remove()")
    Signed-off-by: Biao Huang <biao.huang@mediatek.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    index 9c1e19ea6fcd..95e1307cfda2 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    @@ -7279,8 +7279,6 @@ int stmmac_dvr_remove(struct device *dev)
    netdev_info(priv->dev, "%s: removing driver", __func__);

    pm_runtime_get_sync(dev);
    - pm_runtime_disable(dev);
    - pm_runtime_put_noidle(dev);

    stmmac_stop_all_dma(priv);
    stmmac_mac_set(priv, priv->ioaddr, false);
    @@ -7307,6 +7305,9 @@ int stmmac_dvr_remove(struct device *dev)
    mutex_destroy(&priv->lock);
    bitmap_free(priv->af_xdp_zc_qps);

    + pm_runtime_disable(dev);
    + pm_runtime_put_noidle(dev);
    +
    return 0;
    }
    EXPORT_SYMBOL_GPL(stmmac_dvr_remove);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-27 19:14    [W:2.220 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site