forked from mirrors/linux
		
	drm/i915: Update size upon return from GEM_CREATE
Since GEM_CREATE is trying to outsmart the user by rounding up unaligned
objects, we used to update the size returned to userspace.
This update seems to have been lost throughout the history.
v2: Use round_up(), reorder locals (Chris)
References: ff72145bad ("drm: dumb scanout create/mmap for intel/radeon (v3)")
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Janusz Krzysztofik <janusz.krzysztofik@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190326170218.13255-1-michal.winiarski@intel.com
			
			
This commit is contained in:
		
							parent
							
								
									baba6e572b
								
							
						
					
					
						commit
						e163484afa
					
				
					 1 changed files with 7 additions and 5 deletions
				
			
		| 
						 | 
					@ -622,14 +622,15 @@ i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
i915_gem_create(struct drm_file *file,
 | 
					i915_gem_create(struct drm_file *file,
 | 
				
			||||||
		struct drm_i915_private *dev_priv,
 | 
							struct drm_i915_private *dev_priv,
 | 
				
			||||||
		u64 size,
 | 
							u64 *size_p,
 | 
				
			||||||
		u32 *handle_p)
 | 
							u32 *handle_p)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct drm_i915_gem_object *obj;
 | 
						struct drm_i915_gem_object *obj;
 | 
				
			||||||
	int ret;
 | 
					 | 
				
			||||||
	u32 handle;
 | 
						u32 handle;
 | 
				
			||||||
 | 
						u64 size;
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	size = roundup(size, PAGE_SIZE);
 | 
						size = round_up(*size_p, PAGE_SIZE);
 | 
				
			||||||
	if (size == 0)
 | 
						if (size == 0)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -645,6 +646,7 @@ i915_gem_create(struct drm_file *file,
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*handle_p = handle;
 | 
						*handle_p = handle;
 | 
				
			||||||
 | 
						*size_p = obj->base.size;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -657,7 +659,7 @@ i915_gem_dumb_create(struct drm_file *file,
 | 
				
			||||||
	args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 64);
 | 
						args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 64);
 | 
				
			||||||
	args->size = args->pitch * args->height;
 | 
						args->size = args->pitch * args->height;
 | 
				
			||||||
	return i915_gem_create(file, to_i915(dev),
 | 
						return i915_gem_create(file, to_i915(dev),
 | 
				
			||||||
			       args->size, &args->handle);
 | 
								       &args->size, &args->handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool gpu_write_needs_clflush(struct drm_i915_gem_object *obj)
 | 
					static bool gpu_write_needs_clflush(struct drm_i915_gem_object *obj)
 | 
				
			||||||
| 
						 | 
					@ -682,7 +684,7 @@ i915_gem_create_ioctl(struct drm_device *dev, void *data,
 | 
				
			||||||
	i915_gem_flush_free_objects(dev_priv);
 | 
						i915_gem_flush_free_objects(dev_priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return i915_gem_create(file, dev_priv,
 | 
						return i915_gem_create(file, dev_priv,
 | 
				
			||||||
			       args->size, &args->handle);
 | 
								       &args->size, &args->handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline enum fb_op_origin
 | 
					static inline enum fb_op_origin
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue