[dpdk-dev] [PATCH v2 2/6] vfio: don't fail to DMA map if memory is already mapped

Burakov, Anatoly anatoly.burakov at intel.com
Thu Feb 28 12:58:57 CET 2019


On 21-Feb-19 2:50 PM, Shahaf Shuler wrote:
> Currently vfio DMA map function will fail in case the same memory
> segment is mapped twice.
> 
> This is too strict, as this is not an error to map the same memory
> twice.
> 
> Instead, use the kernel return value to detect such state and have the
> DMA function to return as successful.
> 
> For type1 mapping the kernel driver returns EEXISTS.
> For spapr mapping EBUSY is returned since kernel 4.10.
> 
> Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
> ---
>   lib/librte_eal/linuxapp/eal/eal_vfio.c | 12 ++++++++++--
>   1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c b/lib/librte_eal/linuxapp/eal/eal_vfio.c
> index 9adbda8bb7..9e8ad399f5 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_vfio.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c
> @@ -1263,7 +1263,11 @@ vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
>   				VFIO_DMA_MAP_FLAG_WRITE;
>   
>   		ret = ioctl(vfio_container_fd, VFIO_IOMMU_MAP_DMA, &dma_map);
> -		if (ret) {
> +		/**
> +		 * In case the mapping was already done EEXIST will be
> +		 * returned from kernel.
> +		 */
> +		if (ret && (errno != EEXIST)) {
>   			RTE_LOG(ERR, EAL, "  cannot set up DMA remapping, error %i (%s)\n",
>   				errno, strerror(errno));
>   				return -1;
> @@ -1324,7 +1328,11 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
>   				VFIO_DMA_MAP_FLAG_WRITE;
>   
>   		ret = ioctl(vfio_container_fd, VFIO_IOMMU_MAP_DMA, &dma_map);
> -		if (ret) {
> +		/**
> +		 * In case the mapping was already done EBUSY will be
> +		 * returned from kernel.
> +		 */
> +		if (ret && (errno != EBUSY)) {
>   			RTE_LOG(ERR, EAL, "  cannot set up DMA remapping, error %i (%s)\n",
>   				errno, strerror(errno));
>   				return -1;
> 

Nitpicking, but maybe it would be good to throw a debug output about not 
attempting to map because the area is already mapped. Silently ignoring 
the error won't help with debugging, should any issues arise :)

Otherwise LGTM

Acked-by: Anatoly Burakov <anatoly.burakov at intel.com>

-- 
Thanks,
Anatoly


More information about the dev mailing list