lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 461/849] mt76: mt7921: fix dma hang in rmmod
    Date
    From: Deren Wu <deren.wu@mediatek.com>

    [ Upstream commit a23f80aa9c5e6ad4ec8df88037b7ffd4162b1ec4 ]

    The dma would be broken after rmmod flow. There are two different
    cases causing this issue.
    1. dma access without privilege.
    2. hw access sequence borken by another context.

    This patch handle both cases to avoid hw crash.

    Fixes: 2b9ea5a8cf1bd ("mt76: mt7921: add mt7921_dma_cleanup in mt7921_unregister_device")
    Signed-off-by: Deren Wu <deren.wu@mediatek.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/mediatek/mt76/mt7921/init.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
    index 52d40385fab6c..78a00028137bd 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
    +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
    @@ -251,8 +251,17 @@ int mt7921_register_device(struct mt7921_dev *dev)

    void mt7921_unregister_device(struct mt7921_dev *dev)
    {
    + int i;
    + struct mt76_connac_pm *pm = &dev->pm;
    +
    mt76_unregister_device(&dev->mt76);
    + mt76_for_each_q_rx(&dev->mt76, i)
    + napi_disable(&dev->mt76.napi[i]);
    + cancel_delayed_work_sync(&pm->ps_work);
    + cancel_work_sync(&pm->wake_work);
    +
    mt7921_tx_token_put(dev);
    + mt7921_mcu_drv_pmctrl(dev);
    mt7921_dma_cleanup(dev);
    mt7921_mcu_exit(dev);

    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 00:07    [W:2.102 / U:0.360 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site