Commit fcd46e53 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Declare i915_gem_object_create_internal() as taking phys_addr_t size

The internal object is a collection of struct pages and so is
intrinsically linked to the available physical memory on the machine,
and not an arbitrary type from the uabi. Use phys_addr_t so the link
between size and memory consumption is clear, and then double check that
we don't overflow the maximum object size.

v2: Also assert that size is not zero - a mistake I made a few times
while writing selftests.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170112130431.1844-1-chris@chris-wilson.co.ukReviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
parent 7c3f86b6
...@@ -3505,7 +3505,7 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv ...@@ -3505,7 +3505,7 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv
/* i915_gem_internal.c */ /* i915_gem_internal.c */
struct drm_i915_gem_object * struct drm_i915_gem_object *
i915_gem_object_create_internal(struct drm_i915_private *dev_priv, i915_gem_object_create_internal(struct drm_i915_private *dev_priv,
unsigned int size); phys_addr_t size);
/* i915_gem_shrinker.c */ /* i915_gem_shrinker.c */
unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv, unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv,
......
...@@ -151,10 +151,15 @@ static const struct drm_i915_gem_object_ops i915_gem_object_internal_ops = { ...@@ -151,10 +151,15 @@ static const struct drm_i915_gem_object_ops i915_gem_object_internal_ops = {
*/ */
struct drm_i915_gem_object * struct drm_i915_gem_object *
i915_gem_object_create_internal(struct drm_i915_private *i915, i915_gem_object_create_internal(struct drm_i915_private *i915,
unsigned int size) phys_addr_t size)
{ {
struct drm_i915_gem_object *obj; struct drm_i915_gem_object *obj;
GEM_BUG_ON(!size);
if (overflows_type(size, obj->base.size))
return ERR_PTR(-E2BIG);
obj = i915_gem_object_alloc(i915); obj = i915_gem_object_alloc(i915);
if (!obj) if (!obj)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment