lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 28 May 2019 10:53:03 +0200 From: Ulf Hansson <ulf.hansson@...aro.org> To: Jerome Brunet <jbrunet@...libre.com> Cc: Kevin Hilman <khilman@...libre.com>, "open list:ARM/Amlogic Meson..." <linux-amlogic@...ts.infradead.org>, "linux-mmc@...r.kernel.org" <linux-mmc@...r.kernel.org>, Linux Kernel Mailing List <linux-kernel@...r.kernel.org>, Neil Armstrong <narmstrong@...libre.com> Subject: Re: [PATCH] mmc: meson-gx: fix irq ack On Thu, 23 May 2019 at 16:59, Jerome Brunet <jbrunet@...libre.com> wrote: > > While cleaning the ISR of the meson-gx and acking only raised irqs, > the ack of the irq was moved at the very last stage of the function. > > This was stable during the initial tests but it triggered issues with > hs200, under specific loads (like booting android). Acking the irqs > after calling the mmc_request_done() causes the problem. > > Moving the ack back to the original place solves the issue. Since the > irq is edge triggered, it does not hurt to ack irq even earlier, so > let's do it early in the ISR. > > Fixes: 9c5fdb07a28d ("mmc: meson-gx: ack only raised irq") > Tested-by: Neil Armstrong <narmstrong@...libre.com> > Tested-by: Kevin Hilman <khilman@...libre.com> > Signed-off-by: Jerome Brunet <jbrunet@...libre.com> Applied for fixes, thanks! Kind regards Uffe > --- > drivers/mmc/host/meson-gx-mmc.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c > index 6ef465304052..cb3f6811d69a 100644 > --- a/drivers/mmc/host/meson-gx-mmc.c > +++ b/drivers/mmc/host/meson-gx-mmc.c > @@ -873,6 +873,9 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id) > if (WARN_ON(!host) || WARN_ON(!host->cmd)) > return IRQ_NONE; > > + /* ack all raised interrupts */ > + writel(status, host->regs + SD_EMMC_STATUS); > + > cmd = host->cmd; > data = cmd->data; > cmd->error = 0; > @@ -919,9 +922,6 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id) > if (ret == IRQ_HANDLED) > meson_mmc_request_done(host->mmc, cmd->mrq); > > - /* ack all raised interrupts */ > - writel(status, host->regs + SD_EMMC_STATUS); > - > return ret; > } > > -- > 2.20.1 >
Powered by blists - more mailing lists