[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 04/10] megasas: change behaviour of msix switch
From: |
Cao jin |
Subject: |
[Qemu-devel] [PATCH v7 04/10] megasas: change behaviour of msix switch |
Date: |
Mon, 14 Nov 2016 15:25:34 +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>
Reviewed-by: Hannes Reinecke <address@hidden>
Signed-off-by: Cao jin <address@hidden>
---
hw/scsi/megasas.c | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c
index fada834..6cef9a3 100644
--- a/hw/scsi/megasas.c
+++ b/hw/scsi/megasas.c
@@ -2353,19 +2353,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, &err)) {
- /*TODO: check msix_init's error, and should fail on msix=on */
- error_report_err(err);
- s->msix = ON_OFF_AUTO_OFF;
- }
-
if (pci_is_express(dev)) {
pcie_endpoint_cap_init(dev, 0xa0);
}
--
2.1.0
- [Qemu-devel] [PATCH v7 00/10] Convert msix_init() to error, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 01/10] msix: Follow CODING_STYLE, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 02/10] hcd-xhci: check & correct param before using it, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 06/10] megasas: remove unnecessary megasas_use_msix(), Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 04/10] megasas: change behaviour of msix switch,
Cao jin <=
- [Qemu-devel] [PATCH v7 10/10] msi_init: convert assert to return -errno, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 07/10] megasas: undo the overwrites of msi user configuration, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 09/10] vmxnet3: remove unnecessary internal msix flag, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 05/10] hcd-xhci: change behaviour of msix switch, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 03/10] pci: Convert msix_init() to Error and fix callers to check it, Cao jin, 2016/11/14
- [Qemu-devel] [PATCH v7 08/10] vmxnet3: fix reference leak issue, Cao jin, 2016/11/14
- Re: [Qemu-devel] [PATCH v7 00/10] Convert msix_init() to error, Michael S. Tsirkin, 2016/11/14