[PATCH v2] PCI: mediatek: Clear interrupt status before dispatching handler

AngeloGioacchino Del Regno angelogioacchino.delregno at collabora.com
Thu Feb 10 06:31:50 PST 2022


Il 10/02/22 02:21, qizhong cheng ha scritto:
> We found a failure when used iperf tool for wifi performance testing,
> there are some MSIs received while clearing the interrupt status,
> these MSIs cannot be serviced.
> 
> The interrupt status can be cleared even the MSI status still remaining,
> as an edge-triggered interrupts, its interrupt status should be cleared
> before dispatching to the handler of device.
> 
> Signed-off-by: qizhong cheng <qizhong.cheng at mediatek.com>

Hello Qizhong,

This commit is fixing an issue, which means that you *have to* add a proper
Fixes tag.

I believe that this is fixing commit
43e6409db64d ("PCI: mediatek: Add MSI support for MT2712 and MT7622").

Please add the tag and send a v3, after which:
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>


> ---
> v2:
>   - Update the subject line.
>   - Improve the commit log and code comments.
> 
>   drivers/pci/controller/pcie-mediatek.c | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-mediatek.c b/drivers/pci/controller/pcie-mediatek.c
> index 2f3f974977a3..2856d74b2513 100644
> --- a/drivers/pci/controller/pcie-mediatek.c
> +++ b/drivers/pci/controller/pcie-mediatek.c
> @@ -624,12 +624,17 @@ static void mtk_pcie_intr_handler(struct irq_desc *desc)
>   		if (status & MSI_STATUS){
>   			unsigned long imsi_status;
>   
> +			/*
> +			 * The interrupt status can be cleared even the MSI
> +			 * status still remaining, hence as an edge-triggered
> +			 * interrupts, its interrupt status should be cleared
> +			 * before dispatching handler.
> +			 */
> +			writel(MSI_STATUS, port->base + PCIE_INT_STATUS);
>   			while ((imsi_status = readl(port->base + PCIE_IMSI_STATUS))) {
>   				for_each_set_bit(bit, &imsi_status, MTK_MSI_IRQS_NUM)
>   					generic_handle_domain_irq(port->inner_domain, bit);
>   			}
> -			/* Clear MSI interrupt status */
> -			writel(MSI_STATUS, port->base + PCIE_INT_STATUS);
>   		}
>   	}
>   
> 





More information about the linux-arm-kernel mailing list