[PATCH] drm/i915/kvmgt: Handle kzalloc failure

Zhenyu Wang zhenyuw at linux.intel.com
Tue Mar 13 02:39:31 UTC 2018


On 2018.03.12 15:12:34 +0800, changbin.du at intel.com wrote:
> From: Changbin Du <changbin.du at intel.com>
> 
> Out-of-memory error must be handled correctly.
> 
> Signed-off-by: Changbin Du <changbin.du at intel.com>
> ---

Looks good to me, applied, thanks!

>  drivers/gpu/drm/i915/gvt/kvmgt.c | 22 +++++++++++++++-------
>  1 file changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
> index 725dc78..c16a492 100644
> --- a/drivers/gpu/drm/i915/gvt/kvmgt.c
> +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
> @@ -184,7 +184,7 @@ 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;
> @@ -192,7 +192,7 @@ static void __gvt_cache_add(struct intel_vgpu *vgpu, gfn_t gfn,
>  
>  	new = kzalloc(sizeof(struct gvt_dma), GFP_KERNEL);
>  	if (!new)
> -		return;
> +		return -ENOMEM;
>  
>  	new->vgpu = vgpu;
>  	new->gfn = gfn;
> @@ -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,
> @@ -1633,11 +1634,12 @@ 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;
> @@ -1645,6 +1647,12 @@ int kvmgt_dma_map_guest_page(unsigned long handle, unsigned long gfn,
>  
>  	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)
> -- 
> 2.7.4
> 
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev

-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20180313/04d7e497/attachment.sig>


More information about the intel-gvt-dev mailing list