Bruce Edge
2009-Oct-23 16:09 UTC
[Xen-devel] [PATCH] ioemu-remote: Align MSI-X table mmap/munmap - please apply
Figured out by cargo-culting that patches to qemu need to be based from tools/ioemu-remote and have same in subject. Resubmitting this patch re-based accordingly. If someone else needs to be in the cc for qemu patches, please let me know. 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@gmail.com> diff -Naur a/hw/pass-through.h b/hw/pass-through.h --- a/hw/pass-through.h 2009-10-18 21:27:43.000000000 -0700 +++ b/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 a/hw/pt-msi.c b/hw/pt-msi.c --- a/hw/pt-msi.c 2009-10-18 21:27:43.000000000 -0700 +++ b/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); _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Jackson
2009-Oct-23 16:55 UTC
[Xen-devel] Re: [PATCH] ioemu-remote: Align MSI-X table mmap/munmap - please apply
Bruce Edge writes ("[PATCH] ioemu-remote: Align MSI-X table mmap/munmap - please apply"):> Figured out by cargo-culting that patches to qemu need to be based > from tools/ioemu-remote and have same in subject. > Resubmitting this patch re-based accordingly.In fact your message on Wednesday was fine but it came so quickly after my response that I mistook it for the first one rather than the resend. Sorry for not paying attention properly. There''s no particular need to CC me (or base your patch anywhere in particular) although it does help to remind me if I seem to have missed your patch as I do sometimes make a mistake and overlook something. I''ve applied your change now. Regards, Ian. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel