drm/i915/gvt: return error code if dma map iova failed
authorChuanxiao Dong <chuanxiao.dong@intel.com>
Tue, 14 Feb 2017 09:15:54 +0000 (17:15 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Tue, 14 Feb 2017 09:35:39 +0000 (17:35 +0800)
When doing dma map failed for a pfn, kvmgt should unpin the
pfn and return error code to device module driver

Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>
Cc: xinda.zhao@intel.com
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/kvmgt.c

index c429ed033fc49c4d96d9c9417d5caceb63f2360f..10c3a4b95a9229938eb3b0a3cdfda54355687296 100644 (file)
@@ -1402,8 +1402,11 @@ static unsigned long kvmgt_gfn_to_pfn(unsigned long handle, unsigned long gfn)
        }
        /* transfer to host iova for GFX to use DMA */
        rc = gvt_dma_map_iova(info->vgpu, pfn, &iova);
-       if (rc)
+       if (rc) {
                gvt_err("gvt_dma_map_iova failed for gfn: 0x%lx\n", gfn);
+               vfio_unpin_pages(dev, &gfn, 1);
+               return INTEL_GVT_INVALID_ADDR;
+       }
 
        gvt_cache_add(info->vgpu, gfn, iova);
        return iova;