Commit 06d18289 authored by Daniel Thompson's avatar Daniel Thompson Committed by Greg Kroah-Hartman

serial: kgdb_nmi: Use container_of() to locate private data

This corrects a crash in kgdb_nmi_tty_shutdown() which occurs when
the function is called with port->tty set to NULL.

All conversions between struct tty_port and struct kgdb_nmi_tty_priv
have been switched to direct calls to container_of() to improve code
clarity and consistancy.
Signed-off-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2fe686eb
...@@ -84,11 +84,6 @@ struct kgdb_nmi_tty_priv { ...@@ -84,11 +84,6 @@ struct kgdb_nmi_tty_priv {
STRUCT_KFIFO(char, KGDB_NMI_FIFO_SIZE) fifo; STRUCT_KFIFO(char, KGDB_NMI_FIFO_SIZE) fifo;
}; };
static struct kgdb_nmi_tty_priv *kgdb_nmi_port_to_priv(struct tty_port *port)
{
return container_of(port, struct kgdb_nmi_tty_priv, port);
}
/* /*
* Our debugging console is polled in a tasklet, so we'll check for input * Our debugging console is polled in a tasklet, so we'll check for input
* every tick. In HZ-less mode, we should program the next tick. We have * every tick. In HZ-less mode, we should program the next tick. We have
...@@ -118,7 +113,7 @@ static void kgdb_tty_recv(int ch) ...@@ -118,7 +113,7 @@ static void kgdb_tty_recv(int ch)
* do that, and actually, we can't: we're in NMI context, no locks are * do that, and actually, we can't: we're in NMI context, no locks are
* possible. * possible.
*/ */
priv = kgdb_nmi_port_to_priv(kgdb_nmi_port); priv = container_of(kgdb_nmi_port, struct kgdb_nmi_tty_priv, port);
kfifo_in(&priv->fifo, &c, 1); kfifo_in(&priv->fifo, &c, 1);
kgdb_tty_poke(); kgdb_tty_poke();
} }
...@@ -216,7 +211,8 @@ static void kgdb_nmi_tty_receiver(unsigned long data) ...@@ -216,7 +211,8 @@ static void kgdb_nmi_tty_receiver(unsigned long data)
static int kgdb_nmi_tty_activate(struct tty_port *port, struct tty_struct *tty) static int kgdb_nmi_tty_activate(struct tty_port *port, struct tty_struct *tty)
{ {
struct kgdb_nmi_tty_priv *priv = tty->driver_data; struct kgdb_nmi_tty_priv *priv =
container_of(port, struct kgdb_nmi_tty_priv, port);
kgdb_nmi_port = port; kgdb_nmi_port = port;
tasklet_schedule(&priv->tlet); tasklet_schedule(&priv->tlet);
...@@ -225,7 +221,8 @@ static int kgdb_nmi_tty_activate(struct tty_port *port, struct tty_struct *tty) ...@@ -225,7 +221,8 @@ static int kgdb_nmi_tty_activate(struct tty_port *port, struct tty_struct *tty)
static void kgdb_nmi_tty_shutdown(struct tty_port *port) static void kgdb_nmi_tty_shutdown(struct tty_port *port)
{ {
struct kgdb_nmi_tty_priv *priv = port->tty->driver_data; struct kgdb_nmi_tty_priv *priv =
container_of(port, struct kgdb_nmi_tty_priv, port);
tasklet_kill(&priv->tlet); tasklet_kill(&priv->tlet);
kgdb_nmi_port = NULL; kgdb_nmi_port = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment