|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Issue with MSI in a HVM domU with several passed through PCI devices
On Wed, 27 Jun 2012, Rolu wrote:
> > That's because msitranslate is still enabled somehow, that is a
> > toolstack bug.
> > While we fix that bug, could you try this QEMU patch to forcefully disable
> > msitranslate?
> >
>
> This worked!
>
> The "unsupported delivery mode" message is gone. Sound works, although
> there is still occasionally a very short stutter, but I expect that's
> a different issue. I've been testing with a KDE desktop with 3D
> effects (cube, expo, that sort of stuff) and performance there has
> gone up noticeably, from around 30-40 fps in most cases to near 60.
Great, good to hear!
Now that we have narrowed down the issue to msitranslate (that should be
disabled by default anyway), I would like to fix it entirely if possible.
Could you please try the appended patch, without any other patches
(therefore msitranslate would still be enabled)?
Thanks for testing!!
---
diff --git a/hw/pass-through.c b/hw/pass-through.c
index 8581253..fc8c49f 100644
--- a/hw/pass-through.c
+++ b/hw/pass-through.c
@@ -3841,21 +3841,18 @@ static int pt_msgctrl_reg_write(struct pt_dev *ptdev,
PT_LOG("guest enabling MSI, disable MSI-INTx translation\n");
pt_disable_msi_translate(ptdev);
}
- else
+ /* Init physical one */
+ PT_LOG("setup msi for dev %x\n", pd->devfn);
+ if (pt_msi_setup(ptdev))
{
- /* Init physical one */
- PT_LOG("setup msi for dev %x\n", pd->devfn);
- if (pt_msi_setup(ptdev))
- {
- /* 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;
- }
+ /* 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;
}
if (pt_msi_update(ptdev))
{
diff --git a/hw/pt-msi.c b/hw/pt-msi.c
index 70c4023..73f737d 100644
--- a/hw/pt-msi.c
+++ b/hw/pt-msi.c
@@ -263,16 +263,8 @@ void pt_disable_msi_translate(struct pt_dev *dev)
uint8_t e_device = 0;
uint8_t e_intx = 0;
- /* MSI_ENABLE bit should be disabed until the new handler is set */
- msi_set_enable(dev, 0);
-
- e_device = PCI_SLOT(dev->dev.devfn);
- e_intx = pci_intx(dev);
-
- if (xc_domain_unbind_pt_irq(xc_handle, domid, dev->msi->pirq,
- PT_IRQ_TYPE_MSI_TRANSLATE, 0,
- e_device, e_intx, 0))
- PT_LOG("Error: Unbinding pt irq for MSI-INTx failed!\n");
+ pt_msi_disable(dev);
+ dev->msi->flags |= MSI_FLAG_UNINIT;
if (dev->machine_irq)
{
@@ -280,8 +272,6 @@ void pt_disable_msi_translate(struct pt_dev *dev)
0, e_device, e_intx))
PT_LOG("Error: Rebinding of interrupt failed!\n");
}
-
- dev->msi_trans_en = 0;
}
static int pt_msix_update_one(struct pt_dev *dev, int entry_nr)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |