[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 15/15] virtio-serial: do not perform bus reset by ha
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 15/15] virtio-serial: do not perform bus reset by hand |
Date: |
Mon, 17 Dec 2012 17:24:50 +0100 |
Implement guest_reset as a bus-level reset callback. Then, the qdev
and virtio core will call it when needed every time the device is
reset or the status field is set to 0.
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/virtio-serial-bus.c | 19 +++++--------------
1 file changed, 5 insertions(+), 14 deletions(-)
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index 155da58..1564482 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -532,12 +532,13 @@ static void set_config(VirtIODevice *vdev, const uint8_t
*config_data)
memcpy(&config, config_data, sizeof(config));
}
-static void guest_reset(VirtIOSerial *vser)
+static int virtser_bus_reset(BusState *qbus)
{
+ VirtIOSerialBus *bus = DO_UPCAST(VirtIOSerialBus, qbus, qbus);
VirtIOSerialPort *port;
VirtIOSerialPortClass *vsc;
- QTAILQ_FOREACH(port, &vser->ports, next) {
+ QTAILQ_FOREACH(port, &bus->vser->ports, next) {
vsc = VIRTIO_SERIAL_PORT_GET_CLASS(port);
if (port->guest_connected) {
port->guest_connected = false;
@@ -546,6 +547,7 @@ static void guest_reset(VirtIOSerial *vser)
vsc->guest_close(port);
}
}
+ return 0;
}
static void set_status(VirtIODevice *vdev, uint8_t status)
@@ -566,17 +568,6 @@ static void set_status(VirtIODevice *vdev, uint8_t status)
*/
port->guest_connected = true;
}
- if (!(status & VIRTIO_CONFIG_S_DRIVER_OK)) {
- guest_reset(vser);
- }
-}
-
-static void vser_reset(VirtIODevice *vdev)
-{
- VirtIOSerial *vser;
-
- vser = DO_UPCAST(VirtIOSerial, vdev, vdev);
- guest_reset(vser);
}
static void virtio_serial_save(QEMUFile *f, void *opaque)
@@ -766,6 +757,7 @@ static void virtser_bus_class_init(ObjectClass *klass, void
*data)
{
BusClass *k = BUS_CLASS(klass);
k->print_dev = virtser_bus_dev_print;
+ k->reset = virtser_bus_reset;
}
static const TypeInfo virtser_bus_info = {
@@ -985,7 +977,6 @@ VirtIODevice *virtio_serial_init(DeviceState *dev,
virtio_serial_conf *conf)
vser->vdev.get_config = get_config;
vser->vdev.set_config = set_config;
vser->vdev.set_status = set_status;
- vser->vdev.reset = vser_reset;
vser->qdev = dev;
--
1.8.0.2
- Re: [Qemu-devel] [PATCH 01/15] qdev: do not reset a device until the parent has been initialized, (continued)
- [Qemu-devel] [PATCH 03/15] pci: clean up resetting of IRQs, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 05/15] virtio-s390: add a reset function to virtio-s390 devices, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 06/15] qdev: add qbus_reset_all, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 04/15] virtio-pci: reset device before PCI layer, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 08/15] lsi: use qbus_reset_all to reset SCSI bus, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 07/15] pci: do not export pci_bus_reset, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 09/15] qdev: allow both pre- and post-order vists in qdev walking functions, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 10/15] qdev: switch reset to post-order, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 11/15] qdev: remove device_reset, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 15/15] virtio-serial: do not perform bus reset by hand,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 14/15] virtio-s390: reset all qbuses too when writing to the status field, Paolo Bonzini, 2012/12/17
- [Qemu-devel] [PATCH 13/15] virtio-pci: reset all qbuses too when writing to the status field, Paolo Bonzini, 2012/12/17
[Qemu-devel] [PATCH 12/15] qdev: document reset semantics, Paolo Bonzini, 2012/12/17
Re: [Qemu-devel] [PATCH 00/15] qdev: make reset semantics more clear and consistent, reset qbuses under virtio devices, Michael S. Tsirkin, 2012/12/17