Linux MIPS Architecture development
 help / color / mirror / Atom feed
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

  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