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

Re: [Xen-devel] [PATCH] [IOEMU] Fix wrong INTx for pass-through device


  • To: "Zhai, Edwin" <edwin.zhai@xxxxxxxxx>
  • From: Tom Rotenberg <tom.rotenberg@xxxxxxxxx>
  • Date: Mon, 28 Dec 2009 16:33:51 +0200
  • Cc: Simon Horman <horms@xxxxxxxxxxxx>, Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>, Xen Developers <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Mon, 28 Dec 2009 06:34:16 -0800
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=YO4edyYAuwwccN1keg9H2M5ZJ0pViI4JlzSlwp7IKksy/M1+6slepo84m9ZvGxrFJe DcUcMLLNAKxEAeQ8qt1Omjgz4BYtpJbNGAM2Pp1PeKcADIaD1i0WChF/FQppWtItYg9a LHGR1BZaBKrIaOtGTdoEfVhQbZi/jfQSrcSpI=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Hi,

I ran into similar problems last week, and i tried the following fix,
which looks like it kind-of fixed it, does this do the same fix as
your patch?

Here is the patch i used:

--- a/tools/ioemu/hw/pass-through.c     Sun Dec 27 11:56:08 2009 +0200
+++ b/tools/ioemu/hw/pass-through.c     Sun Dec 27 11:56:08 2009 +0200
@@ -4209,8 +4209,14 @@
  */
 uint8_t pci_intx(struct pt_dev *ptdev)
 {
 +#if 0    /* FIX */
      if (!PCI_FUNC(ptdev->dev.devfn))
          return 0;
 +#endif /* FIX */
 +
      return pci_read_intx(ptdev);
}

Tom

On Mon, Dec 28, 2009 at 9:04 AM, Zhai, Edwin <edwin.zhai@xxxxxxxxx> wrote:
> Simon,
> For the pass-through device's INTx emulation, we follow the policy: if
> virtual function 0, use INTA#, otherwise use hardware value. However, this
> policy only apply when bind_pt_pci_irq to xen, and always use physical value
> when exporting to guest. This discrepancy cause different INTx, thus
> different GSI in xen and guest, so that interrupts never got injected to
> guest. E.g. when assigning a USB controller with non-zero function(00:1d.2)
> to guest as 00:4.0, xen will see INTA#, while guest see INTC#.
>
> This simple patch can fix it. Could you pls. review it?
>
> Thanks,
>
> --
> best rgds,
> edwin
>
>
> Signed-Off-By: Zhai Edwin <edwin.zhai@xxxxxxxxx>
>
> diff --git a/hw/pass-through.c b/hw/pass-through.c
> index e7bd386..a08c0bf 100644
> --- a/hw/pass-through.c
> +++ b/hw/pass-through.c
> @@ -2710,7 +2710,8 @@ static uint32_t pt_status_reg_init(struct pt_dev
> *ptdev,
>  static uint32_t pt_irqpin_reg_init(struct pt_dev *ptdev,
>         struct pt_reg_info_tbl *reg, uint32_t real_offset)
>  {
> -    return ptdev->dev.config[real_offset];
> +    /* Translate xen INTx value to hw */
> +    return pci_intx(ptdev) + 1;
>  }
>
>  /* initialize BAR */
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
>
>

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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