• Carl Huang's avatar
    ath11k: get msi_data again after request_irq is called · 87b4072d
    Carl Huang authored
    The reservation mode of interrupts in kernel assigns a dummy vector
    when the interrupt is allocated and assigns a real vector when the
    request_irq is called. The reservation mode helps to ease vector
    pressure when devices with a large amount of queues/interrupts
    are initialized, but only a minimal subset of those queues/interrupts
    is actually used.
    
    So on reservation mode, the msi_data may change after request_irq
    is called, so ath11k reads msi_data again after request_irq is called,
    and then the correct msi_data is programmed into QCA6390 hardware
    components. Without this change, spurious interrupt occurs in case of
    one MSI vector. When VT-d in BIOS is enabled and ath11k can get 32 MSI
    vectors, ath11k always get the same msi_data before and after request_irq,
    that's why this change is only required when one MSI vector is to be
    supported.
    
    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
    Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20211026041636.5008-1-bqiang@codeaurora.org
    87b4072d
pci.c 36.8 KB