[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 38/47] hcd-xhci: change behaviour of msix switch
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 38/47] hcd-xhci: change behaviour of msix switch |
Date: |
Thu, 10 Nov 2016 18:14:15 +0200 |
From: Cao jin <address@hidden>
Resolve the TODO, msix=auto means msix on; if user specify msix=on,
then device creation fail on msix_init failure.
CC: Gerd Hoffmann <address@hidden>
CC: Michael S. Tsirkin <address@hidden>
CC: Markus Armbruster <address@hidden>
CC: Marcel Apfelbaum <address@hidden>
Reviewed-by: Gerd Hoffmann <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Cao jin <address@hidden>
Acked-by: Marcel Apfelbaum <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
hw/usb/hcd-xhci.c | 35 ++++++++++++++++++++++++-----------
1 file changed, 24 insertions(+), 11 deletions(-)
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index 05dc944..4767045 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3636,12 +3636,14 @@ static void usb_xhci_realize(struct PCIDevice *dev,
Error **errp)
if (xhci->numintrs < 1) {
xhci->numintrs = 1;
}
+
if (xhci->numslots > MAXSLOTS) {
xhci->numslots = MAXSLOTS;
}
if (xhci->numslots < 1) {
xhci->numslots = 1;
}
+
if (xhci_get_flag(xhci, XHCI_FLAG_ENABLE_STREAMS)) {
xhci->max_pstreams_mask = 7; /* == 256 primary streams */
} else {
@@ -3666,6 +3668,28 @@ static void usb_xhci_realize(struct PCIDevice *dev,
Error **errp)
}
memory_region_init(&xhci->mem, OBJECT(xhci), "xhci", LEN_REGS);
+ if (xhci->msix != ON_OFF_AUTO_OFF) {
+ ret = msix_init(dev, xhci->numintrs,
+ &xhci->mem, 0, OFF_MSIX_TABLE,
+ &xhci->mem, 0, OFF_MSIX_PBA,
+ 0x90, &err);
+ /* Any error other than -ENOTSUP(board's MSI support is broken)
+ * is a programming error */
+ assert(!ret || ret == -ENOTSUP);
+ if (ret && xhci->msix == ON_OFF_AUTO_ON) {
+ /* Can't satisfy user's explicit msix=on request, fail */
+ error_append_hint(&err, "You have to use msix=auto (default) or "
+ "msix=off with this machine type.\n");
+ /* No instance_finalize method, need to free the resource here */
+ object_unref(OBJECT(&xhci->mem));
+ error_propagate(errp, err);
+ return;
+ }
+ assert(!err || xhci->msix == ON_OFF_AUTO_AUTO);
+ /* With msix=auto, we fall back to MSI off silently */
+ error_free(err);
+ }
+
memory_region_init_io(&xhci->mem_cap, OBJECT(xhci), &xhci_cap_ops, xhci,
"capabilities", LEN_CAP);
memory_region_init_io(&xhci->mem_oper, OBJECT(xhci), &xhci_oper_ops, xhci,
@@ -3701,17 +3725,6 @@ static void usb_xhci_realize(struct PCIDevice *dev,
Error **errp)
ret = pcie_endpoint_cap_init(dev, 0xa0);
assert(ret >= 0);
}
-
- if (xhci->msix != ON_OFF_AUTO_OFF) {
- /* TODO check for errors, and should fail when msix=on */
- ret = msix_init(dev, xhci->numintrs,
- &xhci->mem, 0, OFF_MSIX_TABLE,
- &xhci->mem, 0, OFF_MSIX_PBA,
- 0x90, &err);
- if (ret) {
- error_report_err(err);
- }
- }
}
static void usb_xhci_exit(PCIDevice *dev)
--
MST
- [Qemu-devel] [PULL 27/47] nvdimm acpi: cleanup nvdimm_build_fit, (continued)
- [Qemu-devel] [PULL 27/47] nvdimm acpi: cleanup nvdimm_build_fit, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 26/47] nvdimm acpi: rename nvdimm_plugged_device_list, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 28/47] nvdimm acpi: rename nvdimm_acpi_hotplug, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 29/47] nvdimm acpi: define DSM return codes, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 30/47] nvdimm acpi: fix two comments, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 31/47] nvdimm acpi: rename nvdimm_dsm_reserved_root, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 32/47] nvdimm acpi: use aml_name_decl to define named object, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 33/47] nvdimm acpi: introduce NVDIMM_DSM_MEMORY_SIZE, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 34/47] msix: Follow CODING_STYLE, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 35/47] hcd-xhci: check & correct param before using it, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 38/47] hcd-xhci: change behaviour of msix switch,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 37/47] megasas: change behaviour of msix switch, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 40/47] megasas: undo the overwrites of msi user configuration, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 36/47] pci: Convert msix_init() to Error and fix callers to check it, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 39/47] megasas: remove unnecessary megasas_use_msix(), Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 42/47] vmxnet3: remove unnecessary internal msix flag, Michael S. Tsirkin, 2016/11/10
- [Qemu-devel] [PULL 41/47] vmxnet3: fix reference leak issue, Michael S. Tsirkin, 2016/11/10