[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] qemu-xen-traditional: Enable MSI after host sleep (v2)



On 11 May 2012 17:06, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> wrote:
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..a6a9b7a 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,
> @@ -3803,8 +3818,7 @@ static int pt_msgctrl_reg_write(struct pt_dev *ptdev,
>      /* update MSI */
>      if (val & PCI_MSI_FLAGS_ENABLE)
>      {
> -        /* setup MSI pirq for the first time */
> -        if (ptdev->msi->flags & MSI_FLAG_UNINIT)
> +        if (!msi_is_enable(ptdev))
>          {
>              if (ptdev->msi_trans_en) {
>                  PT_LOG("guest enabling MSI, disable MSI-INTx translation\n");
> diff --git a/hw/pt-msi.c b/hw/pt-msi.c
> index 70c4023..99f9afd 100644
> --- a/hw/pt-msi.c
> +++ b/hw/pt-msi.c
> @@ -67,12 +67,6 @@ int pt_msi_setup(struct pt_dev *dev)
>      int pirq = -1;
>      uint8_t gvec = 0;
>
> -    if ( !(dev->msi->flags & MSI_FLAG_UNINIT) )
> -    {
> -        PT_LOG("Error: setup physical after initialized?? \n");
> -        return -1;
> -    }
> -
>      gvec = dev->msi->data & 0xFF;
>      if (!gvec) {
>          /* if gvec is 0, the guest is asking for a particular pirq that

The patch makes sense.
Only one last comment, sorry for not having noticed this before, but
there might be another (flags & MSI_FLAG_UNINIT) check that should
probably be changed into msi_is_enable in pt_msi_disable.

Also I think that we should always call pt_msi_setup (the first time) even if the MSI are set in the config space.
It should maybe look like my first patch.

Jean

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.