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

qizhong.cheng qizhong.cheng at mediatek.com
Thu Feb 10 22:50:18 PST 2022


Hi AngeloGioacchino & Greg KH,

On Thu, 2022-02-10 at 15:31 +0100, AngeloGioacchino Del Regno wrote:
> 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>
> 

Thanks for your reviews and suggestions.
I will fix it in the next v3 version.

> 
> > ---
> > 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