|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] qemu-xen-traditional: Enable MSI after host sleep
On Thu, 10 May 2012, Jean Guyader wrote:
> After a host sleep MSI will be off on the host but qemu still thinks
> it's on because of some state that have been set previously.
>
> If qemu thinks that the device has been configure already
> and the host MSI are disabled tell Xen to reconfigure the MSI.
>
> Signed-off-by: Jean Guyader <jean.guyader@xxxxxxxxx>
>
>
> diff --git a/hw/pass-through.c b/hw/pass-through.c
> index f832c5a..5c32a2e 100644
> --- a/hw/pass-through.c
> +++ b/hw/pass-through.c
> @@ -3772,6 +3772,21 @@ static int pt_pmcsr_reg_write(struct pt_dev *ptdev,
> return 0;
> }
>
> +static int msi_is_enable(struct pt_dev *dev)
> +{
> + uint16_t val = 0;
> + uint32_t address = 0;
> + if (!dev->msi)
> + return 0;
> +
> + address = dev->msi->ctrl_offset;
> + if (!address)
> + return 0;
> +
> + val = pci_read_word(dev->pci_dev, address);
> + return val & PCI_MSI_FLAGS_ENABLE;
> +}
> +
> /* write Message Control register */
> static int pt_msgctrl_reg_write(struct pt_dev *ptdev,
> struct pt_reg_tbl *cfg_entry,
> @@ -3835,6 +3850,14 @@ static int pt_msgctrl_reg_write(struct pt_dev *ptdev,
> ptdev->msi->flags &= ~MSI_FLAG_UNINIT;
> ptdev->msi->flags |= PT_MSI_MAPPED;
> }
> + else
> + {
> + if (!msi_is_enable(ptdev))
> + {
> + pt_msi_setup(ptdev);
> + pt_msi_update(ptdev);
> + }
> + }
> ptdev->msi->flags |= PCI_MSI_FLAGS_ENABLE;
> }
> else
Would it make sense to replace the condition above:
if (ptdev->msi->flags & MSI_FLAG_UNINIT)
with the new condition you wrote?
if (!msi_is_enable(ptdev))
It seems more reliable to me.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |