From: Arnd Bergmann <arnd@arndb.de>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: linaro-kernel@lists.linaro.org,
Build bot for Mark Brown <broonie@kernel.org>,
kernel-build-reports@lists.linaro.org,
linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: v4.4.12-rt20 build: 0 failures 5 warnings (v4.4.12-rt20)
Date: Fri, 15 Jul 2016 21:48:55 +0200 [thread overview]
Message-ID: <77528485.4aTSS092zh@wuerfel> (raw)
In-Reply-To: <20160715132305.GD11606@linutronix.de>
On Friday, July 15, 2016 3:23:05 PM CEST Sebastian Andrzej Siewior wrote:
> * Arnd Bergmann | 2016-07-15 14:29:31 [+0200]:
>
> >Agreed, but it's hard for the compiler to figure that out. On mainline,
>
> we have the same thing in drivers/tty/serial/8250/8250_port.c btw. Don't
> see the warning there.
Interesting, I also see no substantial difference, my best guess is
that the warning appears or disappears based on some inlining
choices that can vary.
I also notice that your "tty: serial: 8250: don't take the trylock
during oops" patch would apply on the pl011 driver as well.
> >we have this instead:
> >
> > local_irq_save(flags);
> > if (uap->port.sysrq)
> > locked = 0;
> > else if (oops_in_progress)
> > locked = spin_trylock(&uap->port.lock);
> > else
> > spin_lock(&uap->port.lock);
> >…
> > if (locked)
> > spin_unlock(&uap->port.lock);
> > local_irq_restore(flags);
> >
> >which looks like it's intentionally written to avoid the warning
> >and was changed by Thomas in "tty/serial/pl011: Make the locking work on RT":
> >
> >http://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit/drivers/tty/serial/amba-pl011.c?h=v4.4-rt-rebase&id=7b537b66fcb12c40eb1b10eb352d570a9d34a657
> >
> >Maybe there is another way to write this upstream that avoids the
> >warning.
>
> I don't see any other way around except for initializing flags upfront:
Sure, that always works, it's just a bit ugly since the flags word
should never be zero when it gets written back to the hardware irq
state, at least in portable code.
Maybe something like the version below?
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index 8a9e213387a7..676fcfa7fce4 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -2158,22 +2158,9 @@ static void pl011_console_putchar(struct uart_port *port, int ch)
}
static void
-pl011_console_write(struct console *co, const char *s, unsigned int count)
+__pl011_console_write(struct uart_amba_port *uap, const char *s, unsigned int count)
{
- struct uart_amba_port *uap = amba_ports[co->index];
unsigned int old_cr = 0, new_cr;
- unsigned long flags;
- int locked = 1;
-
- clk_enable(uap->clk);
-
- local_irq_save(flags);
- if (uap->port.sysrq)
- locked = 0;
- else if (oops_in_progress)
- locked = spin_trylock(&uap->port.lock);
- else
- spin_lock(&uap->port.lock);
/*
* First save the CR then disable the interrupts
@@ -2195,10 +2182,24 @@ pl011_console_write(struct console *co, const char *s, unsigned int count)
cpu_relax();
if (!uap->vendor->always_enabled)
pl011_write(old_cr, uap, REG_CR);
+}
- if (locked)
- spin_unlock(&uap->port.lock);
- local_irq_restore(flags);
+
+static void
+pl011_console_write(struct console *co, const char *s, unsigned int count)
+{
+ struct uart_amba_port *uap = amba_ports[co->index];
+ unsigned long flags;
+
+ clk_enable(uap->clk);
+
+ if (uap->port.sysrq || oops_in_progress) {
+ __pl011_console_write(uap, s, count);
+ } else {
+ spin_lock_irqsave(&uap->port.lock, flags);
+ __pl011_console_write(uap, s, count);
+ spin_unlock_irqrestore(&uap->port.lock, flags);
+ }
clk_disable(uap->clk);
}
next prev parent reply other threads:[~2016-07-15 19:49 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <E1bNugf-00064t-KA@optimist>
2016-07-15 7:07 ` v4.4.12-rt20 build: 0 failures 5 warnings (v4.4.12-rt20) Arnd Bergmann
2016-07-15 12:05 ` Sebastian Andrzej Siewior
2016-07-15 12:29 ` Arnd Bergmann
2016-07-15 13:23 ` Sebastian Andrzej Siewior
2016-07-15 19:48 ` Arnd Bergmann [this message]
2016-07-29 15:23 ` Sebastian Andrzej Siewior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=77528485.4aTSS092zh@wuerfel \
--to=arnd@arndb.de \
--cc=bigeasy@linutronix.de \
--cc=broonie@kernel.org \
--cc=kernel-build-reports@lists.linaro.org \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox