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

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



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


 


Rackspace

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