]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
drm/i915: Report context GTT size
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 14 Oct 2015 13:17:11 +0000 (14:17 +0100)
committerTim Gardner <tim.gardner@canonical.com>
Wed, 6 Apr 2016 09:21:12 +0000 (10:21 +0100)
BugLink: http://bugs.launchpad.net/bugs/1540390
Since the beginning we have conflated the size of the global GTT with
that of the per-process context sizes. In recent times (gen8+), those
are no longer the same where the global GTT is limited to 2/4GiB but the
per-process GTT may be anything up to 256TiB. Userspace knows nothing of
this discrepancy and outside of one or two hacks, uses the getaperture
ioctl to determine the maximum size it can use. Let's leave that as
reporting the global GTT and use the context reporting method to
describe the per-process value (which naturally fallsback to reporting
the aliasing or global on older platforms, so userspace can always use
this method where available).

Testcase: igt/gem_userptr_blits/minor-normal-sync
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90065
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
(cherry picked from commit fa8848f27895bd19e16aed77868f464be24034e6)
Signed-off-by: Timo Aaltonen <timo.aaltonen@canonical.com>
Signed-off-by: Andy Whitcroft <apw@canonical.com>
drivers/gpu/drm/i915/i915_gem_context.c
include/uapi/drm/i915_drm.h

index 02ceb7a4b4815e52a825a290aa8e6d2cd78d25b5..59dba318213e7cf816341b7a06aab9d7ae0e1f05 100644 (file)
@@ -923,6 +923,14 @@ int i915_gem_context_getparam_ioctl(struct drm_device *dev, void *data,
        case I915_CONTEXT_PARAM_NO_ZEROMAP:
                args->value = ctx->flags & CONTEXT_NO_ZEROMAP;
                break;
+       case I915_CONTEXT_PARAM_GTT_SIZE:
+               if (ctx->ppgtt)
+                       args->value = ctx->ppgtt->base.total;
+               else if (to_i915(dev)->mm.aliasing_ppgtt)
+                       args->value = to_i915(dev)->mm.aliasing_ppgtt->base.total;
+               else
+                       args->value = to_i915(dev)->gtt.base.total;
+               break;
        default:
                ret = -EINVAL;
                break;
index 484a9fb20479516b93b9577799b5801b3fe9ab18..67cebe6d978fb77bf1906abf348c3d0abe938ea7 100644 (file)
@@ -1125,8 +1125,9 @@ struct drm_i915_gem_context_param {
        __u32 ctx_id;
        __u32 size;
        __u64 param;
-#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1
-#define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2
+#define I915_CONTEXT_PARAM_BAN_PERIOD  0x1
+#define I915_CONTEXT_PARAM_NO_ZEROMAP  0x2
+#define I915_CONTEXT_PARAM_GTT_SIZE    0x3
        __u64 value;
 };