[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


  • To: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
  • From: Bruce Edge <bruce.edge@xxxxxxxxx>
  • Date: Wed, 21 Oct 2009 08:51:06 -0700
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
  • Delivery-date: Wed, 21 Oct 2009 08:51:34 -0700
  • 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; b=A8INvy2yfmMI6t8e7qGGx2oGSCKAoC3AwbJLCTYFpk1ZCXWWtUlIzAbMIY8fuDP+1o YqpLt6t+y/YqjJCVclvPDX3cTTzuqF3ishP7LPHpR4VqPICH8VpgY152+oj/hmxvL6o4 hqekEr6dMp0sEuM0LYqRfmGGK5bR5x12EokE4=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

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>

Patch is demangled, unwrapped, attached and in-line.

-Bruce

--cut--
diff -Naur xen-unstable.hg/tools/ioemu-remote/hw/pass-through.h
xen-unstable.hg.msi-x-patch/tools/ioemu-remote/hw/pass-through.h
--- xen-unstable.hg/tools/ioemu-remote/hw/pass-through.h        2009-10-18
21:27:43.000000000 -0700
+++ xen-unstable.hg.msi-x-patch/tools/ioemu-remote/hw/pass-through.h    
2009-10-21
08:42:00.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 {
diff -Naur xen-unstable.hg/tools/ioemu-remote/hw/pt-msi.c
xen-unstable.hg.msi-x-patch/tools/ioemu-remote/hw/pt-msi.c
--- xen-unstable.hg/tools/ioemu-remote/hw/pt-msi.c      2009-10-18
21:27:43.000000000 -0700
+++ xen-unstable.hg.msi-x-patch/tools/ioemu-remote/hw/pt-msi.c  2009-10-21
08:39:43.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);
--cut--


On Wed, Oct 21, 2009 at 3:20 AM, Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> wrote:
> Bruce Edge writes ("[Xen-devel] [PATCH] pt_msix_init: Error: Can't map 
> physical MSI-X  table: Invalid argument"):
>> 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.
>
> This looks like a sensible patch.
>
>> If there is something wrong with the format or the contents please let me
>> know so that I can fix and resubmit.
>
> However, your mail program has mangled it:
>
>> --- ./tools/ioemu-remote/hw/pass-through.h.orig 2009-10-15
>> 10:22:17.000000000 -0700
>
> ^ Here it has linewrapped it.
>
>>    struct msix_entry_info msix_entry[0];
>> +       uint32_t table_offset_adjust;   /* page align mmap */
>>  };
>
> ^ And here the indentation is wrong (perhaps you have literal tabs
> with a tab width of 2 or something).
>
> Can you try to resubmit it please ?  Try including the patch as an
> attachment as well as in the body of the message.
>
> Thanks,
> Ian.
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
>

Attachment: msix-mmap-align.patch
Description: Text Data

_______________________________________________
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®.