Thread (6 messages) 6 messages, 3 authors, 2012-01-20

Re: [PATCH] serial: Fix wakeup init logic to speed up startup

From: Simon Glass <sjg@chromium.org>
Date: 2012-01-20 00:04:09
Also in: lkml

Hi Rafael,

On Thu, Jan 19, 2012 at 3:46 PM, Rafael J. Wysocki [off-list ref] wrote:
On Thursday, January 19, 2012, Simon Glass wrote:
quoted
The synchronize_rcu() call resulting from making every serial driver
wake-up capable (commit b3b708fa) slows boot down on my Tegra2x system
(with CONFIG_PREEMPT disabled).

But this is avoidable since it is the device_set_wakeup_enable() and then
subsequence disable which causes the delay. We might as well just make
the device wakeup capable but not actually enable it for wakeup until
needed.

Effectively the current code does this:

      device_set_wakeup_capable(dev, 1);
      device_set_wakeup_enable(dev, 1);
      device_set_wakeup_enable(dev, 0);

We can just drop the last two lines.

Before this change my boot log says:
[    0.227062] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.702928] serial8250.0: ttyS0 at MMIO 0x70006040 (irq = 69) is a Tegra

after:
[    0.227264] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.227983] serial8250.0: ttyS0 at MMIO 0x70006040 (irq = 69) is a Tegra

for saving of 450ms.

Suggested-by: Rafael J. Wysocki <redacted>
Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Rafael J. Wysocki <redacted>

Thanks!
Thanks for your help with this.

Regards,
Simon
quoted
---
 drivers/tty/serial/serial_core.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index c7bf31a..1305618 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2348,11 +2348,11 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
       */
      tty_dev = tty_register_device(drv->tty_driver, uport->line, uport->dev);
      if (likely(!IS_ERR(tty_dev))) {
-             device_init_wakeup(tty_dev, 1);
-             device_set_wakeup_enable(tty_dev, 0);
-     } else
+             device_set_wakeup_capable(tty_dev, 1);
+     } else {
              printk(KERN_ERR "Cannot register tty device on line %d\n",
                     uport->line);
+     }

      /*
       * Ensure UPF_DEAD is not set.
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help