diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_surface.c')
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 56 | 
1 files changed, 23 insertions, 33 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c index c2a721a8cef9..b445ce9b9757 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c @@ -324,7 +324,7 @@ static void vmw_hw_surface_destroy(struct vmw_resource *res)  	if (res->id != -1) {  		cmd = vmw_fifo_reserve(dev_priv, vmw_surface_destroy_size()); -		if (unlikely(cmd == NULL)) { +		if (unlikely(!cmd)) {  			DRM_ERROR("Failed reserving FIFO space for surface "  				  "destruction.\n");  			return; @@ -397,7 +397,7 @@ static int vmw_legacy_srf_create(struct vmw_resource *res)  	submit_size = vmw_surface_define_size(srf);  	cmd = vmw_fifo_reserve(dev_priv, submit_size); -	if (unlikely(cmd == NULL)) { +	if (unlikely(!cmd)) {  		DRM_ERROR("Failed reserving FIFO space for surface "  			  "creation.\n");  		ret = -ENOMEM; @@ -446,11 +446,10 @@ static int vmw_legacy_srf_dma(struct vmw_resource *res,  	uint8_t *cmd;  	struct vmw_private *dev_priv = res->dev_priv; -	BUG_ON(val_buf->bo == NULL); - +	BUG_ON(!val_buf->bo);  	submit_size = vmw_surface_dma_size(srf);  	cmd = vmw_fifo_reserve(dev_priv, submit_size); -	if (unlikely(cmd == NULL)) { +	if (unlikely(!cmd)) {  		DRM_ERROR("Failed reserving FIFO space for surface "  			  "DMA.\n");  		return -ENOMEM; @@ -538,7 +537,7 @@ static int vmw_legacy_srf_destroy(struct vmw_resource *res)  	submit_size = vmw_surface_destroy_size();  	cmd = vmw_fifo_reserve(dev_priv, submit_size); -	if (unlikely(cmd == NULL)) { +	if (unlikely(!cmd)) {  		DRM_ERROR("Failed reserving FIFO space for surface "  			  "eviction.\n");  		return -ENOMEM; @@ -578,7 +577,7 @@ static int vmw_surface_init(struct vmw_private *dev_priv,  	int ret;  	struct vmw_resource *res = &srf->res; -	BUG_ON(res_free == NULL); +	BUG_ON(!res_free);  	if (!dev_priv->has_mob)  		vmw_fifo_resource_inc(dev_priv);  	ret = vmw_resource_init(dev_priv, res, true, res_free, @@ -700,7 +699,6 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  	struct drm_vmw_surface_create_req *req = &arg->req;  	struct drm_vmw_surface_arg *rep = &arg->rep;  	struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile; -	struct drm_vmw_size __user *user_sizes;  	int ret;  	int i, j;  	uint32_t cur_bo_offset; @@ -748,7 +746,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  	}  	user_srf = kzalloc(sizeof(*user_srf), GFP_KERNEL); -	if (unlikely(user_srf == NULL)) { +	if (unlikely(!user_srf)) {  		ret = -ENOMEM;  		goto out_no_user_srf;  	} @@ -763,29 +761,21 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,  	memcpy(srf->mip_levels, req->mip_levels, sizeof(srf->mip_levels));  	srf->num_sizes = num_sizes;  	user_srf->size = size; - -	srf->sizes = kmalloc(srf->num_sizes * sizeof(*srf->sizes), GFP_KERNEL); -	if (unlikely(srf->sizes == NULL)) { -		ret = -ENOMEM; +	srf->sizes = memdup_user((struct drm_vmw_size __user *)(unsigned long) +				 req->size_addr, +				 sizeof(*srf->sizes) * srf->num_sizes); +	if (IS_ERR(srf->sizes)) { +		ret = PTR_ERR(srf->sizes);  		goto out_no_sizes;  	} -	srf->offsets = kmalloc(srf->num_sizes * sizeof(*srf->offsets), -			       GFP_KERNEL); -	if (unlikely(srf->offsets == NULL)) { +	srf->offsets = kmalloc_array(srf->num_sizes, +				     sizeof(*srf->offsets), +				     GFP_KERNEL); +	if (unlikely(!srf->offsets)) {  		ret = -ENOMEM;  		goto out_no_offsets;  	} -	user_sizes = (struct drm_vmw_size __user *)(unsigned long) -	    req->size_addr; - -	ret = copy_from_user(srf->sizes, user_sizes, -			     srf->num_sizes * sizeof(*srf->sizes)); -	if (unlikely(ret != 0)) { -		ret = -EFAULT; -		goto out_no_copy; -	} -  	srf->base_size = *srf->sizes;  	srf->autogen_filter = SVGA3D_TEX_FILTER_NONE;  	srf->multisample_count = 0; @@ -923,7 +913,7 @@ vmw_surface_handle_reference(struct vmw_private *dev_priv,  	ret = -EINVAL;  	base = ttm_base_object_lookup_for_ref(dev_priv->tdev, handle); -	if (unlikely(base == NULL)) { +	if (unlikely(!base)) {  		DRM_ERROR("Could not find surface to reference.\n");  		goto out_no_lookup;  	} @@ -1069,7 +1059,7 @@ static int vmw_gb_surface_create(struct vmw_resource *res)  	cmd = vmw_fifo_reserve(dev_priv, submit_len);  	cmd2 = (typeof(cmd2))cmd; -	if (unlikely(cmd == NULL)) { +	if (unlikely(!cmd)) {  		DRM_ERROR("Failed reserving FIFO space for surface "  			  "creation.\n");  		ret = -ENOMEM; @@ -1135,7 +1125,7 @@ static int vmw_gb_surface_bind(struct vmw_resource *res,  	submit_size = sizeof(*cmd1) + (res->backup_dirty ? sizeof(*cmd2) : 0);  	cmd1 = vmw_fifo_reserve(dev_priv, submit_size); -	if (unlikely(cmd1 == NULL)) { +	if (unlikely(!cmd1)) {  		DRM_ERROR("Failed reserving FIFO space for surface "  			  "binding.\n");  		return -ENOMEM; @@ -1185,7 +1175,7 @@ static int vmw_gb_surface_unbind(struct vmw_resource *res,  	submit_size = sizeof(*cmd3) + (readback ? sizeof(*cmd1) : sizeof(*cmd2));  	cmd = vmw_fifo_reserve(dev_priv, submit_size); -	if (unlikely(cmd == NULL)) { +	if (unlikely(!cmd)) {  		DRM_ERROR("Failed reserving FIFO space for surface "  			  "unbinding.\n");  		return -ENOMEM; @@ -1244,7 +1234,7 @@ static int vmw_gb_surface_destroy(struct vmw_resource *res)  	vmw_binding_res_list_scrub(&res->binding_head);  	cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); -	if (unlikely(cmd == NULL)) { +	if (unlikely(!cmd)) {  		DRM_ERROR("Failed reserving FIFO space for surface "  			  "destruction.\n");  		mutex_unlock(&dev_priv->binding_mutex); @@ -1410,7 +1400,7 @@ int vmw_gb_surface_reference_ioctl(struct drm_device *dev, void *data,  	user_srf = container_of(base, struct vmw_user_surface, prime.base);  	srf = &user_srf->srf; -	if (srf->res.backup == NULL) { +	if (!srf->res.backup) {  		DRM_ERROR("Shared GB surface is missing a backup buffer.\n");  		goto out_bad_resource;  	} @@ -1524,7 +1514,7 @@ int vmw_surface_gb_priv_define(struct drm_device *dev,  	}  	user_srf = kzalloc(sizeof(*user_srf), GFP_KERNEL); -	if (unlikely(user_srf == NULL)) { +	if (unlikely(!user_srf)) {  		ret = -ENOMEM;  		goto out_no_user_srf;  	}  | 
