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

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

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] pt_msix_init: Error: Can't map physical MSI-X table: Invalid argument
From: Bruce Edge <bruce.edge@xxxxxxxxx>
Date: Tue, 20 Oct 2009 17:12:46 -0700
Delivery-date: Tue, 20 Oct 2009 17:13:12 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=TJtxlaH8UNHhZdYcOIiNSKyuZQ292dExmXqghtiWL1o=; b=ESj4lUIHS++dsfz6WmY1BugBRK/gF5MB/KbAcFeMeK12TAa9I1hAY0IhxzPajql8JH tfrHkng++4qlm9nTVSZCMfDXV42We2cYmexLXRKnrkgcxWSbEFy7jBauhgqgm13HHtQ7 Ms/kS8f6ZNI3W7nrnVOwyTcEbO+bPaOfEdOaY=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=g9jAWmwH0l3dZdbGQE67EM828hTT3j/XehS7gSxyNxaYXbuDP05e021swlnz14zt1S IgTKblQ6z1n4wvgyAXw5WV3V+/pTTjCBAYKUNKYVzlV66cWI1FNQfxMxW/uLdmRh/2UE mTCSn3rBvS9OpjljsE2G2a7+YQjzTbeOUK8SA=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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
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>

--- ./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