]> xenbits.xensource.com Git - qemu-xen-3.3-testing.git/commitdiff
Contain MSI errors in msi emulation code
authorIan Jackson <ian.jackson@eu.citrix.com>
Wed, 26 Nov 2008 17:18:19 +0000 (17:18 +0000)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Wed, 26 Nov 2008 17:18:35 +0000 (17:18 +0000)
If msi=0 is specified and guest want to enable msi, qemu finds it can
not enable it and quits.  (This problem is not appicable for xen
unstable since the "msi=x" switch is removed.)  This patch let these
cases be handled inside msi emulation code. If qemu can not enable
msi, guest will not receive MSI.  But Qemu can still go on.  But if
guest driver does not test MSI's functionality, guest device will stop
to function.

Submitted-By: Haitao Shan
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
hw/pass-through.c

index 77ab759a59cf0ccc8fbdd2085f5c0c430ad567e6..0cb4008fe0cf798cc4284001e84c57a3c8c24c52 100644 (file)
@@ -2701,8 +2701,14 @@ static int pt_msgctrl_reg_write(struct pt_dev *ptdev,
             PT_LOG("setup msi for dev %x\n", pd->devfn);
             if (pt_msi_setup(ptdev))
             {
-                PT_LOG("pt_msi_setup error!!!\n");
-                return -1;
+                /* We do not broadcast the error to the framework code, so that
+                 * MSI errors are contained in MSI emulation code and QEMU
+                 * can go on running.
+                 * Guest MSI would be actually not working.
+                 */
+                *value &= ~PCI_MSI_FLAGS_ENABLE;
+                PT_LOG("Warning: Can not map MSI for dev %x\n", pd->devfn);
+                return 0;
             }
             pt_msi_update(ptdev);