From c5d1548331294fdca7d32626a66c3c68a22a4c20 Mon Sep 17 00:00:00 2001
From: Michal Novotny <minovotn@redhat.com>
Date: Thu, 22 Mar 2012 11:03:08 +0100
Subject: [PATCH 1/4] Revert "virtio-serial: Fix segfault on guest boot"

This reverts commit 1e6e865b0dfe07472d8ec56dbf1b7fac9facf4b3.

Signed-off-by: Michal Novotny <minovotn@redhat.com>
---
 hw/virtio-serial-bus.c |   24 ++++++++++--------------
 1 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index e31d654..814ddb6 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -374,11 +374,18 @@ static void handle_control_message(VirtIOSerial *vser, void *buf, size_t len)
     cpkt.event = lduw_p(&gcpkt->event);
     cpkt.value = lduw_p(&gcpkt->value);
 
-    if (cpkt.event == VIRTIO_CONSOLE_DEVICE_READY) {
+    port = find_port_by_id(vser, ldl_p(&gcpkt->id));
+    if (!port && cpkt.event != VIRTIO_CONSOLE_DEVICE_READY)
+        return;
+
+    info = DO_UPCAST(VirtIOSerialPortInfo, qdev, port->dev.info);
+
+    switch(cpkt.event) {
+    case VIRTIO_CONSOLE_DEVICE_READY:
         if (!cpkt.value) {
             error_report("virtio-serial-bus: Guest failure in adding device %s",
                          vser->bus.qbus.name);
-            return;
+            break;
         }
         /*
          * The device is up, we can now tell the device about all the
@@ -387,19 +394,8 @@ static void handle_control_message(VirtIOSerial *vser, void *buf, size_t len)
         QTAILQ_FOREACH(port, &vser->ports, next) {
             send_control_event(port, VIRTIO_CONSOLE_PORT_ADD, 1);
         }
-        return;
-    }
-
-    port = find_port_by_id(vser, ldl_p(&gcpkt->id));
-    if (!port) {
-        error_report("virtio-serial-bus: Unexpected port id %u for device %s\n",
-                     ldl_p(&gcpkt->id), vser->bus.qbus.name);
-        return;
-    }
-
-    info = DO_UPCAST(VirtIOSerialPortInfo, qdev, port->dev.info);
+        break;
 
-    switch(cpkt.event) {
     case VIRTIO_CONSOLE_PORT_READY:
         if (!cpkt.value) {
             error_report("virtio-serial-bus: Guest failure in adding port %u for device %s",
-- 
1.7.7.6

