Skip to contentSkip to conversation

virtio: console: fix for early console

PATCH Applied Amit Shah 3 participants 6 messages Sep 22, 2011 – Oct 31, 2011

Subsystems (4)
lore
Share & tools
lore

Amit Shah

author
#0 lore raw

cover virtio: console: fix for early console

Hi Rusty,

This is a fix from Christian for early console handling with multiport support. Please apply.

Christian, I've made some changes to the patch as noted in the commit message. Nothing major, but an ACK would be nice.

Thanks.

Christian Borntraeger (1):
virtio: console: wait for first console port for early console output

 drivers/char/virtio_console.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)
Signature · 1 line
1.7.6.2
author
#1 lore raw

PATCH 1/1 virtio: console: wait for first console port for early console output

From: Christian Borntraeger <[email protected]>

On s390 I have seen some random

"Warning: unable to open an initial console"

boot failure. Turns out that tty_open fails, because the hvc_alloc was not yet done. In former times this could not happen, since the probe function automatically called hvc_alloc. With newer versions (multiport) some host<->guest interaction is required before hvc_alloc is called. This might be too late, especially if an initramfs is involved. Lets use a completion if we have multiport and an early console.

[Amit:
* Use NULL instead of 0 for pointer comparison
* Rename 'port_added' to 'early_console_added'
* Re-format, re-word commit message
* Rebase patch on top of current queue]

---
 drivers/char/virtio_console.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)
drivers/char/virtio_console.c +20 -0
index 9ea3b5e..7f2c6e5 100644
@@ -19,6 +19,7 @@
  */
 #include <linux/cdev.h>
 #include <linux/debugfs.h>
+#include <linux/completion.h>
 #include <linux/device.h>
 #include <linux/err.h>
 #include <linux/freezer.h>
@@ -74,6 +75,7 @@ struct ports_driver_data {
 static struct ports_driver_data pdrvdata;
 
 DEFINE_SPINLOCK(pdrvdata_lock);
+DECLARE_COMPLETION(early_console_added);
 
 /* This struct holds information that's relevant only for console ports */
 struct console {
@@ -1366,6 +1368,7 @@ static void handle_control_message(struct ports_device *portdev,
 			break;
 
 		init_port_console(port);
+		complete(&early_console_added);
 		/*
 		 * Could remove the port here in case init fails - but
 		 * have to notify the host first.
@@ -1668,6 +1671,10 @@ static int __devinit virtcons_probe(struct virtio_device *vdev)
 	struct ports_device *portdev;
 	int err;
 	bool multiport;
+	bool early = early_put_chars != NULL;
+
+	/* Ensure to read early_put_chars now */
+	barrier();
 
 	portdev = kmalloc(sizeof(*portdev), GFP_KERNEL);
 	if (!portdev) {
@@ -1739,6 +1746,19 @@ static int __devinit virtcons_probe(struct virtio_device *vdev)
 
 	__send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
 			   VIRTIO_CONSOLE_DEVICE_READY, 1);
+
+	/*
+	 * If there was an early virtio console, assume that there are no
+	 * other consoles. We need to wait until the hvc_alloc matches the
+	 * hvc_instantiate, otherwise tty_open will complain, resulting in
+	 * a "Warning: unable to open an initial console" boot failure.
+	 * Without multiport this is done in add_port above. With multiport
+	 * this might take some host<->guest communication - thus we have to
+	 * wait.
+	 */
+	if (multiport && early)
+		wait_for_completion(&early_console_added);
+
 	return 0;
 
 free_vqs:
Signature · 1 line
1.7.6.2
#3 lore raw
Quoted 11 lines · Christian Borntraeger
Quoted 7 lines · Amit Shah

Hi Rusty,

This is a fix from Christian for early console handling with multiport support. Please apply.

Christian, I've made some changes to the patch as noted in the commit message. Nothing major, but an ACK would be nice.

The changes look fine.

Thanks, applied.

Cheers,
Rusty.

author
#4 lore raw
In reply to Amit Shah
Quoted 9 lines · Amit Shah

Hi Rusty,

This is a fix from Christian for early console handling with multiport support. Please apply.

Christian, I've made some changes to the patch as noted in the commit message. Nothing major, but an ACK would be nice.

Thanks.

Hey Rusty can you push this fix for 3.2?

Thanks

Amit

author
#5 lore raw
In reply to Amit Shah
Quoted 9 lines · Amit Shah

Hi Rusty,

This is a fix from Christian for early console handling with multiport support. Please apply.

Christian, I've made some changes to the patch as noted in the commit message. Nothing major, but an ACK would be nice.

Thanks.

Hey Rusty can you push this fix for 3.2?

Thanks

Amit