[PATCH] Revert 5dd5bc40f3b6e0ccdaad948dbadc94ad0906cb25

From: Mikulas Patocka
Date: Fri May 04 2012 - 23:05:42 EST


Hi

This patch reverts commit 5dd5bc40f3b6e0ccdaad948dbadc94ad0906cb25.

The commit 5dd5bc40f3b6e0ccdaad948dbadc94ad0906cb25 causes system lockup
when pdc is used as a boot console.

The kernel boots, but it locks up when transferring control to userspace
--- the message "INIT: version 2.86 booting" is not printed and the
computer halts. With the patch reverted, the system starts normally on
pdc.

Mikulas

---

diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c
index 4f00459..d14e20f 100644
--- a/arch/parisc/kernel/pdc_cons.c
+++ b/arch/parisc/kernel/pdc_cons.c
@@ -92,11 +92,10 @@ static int pdc_console_setup(struct console *co, char *options)

static void pdc_console_poll(unsigned long unused);
static DEFINE_TIMER(pdc_console_timer, pdc_console_poll, 0, 0);
-static struct tty_port tty_port;

static int pdc_console_tty_open(struct tty_struct *tty, struct file *filp)
{
- tty_port_tty_set(&tty_port, tty);
+
mod_timer(&pdc_console_timer, jiffies + PDC_CONS_POLL_DELAY);

return 0;
@@ -104,10 +103,8 @@ static int pdc_console_tty_open(struct tty_struct *tty, struct file *filp)

static void pdc_console_tty_close(struct tty_struct *tty, struct file *filp)
{
- if (!tty->count) {
+ if (!tty->count)
del_timer_sync(&pdc_console_timer);
- tty_port_tty_set(&tty_port, NULL);
- }
}

static int pdc_console_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
@@ -126,6 +123,8 @@ static int pdc_console_tty_chars_in_buffer(struct tty_struct *tty)
return 0; /* no buffer */
}

+static struct tty_driver *pdc_console_tty_driver;
+
static const struct tty_operations pdc_console_tty_ops = {
.open = pdc_console_tty_open,
.close = pdc_console_tty_close,
@@ -136,8 +135,10 @@ static const struct tty_operations pdc_console_tty_ops = {

static void pdc_console_poll(unsigned long unused)
{
+
int data, count = 0;
- struct tty_struct *tty = tty_port_tty_get(&tty_port);
+
+ struct tty_struct *tty = pdc_console_tty_driver->ttys[0];

if (!tty)
return;
@@ -153,14 +154,10 @@ static void pdc_console_poll(unsigned long unused)
if (count)
tty_flip_buffer_push(tty);

- tty_kref_put(tty);
-
if (pdc_cons.flags & CON_ENABLED)
mod_timer(&pdc_console_timer, jiffies + PDC_CONS_POLL_DELAY);
}

-static struct tty_driver *pdc_console_tty_driver;
-
static int __init pdc_console_tty_driver_init(void)
{
int err;
@@ -185,8 +182,6 @@ static int __init pdc_console_tty_driver_init(void)
printk(KERN_INFO "The PDC console driver is still registered, removing CON_BOOT flag\n");
pdc_cons.flags &= ~CON_BOOT;

- tty_port_init(&tty_port);
-
pdc_console_tty_driver = alloc_tty_driver(1);

if (!pdc_console_tty_driver)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/