[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v9 05/11] megasas: change behaviour of msix switch
From: |
Cao jin |
Subject: |
[Qemu-devel] [PATCH v9 05/11] megasas: change behaviour of msix switch |
Date: |
Tue, 17 Jan 2017 14:18:50 +0800 |
Resolve the TODO, msix=auto means msix on; if user specify msix=on,
then device creation fail on msix_init failure.
Also undo the overwrites of user configuration of msix.
CC: Michael S. Tsirkin <address@hidden>
CC: Hannes Reinecke <address@hidden>
CC: Paolo Bonzini <address@hidden>
CC: Markus Armbruster <address@hidden>
CC: Marcel Apfelbaum <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Acked-by: Marcel Apfelbaum <address@hidden>
Signed-off-by: Cao jin <address@hidden>
---
hw/scsi/megasas.c | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
index 095dba8b36de..14d6e0c6d565 100644
--- a/hw/scsi/megasas.c
+++ b/hw/scsi/megasas.c
@@ -2359,18 +2359,31 @@ static void megasas_scsi_realize(PCIDevice *dev, Error
**errp)
memory_region_init_io(&s->mmio_io, OBJECT(s), &megasas_mmio_ops, s,
"megasas-mmio", 0x4000);
+ if (megasas_use_msix(s)) {
+ ret = msix_init(dev, 15, &s->mmio_io, b->mmio_bar, 0x2000,
+ &s->mmio_io, b->mmio_bar, 0x3800, 0x68, &err);
+ /* Any error other than -ENOTSUP(board's MSI support is broken)
+ * is a programming error */
+ assert(!ret || ret == -ENOTSUP);
+ if (ret && s->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(&s->mmio_io));
+ error_propagate(errp, err);
+ return;
+ }
+ assert(!err || s->msix == ON_OFF_AUTO_AUTO);
+ /* With msix=auto, we fall back to MSI off silently */
+ error_free(err);
+ }
+
memory_region_init_io(&s->port_io, OBJECT(s), &megasas_port_ops, s,
"megasas-io", 256);
memory_region_init_io(&s->queue_io, OBJECT(s), &megasas_queue_ops, s,
"megasas-queue", 0x40000);
- if (megasas_use_msix(s) &&
- msix_init(dev, 15, &s->mmio_io, b->mmio_bar, 0x2000,
- &s->mmio_io, b->mmio_bar, 0x3800, 0x68, NULL)) {
- /* TODO: check msix_init's error, and should fail on msix=on */
- s->msix = ON_OFF_AUTO_OFF;
- }
-
if (pci_is_express(dev)) {
pcie_endpoint_cap_init(dev, 0xa0);
}
--
2.1.0
- [Qemu-devel] [PATCH v9 00/11] Convert msix_init() to error, Cao jin, 2017/01/17
- [Qemu-devel] [PATCH v9 02/11] hcd-xhci: check & correct param before using it, Cao jin, 2017/01/17
- [Qemu-devel] [PATCH v9 01/11] msix: Follow CODING_STYLE, Cao jin, 2017/01/17
- [Qemu-devel] [PATCH v9 10/11] msi_init: convert assert to return -errno, Cao jin, 2017/01/17
- [Qemu-devel] [PATCH v9 05/11] megasas: change behaviour of msix switch,
Cao jin <=
- [Qemu-devel] [PATCH v9 04/11] msix: check msix_init's return value, Cao jin, 2017/01/17
- Re: [Qemu-devel] [PATCH v9 04/11] msix: check msix_init's return value, Paolo Bonzini, 2017/01/24
- Re: [Qemu-devel] [PATCH v9 04/11] msix: check msix_init's return value, Michael S. Tsirkin, 2017/01/24
[Qemu-devel] [PATCH v9 03/11] pci: Convert msix_init() to Error and fix callers, Cao jin, 2017/01/17