From: Russell King <rmk@arm.linux.org.uk>
To: Martin Michlmayr <tbm@cyrius.com>
Cc: linux-mips@linux-mips.org, jblache@debian.org
Subject: Re: IP22 doesn't shutdown properly
Date: Thu, 23 Feb 2006 22:43:46 +0000 [thread overview]
Message-ID: <20060223224346.GA7536@flint.arm.linux.org.uk> (raw)
In-Reply-To: <20060223221350.GA5239@deprecation.cyrius.com>
On Thu, Feb 23, 2006 at 10:13:50PM +0000, Martin Michlmayr wrote:
> I've tracked down now while the old 2.6.12 Debian package shut down
> correctly while no recent git does. The following simple change to
> the serial driver makes the difference for me:
>
> --- a/drivers/serial/serial_core.c~ 2006-02-23 21:58:51.000000000 +0000
> +++ b/drivers/serial/serial_core.c 2006-02-23 21:59:14.000000000 +0000
> @@ -108,7 +108,8 @@
> static void uart_tasklet_action(unsigned long data)
> {
> struct uart_state *state = (struct uart_state *)data;
> - tty_wakeup(state->info->tty);
> + if (state->info->tty)
> + tty_wakeup(state->info->tty);
> }
>
> static inline void
>
> I cannot easily check why this change was in Debian's 2.6.12 package
> nor why it's not in Linus' git. Russell, can you say whether this
> change looks obviously good to you? If not, I can dig some more and
> see why this change was in our 2.6.12 package.
This looks like a case of a fix to work around some bad behaviour in
a driver.
When serial_core calls the drivers shutdown() method, it expects that
will shut the driver up completely - no further interrupts from that
point in, no further calls from the driver into the tty or serial_core
subsystems for this port.
Once the drivers shutdown() method has returned, we ensure there are
no pending interrupts, and then kill off the tasklet.
Sometime later, we NULL state->info->tty.
Hence, if you're seeing a call into uart_tasklet_action() with a NULL
tty, that means some driver called uart_write_wakeup() _after_ its
shutdown method completed. That's a driver bug, not a serial_core
bug - as I say above, the above patch is a workaround for a buggy
driver.
Looking at the ip22 driver, it seems that if shutdown() is called for
the console port, the driver does _nothing_. That's the bug - it will
still call (eg) uart_write_wakeup() after shutdown(), which is a
violation of the assumptions (set out above).
I would not be surprised therefore if you got an oops.
What I might consider is a patch to add BUG_ON(!info->tty) in
uart_write_wakeup() to catch these cases earlier and to provide
folk with a better hint that the bug is _not_ in the core serial
driver.
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core
next prev parent reply other threads:[~2006-02-23 22:36 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-17 22:58 IP22 doesn't shutdown properly Martin Michlmayr
2006-02-18 1:19 ` Kumba
2006-02-18 1:27 ` Martin Michlmayr
2006-02-18 10:36 ` Julien BLACHE
2006-02-19 16:52 ` Ralf Baechle
2006-02-20 18:12 ` Martin Michlmayr
2006-02-20 21:55 ` Ralf Baechle
2006-02-21 13:59 ` Thiemo Seufer
2006-02-21 14:23 ` Stephen P. Becker
2006-02-21 14:31 ` Thiemo Seufer
2006-02-23 21:14 ` Martin Michlmayr
2006-02-23 22:13 ` Martin Michlmayr
2006-02-23 22:43 ` Russell King [this message]
2006-02-24 0:39 ` Martin Michlmayr
2006-02-24 1:30 ` Kumba
2006-02-24 8:31 ` Russell King
2006-02-27 10:54 ` Martin Michlmayr
2006-02-24 19:05 ` Christoph Hellwig
2006-02-27 10:51 ` Martin Michlmayr
2006-02-27 10:52 ` Martin Michlmayr
2006-02-27 11:22 ` Geert Uytterhoeven
2006-02-27 11:25 ` Martin Michlmayr
2006-02-27 12:53 ` Ralf Baechle
2006-02-27 18:30 ` Martin Michlmayr
2006-03-25 17:34 ` Russell King
2006-04-07 16:21 ` Martin Michlmayr
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=20060223224346.GA7536@flint.arm.linux.org.uk \
--to=rmk@arm.linux.org.uk \
--cc=jblache@debian.org \
--cc=linux-mips@linux-mips.org \
--cc=tbm@cyrius.com \
/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