[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