WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] pt_msix_init: Error: Can't map physical MSI-X ta

To: Bruce Edge <bruce.edge@xxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] pt_msix_init: Error: Can't map physical MSI-X table: Invalid argument
From: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Date: Wed, 21 Oct 2009 08:19:23 +0100
Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Delivery-date: Wed, 21 Oct 2009 00:19:55 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <45c43ef50910201712qce79e09lbaa15167f2a4c28f@xxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcpR40kMGNHLIyX8TrSfJOz+1YR9cQAO4c0k
Thread-topic: [Xen-devel] [PATCH] pt_msix_init: Error: Can't map physical MSI-X table: Invalid argument
User-agent: Microsoft-Entourage/12.20.0.090605
If you don't cc Ian Jackson, the tree maintainer, the patch may get missed.

 -- Keir

On 21/10/2009 01:12, "Bruce Edge" <bruce.edge@xxxxxxxxx> wrote:

> I submitted this patch last week and did'nt see any feedback or indication as
> to why it would not be accepted.
> This is a confirmed tested fix that is required for pci passthorugh with
> msi-x.
> 
> If there is something wrong with the format or the contents please let me know
> so that I can fix and resubmit.
> 
> Thanks in advance.
> 
> -Bruce
> 
> Force msi-x init mmap to a page boundary or mmap fails with.
>     pt_msix_init: Error: Can't map physical MSI-X table: Invalid argument
> 
> Signed-off-by: Bruce Edge <bruce.edge@xxxxxxxxx <mailto:Bruce.edge@xxxxxxx> >
> 
> --- ./tools/ioemu-remote/hw/pass-through.h.orig 2009-10-15
> 10:22:17.000000000 -0700
> +++ ./tools/ioemu-remote/hw/pass-through.h      2009-10-15
> 11:08:58.000000000 -0700
> @@ -193,6 +193,7 @@
>     int mmio_index;
>     void *phys_iomem_base;
>     struct msix_entry_info msix_entry[0];
> +       uint32_t table_offset_adjust;   /* page align mmap */
>  };
> 
>  struct pt_pm_info {
> 
> 
> --- ./tools/ioemu-remote/hw/pt-msi.c.orig       2009-10-13
> 11:54:11.000000000 -0700
> +++ ./tools/ioemu-remote/hw/pt-msi.c    2009-10-15 10:29:50.000000000 -0700
> @@ -542,6 +542,7 @@
>     int i, total_entries, table_off, bar_index;
>     struct pci_dev *pd = dev->pci_dev;
>     int fd;
> +    int err;
> 
>     id = pci_read_byte(pd, pos + PCI_CAP_LIST_ID);
> 
> @@ -584,9 +585,15 @@
>         PT_LOG("Error: Can't open /dev/mem: %s\n", strerror(errno));
>         goto error_out;
>     }
> -    dev->msix->phys_iomem_base = mmap(0, total_entries * 16,
> +    PT_LOG("table_off = %llx, total_entries = %d\n",table_off,total_entries);
> +    dev->msix->table_offset_adjust = table_off & 0x0fff;
> +    dev->msix->phys_iomem_base = mmap(0, total_entries * 16 +
> dev->msix->table_offset_adjust,
>                           PROT_WRITE | PROT_READ, MAP_SHARED | MAP_LOCKED,
> -                          fd, dev->msix->table_base + table_off);
> +                          fd, dev->msix->table_base + table_off -
> dev->msix->table_offset_adjust);
> +    dev->msix->phys_iomem_base = (void *)((char *)dev->msix->phys_iomem_base
> +
> +                          dev->msix->table_offset_adjust);
> +    err = errno;
> +    PT_LOG("errno = %d\n",err);
>     if ( dev->msix->phys_iomem_base == MAP_FAILED )
>     {
>         PT_LOG("Error: Can't map physical MSI-X table: %s\n",
> strerror(errno));
> @@ -612,7 +619,8 @@
>     {
>         PT_LOG("unmapping physical MSI-X table from %lx\n",
>            (unsigned long)dev->msix->phys_iomem_base);
> -        munmap(dev->msix->phys_iomem_base, dev->msix->total_entries * 16);
> +        munmap(dev->msix->phys_iomem_base, dev->msix->total_entries * 16 +
> +           dev->msix->table_offset_adjust);
>     }
> 
>     free(dev->msix);
> 
> 
> 



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