[dpdk-dev] [PATCH v2 01/16] Separate igb_uio mapping into a separate file

Thomas Monjalon thomas.monjalon at 6wind.com
Wed May 21 14:42:23 CEST 2014


Hi Anatoly,

2014-05-19 16:51, Anatoly Burakov:
> In order to make the code a bit more clean while using multiple
> drivers, IGB_UIO mapping has been separated into its own file.
> 
> Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>

[...]
>  /* map a particular resource from a file */
> -static void *
> -pci_map_resource(void *requested_addr, const char *devname, off_t offset,
> +void *
> +pci_map_resource(void *requested_addr, int fd, off_t offset,
>  		 size_t size)
>  {
> -	int fd;
>  	void *mapaddr;
> 
> -	/*
> -	 * open devname, to mmap it
> -	 */
> -	fd = open(devname, O_RDWR);
> -	if (fd < 0) {
> -		RTE_LOG(ERR, EAL, "Cannot open %s: %s\n",
> -			devname, strerror(errno));
> -		goto fail;
> -	}
> -
>  	/* Map the PCI memory resource of device */
>  	mapaddr = mmap(requested_addr, size, PROT_READ | PROT_WRITE,
>  			MAP_SHARED, fd, offset);
> -	close(fd);
>  	if (mapaddr == MAP_FAILED ||
>  			(requested_addr != NULL && mapaddr != requested_addr)) {
> -		RTE_LOG(ERR, EAL, "%s(): cannot mmap(%s(%d), %p, 0x%lx, 0x%lx):"
> -			" %s (%p)\n", __func__, devname, fd, requested_addr,
> +		RTE_LOG(ERR, EAL, "%s(): cannot mmap(%d, %p, 0x%lx, 0x%lx):"
> +			" %s (%p)\n", __func__, fd, requested_addr,
>  			(unsigned long)size, (unsigned long)offset,
>  			strerror(errno), mapaddr);
>  		goto fail;
[...]
> -static int
> -pci_uio_map_resource(struct rte_pci_device *dev)
[...]
> -		/* if matching map is found, then use it */
> -		if (j != nb_maps) {
> -			offset = j * pagesz;
> -			if (maps[j].addr != NULL ||
> -			    (mapaddr = pci_map_resource(NULL, devname,
> -							(off_t)offset,
> -							(size_t)maps[j].size)
> -			    ) == NULL) {
> -				rte_free(uio_res);
> -				return (-1);
> -			}
> -
> -			maps[j].addr = mapaddr;
> -			maps[j].offset = offset;
> -			dev->mem_resource[i].addr = mapaddr;
> -		}
[...]
> +		/* if matching map is found, then use it */
> +		if (j != nb_maps) {
> +			offset = j * pagesz;
> +
> +			/*
> +			 * open devname, to mmap it
> +			 */
> +			fd = open(uio_res->path, O_RDWR);
> +			if (fd < 0) {
> +				RTE_LOG(ERR, EAL, "Cannot open %s: %s\n",
> +					uio_res->path, strerror(errno));
> +				rte_free(uio_res);
> +				return -1;
> +			}
> +
> +			if (maps[j].addr != NULL
> +					|| (mapaddr = pci_map_resource(NULL, fd,
> +							(off_t) offset, (size_t) maps[j].size)) == NULL) 
{
> +				rte_free(uio_res);
> +				close(fd);
> +				return (-1);
> +			}
> +			close(fd);
> +
> +			maps[j].addr = mapaddr;
> +			maps[j].offset = offset;
> +			dev->mem_resource[i].addr = mapaddr;
> +		}

Looking at pci_map_resource(), it seems you are not only moving functions in 
another file.

Please split this patch in a way we can clearly see what is changing.

Thanks
-- 
Thomas


More information about the dev mailing list