All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.