From c5d1548331294fdca7d32626a66c3c68a22a4c20 Mon Sep 17 00:00:00 2001 From: Michal Novotny 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 --- 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