[dpdk-dev] [PATCH v2 5/6] eal: Use map_idx in pci_uio_map_resource() of bsdapp to work same as linuxapp
Iremonger, Bernard
bernard.iremonger at intel.com
Wed Mar 25 16:27:04 CET 2015
> -----Original Message-----
> From: Tetsuya Mukawa [mailto:mukawa at igel.co.jp]
> Sent: Tuesday, March 24, 2015 4:19 AM
> To: dev at dpdk.org
> Cc: Iremonger, Bernard; Richardson, Bruce; david.marchand at 6wind.com; Tetsuya Mukawa
> Subject: [PATCH v2 5/6] eal: Use map_idx in pci_uio_map_resource() of bsdapp to work same as
> linuxapp
>
> This patch changes code that maps pci resources in bsdapp.
> Linuxapp has almost same code. To consolidate both, fix implementation of bsdapp to work same as
> linuxapp.
>
> Signed-off-by: Tetsuya Mukawa <mukawa at igel.co.jp>
> ---
> lib/librte_eal/bsdapp/eal/eal_pci.c | 24 ++++++++++++------------
> 1 file changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c b/lib/librte_eal/bsdapp/eal/eal_pci.c
> index 85f8671..08b91b4 100644
> --- a/lib/librte_eal/bsdapp/eal/eal_pci.c
> +++ b/lib/librte_eal/bsdapp/eal/eal_pci.c
> @@ -195,7 +195,7 @@ pci_uio_map_secondary(struct rte_pci_device *dev) static int
> pci_uio_map_resource(struct rte_pci_device *dev) {
> - int i, j;
> + int i, map_idx;
> char devname[PATH_MAX]; /* contains the /dev/uioX */
> void *mapaddr;
> uint64_t phaddr;
> @@ -247,31 +247,31 @@ pci_uio_map_resource(struct rte_pci_device *dev)
> pagesz = sysconf(_SC_PAGESIZE);
>
> maps = uio_res->maps;
> - for (i = uio_res->nb_maps = 0; i != PCI_MAX_RESOURCE; i++) {
> + for (i = 0, map_idx = 0; i != PCI_MAX_RESOURCE; i++) {
>
> - j = uio_res->nb_maps;
> /* skip empty BAR */
> if ((phaddr = dev->mem_resource[i].phys_addr) == 0)
> continue;
>
> /* if matching map is found, then use it */
> offset = i * pagesz;
> - maps[j].offset = offset;
> - maps[j].phaddr = dev->mem_resource[i].phys_addr;
> - maps[j].size = dev->mem_resource[i].len;
> - if (maps[j].addr != NULL ||
> - (mapaddr = pci_map_resource(NULL, devname, (off_t)offset,
> - (size_t)maps[j].size)
> - ) == NULL) {
> + maps[map_idx].offset = offset;
> + maps[map_idx].phaddr = dev->mem_resource[i].phys_addr;
> + maps[map_idx].size = dev->mem_resource[i].len;
> + mapaddr = pci_map_resource(NULL, devname, (off_t)offset,
> + (size_t)maps[map_idx].size);
> + if ((maps[map_idx].addr != NULL) || (mapaddr == NULL)) {
Hi Tetsuya,
Should be checking for if (mapaddr == MAP_FAILED) here.
Seems to be fixed in patch 6/6 though.
Regards,
Bernard.
> rte_free(uio_res);
> return -1;
> }
>
> - maps[j].addr = mapaddr;
> - uio_res->nb_maps++;
> + maps[map_idx].addr = mapaddr;
> + map_idx++;
> dev->mem_resource[i].addr = mapaddr;
> }
>
> + uio_res->nb_maps = map_idx;
> +
> TAILQ_INSERT_TAIL(uio_res_list, uio_res, next);
>
> return 0;
> --
> 1.9.1
More information about the dev
mailing list