From 723fef99c0e29d1a327aaea4cef477609f6ccbc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Mon, 28 Nov 2016 17:37:39 +0100 Subject: [PATCH] qemu: enforce maximum ports value for nec-xhci This controller only allows up to 15 ports. https://bugzilla.redhat.com/show_bug.cgi?id=1375417 --- src/qemu/qemu_domain.c | 12 ++++++++++++ .../qemuxml2argv-usb-controller-xhci-limit.xml | 16 ++++++++++++++++ tests/qemuxml2argvtest.c | 3 +++ 3 files changed, 31 insertions(+) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci-limit.xml diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 7c696963e6..f62bf8f1d8 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3005,6 +3005,9 @@ qemuDomainShmemDefPostParse(virDomainShmemDefPtr shm) } +#define QEMU_USB_NEC_XHCI_MAXPORTS 15 + + static int qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, const virDomainDef *def, @@ -3159,6 +3162,15 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, if (dev->type == VIR_DOMAIN_DEVICE_CONTROLLER) { virDomainControllerDefPtr cont = dev->data.controller; + if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB && + cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI && + cont->opts.usbopts.ports > QEMU_USB_NEC_XHCI_MAXPORTS) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("nec-xhci controller only supports up to %u ports"), + QEMU_USB_NEC_XHCI_MAXPORTS); + goto cleanup; + } + if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) { if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS && !qemuDomainMachineIsI440FX(def)) { diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci-limit.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci-limit.xml new file mode 100644 index 0000000000..5ff2de7502 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-controller-xhci-limit.xml @@ -0,0 +1,16 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + + /usr/bin/qemu + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 8d737fdc85..faa99c64cc 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1418,6 +1418,9 @@ mymain(void) QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS, QEMU_CAPS_USB_HUB); + DO_TEST_PARSE_ERROR("usb-controller-xhci-limit", + QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI, + QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS); DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE); DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);