• Rakesh Pillai's avatar
    ath10k: Add interrupt summary based CE processing · b92aba35
    Rakesh Pillai authored
    Currently the NAPI processing loops through all
    the copy engines and processes a particular copy
    engine is the copy completion is set for that copy
    engine. The host driver is not supposed to access
    any copy engine register after clearing the interrupt
    status register.
    
    This might result in kernel crash like the one below
    [ 1159.220143] Call trace:
    [ 1159.220170]  ath10k_snoc_read32+0x20/0x40 [ath10k_snoc]
    [ 1159.220193]  ath10k_ce_per_engine_service_any+0x78/0x130 [ath10k_core]
    [ 1159.220203]  ath10k_snoc_napi_poll+0x38/0x8c [ath10k_snoc]
    [ 1159.220270]  net_rx_action+0x100/0x3b0
    [ 1159.220312]  __do_softirq+0x164/0x30c
    [ 1159.220345]  run_ksoftirqd+0x2c/0x64
    [ 1159.220380]  smpboot_thread_fn+0x1b0/0x288
    [ 1159.220405]  kthread+0x11c/0x12c
    [ 1159.220423]  ret_from_fork+0x10/0x18
    
    To avoid such a scenario, we generate an interrupt
    summary by reading the copy completion for all the
    copy engine before actually processing any of them.
    This will avoid reading the interrupt status register
    for any CE after the interrupt status is cleared.
    
    Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.1-01040-QCAHLSWMTPLZ-1
    Signed-off-by: default avatarRakesh Pillai <pillair@codeaurora.org>
    Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
    Tested-by: default avatarDouglas Anderson <dianders@chromium.org>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/1593193967-29897-1-git-send-email-pillair@codeaurora.org
    b92aba35
ce.c 56.4 KB