On 10/05/15 11:41, Stephen Hemminger wrote:
On Sun,  4 Oct 2015 23:43:17 +0300
Vlad Zolotarov <vl...@cloudius-systems.com> wrote:

+static int setup_maps(struct pci_dev *pdev, struct uio_info *info)
+{
+       int i, m = 0, p = 0, err;
+       static const char * const bar_names[] = {
+               "BAR0",       "BAR1",       "BAR2",       "BAR3",       "BAR4",       
"BAR5",
+       };
+
+       for (i = 0; i < ARRAY_SIZE(bar_names); i++) {
+               unsigned long start = pci_resource_start(pdev, i);
+               unsigned long flags = pci_resource_flags(pdev, i);
+               unsigned long len = pci_resource_len(pdev, i);
+
+               if (start == 0 || len == 0)
+                       continue;
+
+               if (flags & IORESOURCE_MEM) {
+                       void __iomem *addr;
+
+                       if (m >= MAX_UIO_MAPS)
+                               continue;
+
+                       addr = ioremap(start, len);
+                       if (addr == NULL) {
+                               err = -EINVAL;
+                               goto fail;
+                       }
+
+                       info->mem[m].name = bar_names[i];
+                       info->mem[m].addr = start;
+                       info->mem[m].internal_addr = addr;
+                       info->mem[m].size = len;
+                       info->mem[m].memtype = UIO_MEM_PHYS;
+                       ++m;
+               } else if (flags & IORESOURCE_IO) {
+                       if (p >= MAX_UIO_PORT_REGIONS)
+                               continue;
+
+                       info->port[p].name = bar_names[i];
+                       info->port[p].start = start;
+                       info->port[p].size = len;
+                       info->port[p].porttype = UIO_PORT_X86;
+                       ++p;
+               }
+       }
+
+       return 0;
+fail:
+       for (i = 0; i < m; i++) {
+               iounmap(info->mem[i].internal_addr);
+               info->mem[i].internal_addr = NULL;
+       }
+
+       return err;
+
I wonder do we really have to setup all the BAR's in uio_pci_generic?
The DPDK code works with uio_pci_generic already, and it didn't setup the BAR's.
One possible issue is that without that maybe kernel would not know about the
region used for MSI-X vectors table.

So, what's your point? It sounds like u are for setting the mappings in the uio_pci_generic after all, aren't u? ;)


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to