Skip to content

Commit

Permalink
drm/i915/kvmgt: Handle kzalloc failure
Browse files Browse the repository at this point in the history
Out-of-memory error must be handled correctly.

Signed-off-by: Changbin Du <changbin.du@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
  • Loading branch information
Changbin Du authored and Zhenyu Wang committed Mar 19, 2018
1 parent 84f69ba commit 5cd4223
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions drivers/gpu/drm/i915/gvt/kvmgt.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,15 +184,15 @@ static struct gvt_dma *__gvt_cache_find_gfn(struct intel_vgpu *vgpu, gfn_t gfn)
return NULL;
}

static void __gvt_cache_add(struct intel_vgpu *vgpu, gfn_t gfn,
static int __gvt_cache_add(struct intel_vgpu *vgpu, gfn_t gfn,
dma_addr_t dma_addr)
{
struct gvt_dma *new, *itr;
struct rb_node **link, *parent = NULL;

new = kzalloc(sizeof(struct gvt_dma), GFP_KERNEL);
if (!new)
return;
return -ENOMEM;

new->vgpu = vgpu;
new->gfn = gfn;
Expand Down Expand Up @@ -229,6 +229,7 @@ static void __gvt_cache_add(struct intel_vgpu *vgpu, gfn_t gfn,
rb_insert_color(&new->dma_addr_node, &vgpu->vdev.dma_addr_cache);

vgpu->vdev.nr_cache_entries++;
return 0;
}

static void __gvt_cache_remove_entry(struct intel_vgpu *vgpu,
Expand Down Expand Up @@ -1586,18 +1587,25 @@ int kvmgt_dma_map_guest_page(unsigned long handle, unsigned long gfn,
entry = __gvt_cache_find_gfn(info->vgpu, gfn);
if (!entry) {
ret = gvt_dma_map_page(vgpu, gfn, dma_addr);
if (ret) {
mutex_unlock(&info->vgpu->vdev.cache_lock);
return ret;
}
__gvt_cache_add(info->vgpu, gfn, *dma_addr);
if (ret)
goto err_unlock;

ret = __gvt_cache_add(info->vgpu, gfn, *dma_addr);
if (ret)
goto err_unmap;
} else {
kref_get(&entry->ref);
*dma_addr = entry->dma_addr;
}

mutex_unlock(&info->vgpu->vdev.cache_lock);
return 0;

err_unmap:
gvt_dma_unmap_page(vgpu, gfn, *dma_addr);
err_unlock:
mutex_unlock(&info->vgpu->vdev.cache_lock);
return ret;
}

static void __gvt_dma_release(struct kref *ref)
Expand Down

0 comments on commit 5cd4223

Please sign in to comment.