lkml.org 
[lkml]   [2021]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.12 622/677] mt76: mt7921: fix possible invalid register access
    Date
    From: Sean Wang <sean.wang@mediatek.com>

    [ Upstream commit fe3fccde8870764ba3e60610774bd7bc9f8faeff ]

    Disable the interrupt and synchronze for the pending irq handlers to ensure
    the irq tasklet is not being scheduled after the suspend to avoid the
    possible invalid register access acts when the host pcie controller is
    suspended.

    [17932.910534] mt7921e 0000:01:00.0: pci_pm_suspend+0x0/0x22c returned 0 after 21375 usecs
    [17932.910590] pcieport 0000:00:00.0: calling pci_pm_suspend+0x0/0x22c @ 18565, parent: pci0000:00
    [17932.910602] pcieport 0000:00:00.0: pci_pm_suspend+0x0/0x22c returned 0 after 8 usecs
    [17932.910671] mtk-pcie 11230000.pcie: calling platform_pm_suspend+0x0/0x60 @ 22783, parent: soc
    [17932.910674] mtk-pcie 11230000.pcie: platform_pm_suspend+0x0/0x60 returned 0 after 0 usecs

    ...

    17933.615352] x1 : 00000000000d4200 x0 : ffffff8269ca2300
    [17933.620666] Call trace:
    [17933.623127] mt76_mmio_rr+0x28/0xf0 [mt76]
    [17933.627234] mt7921_rr+0x38/0x44 [mt7921e]
    [17933.631339] mt7921_irq_tasklet+0x54/0x1d8 [mt7921e]
    [17933.636309] tasklet_action_common+0x12c/0x16c
    [17933.640754] tasklet_action+0x24/0x2c
    [17933.644418] __do_softirq+0x16c/0x344
    [17933.648082] irq_exit+0xa8/0xac
    [17933.651224] scheduler_ipi+0xd4/0x148
    [17933.654890] handle_IPI+0x164/0x2d4
    [17933.658379] gic_handle_irq+0x140/0x178
    [17933.662216] el1_irq+0xb8/0x180
    [17933.665361] cpuidle_enter_state+0xf8/0x204
    [17933.669544] cpuidle_enter+0x38/0x4c
    [17933.673122] do_idle+0x1a4/0x2a8
    [17933.676352] cpu_startup_entry+0x24/0x28
    [17933.680276] rest_init+0xd4/0xe0
    [17933.683508] arch_call_rest_init+0x10/0x18
    [17933.687606] start_kernel+0x340/0x3b4
    [17933.691279] Code: aa0003f5 d503201f f953eaa8 8b344108 (b9400113)
    [17933.697373] ---[ end trace a24b8e26ffbda3c5 ]---
    [17933.767846] Kernel panic - not syncing: Fatal exception in interrupt

    Fixes: ffa1bf97425b ("mt76: mt7921: introduce PM support")
    Signed-off-by: Sean Wang <sean.wang@mediatek.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    index 8e756871a056..80f6f29892a4 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    +++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    @@ -195,7 +195,6 @@ static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state)
    mt76_for_each_q_rx(mdev, i) {
    napi_disable(&mdev->napi[i]);
    }
    - tasklet_kill(&dev->irq_tasklet);

    pci_enable_wake(pdev, pci_choose_state(pdev, state), true);

    @@ -210,6 +209,9 @@ static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state)

    /* disable interrupt */
    mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
    + mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0);
    + synchronize_irq(pdev->irq);
    + tasklet_kill(&dev->irq_tasklet);

    err = mt7921_mcu_fw_pmctrl(dev);
    if (err)
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-12 23:02    [W:4.029 / U:0.364 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site