[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/33] virtio-serial: enable virtio console emergency
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 03/33] virtio-serial: enable virtio console emergency write feature |
Date: |
Mon, 10 Oct 2016 05:57:37 +0300 |
From: Sascha Silbe <address@hidden>
Add support for enabling the virtio 1.0 "emergency write"
(VIRTIO_CONSOLE_F_EMERG_WRITE) feature. The previous patch introduced
the plumbing required for this; now we expose the virtio feature to
the guest. The feature is disabled for compatibility machines to avoid
exposing a new feature to existing guests.
As required by the virtio 1.0 spec, the emergency write functionality
is available to the guest even if the guest doesn't negotatiate the
feature, as well as before feature negotation.
Reviewed-by: Cornelia Huck <address@hidden>
Signed-off-by: Sascha Silbe <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
include/hw/compat.h | 4 ++++
include/hw/virtio/virtio-serial.h | 2 ++
hw/char/virtio-serial-bus.c | 12 +++++++++---
3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 46412b2..ef3fae3 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -7,6 +7,10 @@
.property = "page-per-vq",\
.value = "on",\
},{\
+ .driver = "virtio-serial-device",\
+ .property = "emergency-write",\
+ .value = "off",\
+ },{\
.driver = "ioapic",\
.property = "version",\
.value = "0x11",\
diff --git a/include/hw/virtio/virtio-serial.h
b/include/hw/virtio/virtio-serial.h
index 730c88d..b19c447 100644
--- a/include/hw/virtio/virtio-serial.h
+++ b/include/hw/virtio/virtio-serial.h
@@ -184,6 +184,8 @@ struct VirtIOSerial {
struct VirtIOSerialPostLoad *post_load;
virtio_serial_conf serial;
+
+ uint64_t host_features;
};
/* Interface to the virtio-serial bus */
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
index 57419b2..db2a9f1 100644
--- a/hw/char/virtio-serial-bus.c
+++ b/hw/char/virtio-serial-bus.c
@@ -541,6 +541,7 @@ static uint64_t get_features(VirtIODevice *vdev, uint64_t
features,
vser = VIRTIO_SERIAL(vdev);
+ features |= vser->host_features;
if (vser->bus.max_nr_ports > 1) {
virtio_add_feature(&features, VIRTIO_CONSOLE_F_MULTIPORT);
}
@@ -1003,6 +1004,7 @@ static void virtio_serial_device_realize(DeviceState
*dev, Error **errp)
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
VirtIOSerial *vser = VIRTIO_SERIAL(dev);
uint32_t i, max_supported_ports;
+ size_t config_size = sizeof(struct virtio_console_config);
if (!vser->serial.max_virtserial_ports) {
error_setg(errp, "Maximum number of serial ports not specified");
@@ -1017,10 +1019,12 @@ static void virtio_serial_device_realize(DeviceState
*dev, Error **errp)
return;
}
- /* We don't support emergency write, skip it for now. */
- /* TODO: cleaner fix, depending on host features. */
+ if (!virtio_has_feature(vser->host_features,
+ VIRTIO_CONSOLE_F_EMERG_WRITE)) {
+ config_size = offsetof(struct virtio_console_config, emerg_wr);
+ }
virtio_init(vdev, "virtio-serial", VIRTIO_ID_CONSOLE,
- offsetof(struct virtio_console_config, emerg_wr));
+ config_size);
/* Spawn a new virtio-serial bus on which the ports will ride as devices */
qbus_create_inplace(&vser->bus, sizeof(vser->bus), TYPE_VIRTIO_SERIAL_BUS,
@@ -1116,6 +1120,8 @@ VMSTATE_VIRTIO_DEVICE(console, 3, virtio_serial_load,
virtio_vmstate_save);
static Property virtio_serial_properties[] = {
DEFINE_PROP_UINT32("max_ports", VirtIOSerial, serial.max_virtserial_ports,
31),
+ DEFINE_PROP_BIT64("emergency-write", VirtIOSerial, host_features,
+ VIRTIO_CONSOLE_F_EMERG_WRITE, true),
DEFINE_PROP_END_OF_LIST(),
};
--
MST
- [Qemu-devel] [PULL 00/33] virtio, pc: fixes and features, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 02/33] virtio-serial: add plumbing for virtio console emergency write support, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 01/33] virtio-balloon: Remove needless precompiled directive, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 03/33] virtio-serial: enable virtio console emergency write feature,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 06/33] tests: acpi: extend cphp testcase with numa check, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 08/33] virtio: add virtio_detach_element(), Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 07/33] tests: acpi tables expected blobs update, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 05/33] acpi: provide _PXM method for CPU devices if QEMU is started numa enabled, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 09/33] virtio-blk: add missing virtio_detach_element() call, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 04/33] numa: reduce code duplication by adding helper numa_get_node_for_cpu(), Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 17/33] virtio-net: handle virtio_net_flush_tx() errors, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 19/33] virtio-scsi: handle virtio_scsi_set_config() error, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 13/33] virtio-9p: handle handle_9p_output() error, Michael S. Tsirkin, 2016/10/09
- [Qemu-devel] [PULL 18/33] virtio-scsi: convert virtio_scsi_bad_req() to use virtio_error(), Michael S. Tsirkin, 2016/10/09