Baochen Qiang <bqiang@xxxxxxxxxxxxxx> wrote: > 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: Carl Huang <cjhuang@xxxxxxxxxxxxxx> > Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxxxxxx> 7 patches applied to ath-next branch of ath.git, thanks. 87b4072d7ef8 ath11k: get msi_data again after request_irq is called 01279bcd01d9 ath11k: add CE and ext IRQ flag to indicate irq_handler 4ab4693f327a ath11k: use ATH11K_PCI_IRQ_DP_OFFSET for DP IRQ c41a6700b276 ath11k: refactor multiple MSI vector implementation ac6e73483f7b ath11k: add support one MSI vector 915a081ff307 ath11k: do not restore ASPM in case of single MSI vector e94b07493da3 ath11k: Set IRQ affinity to CPU0 in case of one MSI vector -- https://patchwork.kernel.org/project/linux-wireless/patch/20211026041636.5008-1-bqiang@xxxxxxxxxxxxxx/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches