|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] qemu-xen-trad: fix msi_translate with PV event delivery
On Fri, 29 Jun 2012, Stefano Stabellini wrote:
> When switching from msitranslate to straight msi we need to make sure
> that we respect PV event delivery for the msi if the guest asked for it:
>
> - completely disable MSI on the device in pt_disable_msi_translate;
> - then enable MSI again (pt_msi_setup), mapping the correct pirq to it.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> Tested-by: Rolu <rolu@xxxxxxxx>
ping
> ---
>
> 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 |