All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
@ 2021-07-14 10:03 Maarten Lankhorst
  2021-07-14 16:17 ` Jason Ekstrand
  0 siblings, 1 reply; 12+ messages in thread
From: Maarten Lankhorst @ 2021-07-14 10:03 UTC (permalink / raw)
  To: intel-gfx; +Cc: Daniel Vetter

The FIXED mapping is only used for ttm, and tells userspace that the
mapping type is pre-defined. This disables the other type of mmap
offsets when discrete memory is used, so fix the selftests as well.

Document the struct as well, so it shows up in docbook.

Cc: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 ++++++-
 .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
 .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 ++++++++++-
 include/uapi/drm/i915_drm.h                   | 46 ++++++++++++++-----
 4 files changed, 77 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index a90f796e85c0..31c4021bb6be 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
 		return -ENODEV;
 
 	if (obj->ops->mmap_offset)  {
+		if (mmap_type != I915_MMAP_TYPE_FIXED)
+			return -ENODEV;
+
 		*offset = obj->ops->mmap_offset(obj);
 		return 0;
 	}
 
+	if (mmap_type == I915_MMAP_TYPE_FIXED)
+		return -ENODEV;
+
 	if (mmap_type != I915_MMAP_TYPE_GTT &&
 	    !i915_gem_object_has_struct_page(obj) &&
 	    !i915_gem_object_has_iomem(obj))
@@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
 {
 	enum i915_mmap_type mmap_type;
 
-	if (boot_cpu_has(X86_FEATURE_PAT))
+	if (HAS_LMEM(to_i915(dev)))
+		mmap_type = I915_MMAP_TYPE_FIXED;
+	else if (boot_cpu_has(X86_FEATURE_PAT))
 		mmap_type = I915_MMAP_TYPE_WC;
 	else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
 		return -ENODEV;
@@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
 		type = I915_MMAP_TYPE_UC;
 		break;
 
+	case I915_MMAP_OFFSET_FIXED:
+		type = I915_MMAP_TYPE_FIXED;
+		break;
+
 	default:
 		return -EINVAL;
 	}
@@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
 		vma->vm_ops = &vm_ops_cpu;
 		break;
 
+	case I915_MMAP_TYPE_FIXED:
+		GEM_WARN_ON(1);
+		/* fall-through */
 	case I915_MMAP_TYPE_WB:
 		vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
 		vma->vm_ops = &vm_ops_cpu;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
index ef3de2ae9723..afbadfc5516b 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
@@ -105,6 +105,7 @@ enum i915_mmap_type {
 	I915_MMAP_TYPE_WC,
 	I915_MMAP_TYPE_WB,
 	I915_MMAP_TYPE_UC,
+	I915_MMAP_TYPE_FIXED,
 };
 
 struct i915_mmap_offset {
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 1da8bd675e54..52789c8ad337 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
 	return 0;
 }
 
+static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
+{
+	if (HAS_LMEM(i915))
+		return I915_MMAP_TYPE_FIXED;
+
+	return I915_MMAP_TYPE_GTT;
+}
+
 static bool assert_mmap_offset(struct drm_i915_private *i915,
 			       unsigned long size,
 			       int expected)
@@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
 	if (IS_ERR(obj))
 		return expected && expected == PTR_ERR(obj);
 
-	ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
+	ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
 	i915_gem_object_put(obj);
 
 	return ret == expected;
@@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
 		goto out;
 	}
 
-	err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
+	err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
 	if (err) {
 		pr_err("Unable to insert object into reclaimed hole\n");
 		goto err_obj;
@@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
 
 static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
 {
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	bool no_map;
 
+	if (HAS_LMEM(i915))
+		return type == I915_MMAP_TYPE_FIXED;
+	else if (type == I915_MMAP_TYPE_FIXED)
+		return false;
+
 	if (type == I915_MMAP_TYPE_GTT &&
 	    !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
 		return false;
@@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
 			err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
 			if (err == 0)
 				err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
+			if (err == 0)
+				err = __igt_mmap(i915, obj, I915_MMAP_TYPE_FIXED);
 
 			i915_gem_object_put(obj);
 			if (err)
@@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
 	case I915_MMAP_TYPE_WB: return "wb";
 	case I915_MMAP_TYPE_WC: return "wc";
 	case I915_MMAP_TYPE_UC: return "uc";
+	case I915_MMAP_TYPE_FIXED: return "ttm";
 	default: return "unknown";
 	}
 }
@@ -1100,6 +1117,8 @@ static int igt_mmap_access(void *arg)
 			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_WC);
 		if (err == 0)
 			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_UC);
+		if (err == 0)
+			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_FIXED);
 
 		i915_gem_object_put(obj);
 		if (err)
@@ -1241,6 +1260,8 @@ static int igt_mmap_gpu(void *arg)
 		err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_GTT);
 		if (err == 0)
 			err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_WC);
+		if (err == 0)
+			err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_FIXED);
 
 		i915_gem_object_put(obj);
 		if (err)
@@ -1396,6 +1417,8 @@ static int igt_mmap_revoke(void *arg)
 		err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_GTT);
 		if (err == 0)
 			err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_WC);
+		if (err == 0)
+			err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_FIXED);
 
 		i915_gem_object_put(obj);
 		if (err)
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index e334a8b14ef2..223f60d7694a 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -849,31 +849,55 @@ struct drm_i915_gem_mmap_gtt {
 	__u64 offset;
 };
 
+/**
+ * struct drm_i915_gem_mmap_offset - Retrieve an offset so we can mmap this buffer object.
+ *
+ * This struct is passed as argument to the `DRM_IOCTL_I915_GEM_MMAP_OFFSET` ioctl,
+ * and is used to retrieve the fake offset to mmap an object specified by &handle.
+ *
+ * The legacy way of using `DRM_IOCTL_I915_GEM_MMAP` is removed on gen12+.
+ * `DRM_IOCTL_I915_GEM_MMAP_GTT` is an older supported alias to this struct, but will behave
+ * as setting the &extensions to 0, and &flags to `I915_MMAP_OFFSET_GTT`.
+ */
 struct drm_i915_gem_mmap_offset {
-	/** Handle for the object being mapped. */
+	/** @handle: Handle for the object being mapped. */
 	__u32 handle;
+	/** @pad: Must be zero */
 	__u32 pad;
 	/**
-	 * Fake offset to use for subsequent mmap call
+	 * @offset: The fake offset to use for subsequent mmap call
 	 *
 	 * This is a fixed-size type for 32/64 compatibility.
 	 */
 	__u64 offset;
 
 	/**
-	 * Flags for extended behaviour.
+	 * @flags: Flags for extended behaviour.
+	 *
+	 * It is mandatory that one of the `MMAP_OFFSET` types
+	 * should be included:
+	 * - `I915_MMAP_OFFSET_GTT`: Use mmap with the object bound to GTT. (Write-Combined)
+	 * - `I915_MMAP_OFFSET_WC`: Use Write-Combined caching.
+	 * - `I915_MMAP_OFFSET_WB`: Use Write-Back caching.
+	 * - `I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching.
+	 *
+	 * On devices with local memory `I915_MMAP_OFFSET_FIXED` is the only valid
+	 * type. Ondevices without local memory, this caching mode is invalid.
 	 *
-	 * It is mandatory that one of the MMAP_OFFSET types
-	 * (GTT, WC, WB, UC, etc) should be included.
+	 * As caching mode when specifying `I915_MMAP_OFFSET_FIXED`, WC or WB will
+	 * be used, depending on the object placement on creation. WB will be used
+	 * when the object can only exist in system memory, WC otherwise.
 	 */
 	__u64 flags;
-#define I915_MMAP_OFFSET_GTT 0
-#define I915_MMAP_OFFSET_WC  1
-#define I915_MMAP_OFFSET_WB  2
-#define I915_MMAP_OFFSET_UC  3
 
-	/*
-	 * Zero-terminated chain of extensions.
+#define I915_MMAP_OFFSET_GTT	0
+#define I915_MMAP_OFFSET_WC	1
+#define I915_MMAP_OFFSET_WB	2
+#define I915_MMAP_OFFSET_UC	3
+#define I915_MMAP_OFFSET_FIXED	4
+
+	/**
+	 * @extensions: Zero-terminated chain of extensions.
 	 *
 	 * No current extensions defined; mbz.
 	 */
-- 
2.31.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-14 10:03 [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap Maarten Lankhorst
@ 2021-07-14 16:17 ` Jason Ekstrand
  2021-07-14 17:05   ` Maarten Lankhorst
  0 siblings, 1 reply; 12+ messages in thread
From: Jason Ekstrand @ 2021-07-14 16:17 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: Daniel Vetter, Intel GFX

On Wed, Jul 14, 2021 at 5:03 AM Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:
>
> The FIXED mapping is only used for ttm, and tells userspace that the
> mapping type is pre-defined. This disables the other type of mmap
> offsets when discrete memory is used, so fix the selftests as well.
>
> Document the struct as well, so it shows up in docbook.
>
> Cc: Jason Ekstrand <jason@jlekstrand.net>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 ++++++-
>  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
>  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 ++++++++++-
>  include/uapi/drm/i915_drm.h                   | 46 ++++++++++++++-----
>  4 files changed, 77 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> index a90f796e85c0..31c4021bb6be 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
>                 return -ENODEV;
>
>         if (obj->ops->mmap_offset)  {
> +               if (mmap_type != I915_MMAP_TYPE_FIXED)
> +                       return -ENODEV;
> +
>                 *offset = obj->ops->mmap_offset(obj);
>                 return 0;
>         }
>
> +       if (mmap_type == I915_MMAP_TYPE_FIXED)
> +               return -ENODEV;
> +
>         if (mmap_type != I915_MMAP_TYPE_GTT &&
>             !i915_gem_object_has_struct_page(obj) &&
>             !i915_gem_object_has_iomem(obj))
> @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
>  {
>         enum i915_mmap_type mmap_type;
>
> -       if (boot_cpu_has(X86_FEATURE_PAT))
> +       if (HAS_LMEM(to_i915(dev)))
> +               mmap_type = I915_MMAP_TYPE_FIXED;
> +       else if (boot_cpu_has(X86_FEATURE_PAT))
>                 mmap_type = I915_MMAP_TYPE_WC;
>         else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
>                 return -ENODEV;
> @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
>                 type = I915_MMAP_TYPE_UC;
>                 break;
>
> +       case I915_MMAP_OFFSET_FIXED:
> +               type = I915_MMAP_TYPE_FIXED;
> +               break;
> +
>         default:
>                 return -EINVAL;
>         }
> @@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
>                 vma->vm_ops = &vm_ops_cpu;
>                 break;
>
> +       case I915_MMAP_TYPE_FIXED:
> +               GEM_WARN_ON(1);
> +               /* fall-through */
>         case I915_MMAP_TYPE_WB:
>                 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
>                 vma->vm_ops = &vm_ops_cpu;
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> index ef3de2ae9723..afbadfc5516b 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> @@ -105,6 +105,7 @@ enum i915_mmap_type {
>         I915_MMAP_TYPE_WC,
>         I915_MMAP_TYPE_WB,
>         I915_MMAP_TYPE_UC,
> +       I915_MMAP_TYPE_FIXED,
>  };
>
>  struct i915_mmap_offset {
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> index 1da8bd675e54..52789c8ad337 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> @@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
>         return 0;
>  }
>
> +static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
> +{
> +       if (HAS_LMEM(i915))
> +               return I915_MMAP_TYPE_FIXED;
> +
> +       return I915_MMAP_TYPE_GTT;
> +}
> +
>  static bool assert_mmap_offset(struct drm_i915_private *i915,
>                                unsigned long size,
>                                int expected)
> @@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
>         if (IS_ERR(obj))
>                 return expected && expected == PTR_ERR(obj);
>
> -       ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> +       ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>         i915_gem_object_put(obj);
>
>         return ret == expected;
> @@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
>                 goto out;
>         }
>
> -       err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> +       err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>         if (err) {
>                 pr_err("Unable to insert object into reclaimed hole\n");
>                 goto err_obj;
> @@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
>
>  static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
>  {
> +       struct drm_i915_private *i915 = to_i915(obj->base.dev);
>         bool no_map;
>
> +       if (HAS_LMEM(i915))
> +               return type == I915_MMAP_TYPE_FIXED;
> +       else if (type == I915_MMAP_TYPE_FIXED)
> +               return false;
> +
>         if (type == I915_MMAP_TYPE_GTT &&
>             !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
>                 return false;
> @@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
>                         err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
>                         if (err == 0)
>                                 err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
> +                       if (err == 0)
> +                               err = __igt_mmap(i915, obj, I915_MMAP_TYPE_FIXED);
>
>                         i915_gem_object_put(obj);
>                         if (err)
> @@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
>         case I915_MMAP_TYPE_WB: return "wb";
>         case I915_MMAP_TYPE_WC: return "wc";
>         case I915_MMAP_TYPE_UC: return "uc";
> +       case I915_MMAP_TYPE_FIXED: return "ttm";

fixed?

Otherwise, I trolled through the patch and everything looks good.  I
don't know the code well enough to know if you missed anything but
what you have seems sane.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>

I suppose you'll be wanting a couple mesa patches to go with this?  I
can try and knock something out today.

--Jason

>         default: return "unknown";
>         }
>  }
> @@ -1100,6 +1117,8 @@ static int igt_mmap_access(void *arg)
>                         err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_WC);
>                 if (err == 0)
>                         err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_UC);
> +               if (err == 0)
> +                       err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_FIXED);
>
>                 i915_gem_object_put(obj);
>                 if (err)
> @@ -1241,6 +1260,8 @@ static int igt_mmap_gpu(void *arg)
>                 err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_GTT);
>                 if (err == 0)
>                         err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_WC);
> +               if (err == 0)
> +                       err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_FIXED);
>
>                 i915_gem_object_put(obj);
>                 if (err)
> @@ -1396,6 +1417,8 @@ static int igt_mmap_revoke(void *arg)
>                 err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_GTT);
>                 if (err == 0)
>                         err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_WC);
> +               if (err == 0)
> +                       err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_FIXED);
>
>                 i915_gem_object_put(obj);
>                 if (err)
> diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> index e334a8b14ef2..223f60d7694a 100644
> --- a/include/uapi/drm/i915_drm.h
> +++ b/include/uapi/drm/i915_drm.h
> @@ -849,31 +849,55 @@ struct drm_i915_gem_mmap_gtt {
>         __u64 offset;
>  };
>
> +/**
> + * struct drm_i915_gem_mmap_offset - Retrieve an offset so we can mmap this buffer object.
> + *
> + * This struct is passed as argument to the `DRM_IOCTL_I915_GEM_MMAP_OFFSET` ioctl,
> + * and is used to retrieve the fake offset to mmap an object specified by &handle.
> + *
> + * The legacy way of using `DRM_IOCTL_I915_GEM_MMAP` is removed on gen12+.
> + * `DRM_IOCTL_I915_GEM_MMAP_GTT` is an older supported alias to this struct, but will behave
> + * as setting the &extensions to 0, and &flags to `I915_MMAP_OFFSET_GTT`.
> + */
>  struct drm_i915_gem_mmap_offset {
> -       /** Handle for the object being mapped. */
> +       /** @handle: Handle for the object being mapped. */
>         __u32 handle;
> +       /** @pad: Must be zero */
>         __u32 pad;
>         /**
> -        * Fake offset to use for subsequent mmap call
> +        * @offset: The fake offset to use for subsequent mmap call
>          *
>          * This is a fixed-size type for 32/64 compatibility.
>          */
>         __u64 offset;
>
>         /**
> -        * Flags for extended behaviour.
> +        * @flags: Flags for extended behaviour.
> +        *
> +        * It is mandatory that one of the `MMAP_OFFSET` types
> +        * should be included:
> +        * - `I915_MMAP_OFFSET_GTT`: Use mmap with the object bound to GTT. (Write-Combined)
> +        * - `I915_MMAP_OFFSET_WC`: Use Write-Combined caching.
> +        * - `I915_MMAP_OFFSET_WB`: Use Write-Back caching.
> +        * - `I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching.
> +        *
> +        * On devices with local memory `I915_MMAP_OFFSET_FIXED` is the only valid
> +        * type. Ondevices without local memory, this caching mode is invalid.
>          *
> -        * It is mandatory that one of the MMAP_OFFSET types
> -        * (GTT, WC, WB, UC, etc) should be included.
> +        * As caching mode when specifying `I915_MMAP_OFFSET_FIXED`, WC or WB will
> +        * be used, depending on the object placement on creation. WB will be used
> +        * when the object can only exist in system memory, WC otherwise.
>          */
>         __u64 flags;
> -#define I915_MMAP_OFFSET_GTT 0
> -#define I915_MMAP_OFFSET_WC  1
> -#define I915_MMAP_OFFSET_WB  2
> -#define I915_MMAP_OFFSET_UC  3
>
> -       /*
> -        * Zero-terminated chain of extensions.
> +#define I915_MMAP_OFFSET_GTT   0
> +#define I915_MMAP_OFFSET_WC    1
> +#define I915_MMAP_OFFSET_WB    2
> +#define I915_MMAP_OFFSET_UC    3
> +#define I915_MMAP_OFFSET_FIXED 4
> +
> +       /**
> +        * @extensions: Zero-terminated chain of extensions.
>          *
>          * No current extensions defined; mbz.
>          */
> --
> 2.31.0
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-14 16:17 ` Jason Ekstrand
@ 2021-07-14 17:05   ` Maarten Lankhorst
  2021-07-14 18:35     ` Jason Ekstrand
  0 siblings, 1 reply; 12+ messages in thread
From: Maarten Lankhorst @ 2021-07-14 17:05 UTC (permalink / raw)
  To: Jason Ekstrand; +Cc: Daniel Vetter, Intel GFX

Op 14-07-2021 om 18:17 schreef Jason Ekstrand:
> On Wed, Jul 14, 2021 at 5:03 AM Maarten Lankhorst
> <maarten.lankhorst@linux.intel.com> wrote:
>> The FIXED mapping is only used for ttm, and tells userspace that the
>> mapping type is pre-defined. This disables the other type of mmap
>> offsets when discrete memory is used, so fix the selftests as well.
>>
>> Document the struct as well, so it shows up in docbook.
>>
>> Cc: Jason Ekstrand <jason@jlekstrand.net>
>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>> ---
>>  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 ++++++-
>>  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
>>  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 ++++++++++-
>>  include/uapi/drm/i915_drm.h                   | 46 ++++++++++++++-----
>>  4 files changed, 77 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>> index a90f796e85c0..31c4021bb6be 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>> @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
>>                 return -ENODEV;
>>
>>         if (obj->ops->mmap_offset)  {
>> +               if (mmap_type != I915_MMAP_TYPE_FIXED)
>> +                       return -ENODEV;
>> +
>>                 *offset = obj->ops->mmap_offset(obj);
>>                 return 0;
>>         }
>>
>> +       if (mmap_type == I915_MMAP_TYPE_FIXED)
>> +               return -ENODEV;
>> +
>>         if (mmap_type != I915_MMAP_TYPE_GTT &&
>>             !i915_gem_object_has_struct_page(obj) &&
>>             !i915_gem_object_has_iomem(obj))
>> @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
>>  {
>>         enum i915_mmap_type mmap_type;
>>
>> -       if (boot_cpu_has(X86_FEATURE_PAT))
>> +       if (HAS_LMEM(to_i915(dev)))
>> +               mmap_type = I915_MMAP_TYPE_FIXED;
>> +       else if (boot_cpu_has(X86_FEATURE_PAT))
>>                 mmap_type = I915_MMAP_TYPE_WC;
>>         else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
>>                 return -ENODEV;
>> @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
>>                 type = I915_MMAP_TYPE_UC;
>>                 break;
>>
>> +       case I915_MMAP_OFFSET_FIXED:
>> +               type = I915_MMAP_TYPE_FIXED;
>> +               break;
>> +
>>         default:
>>                 return -EINVAL;
>>         }
>> @@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
>>                 vma->vm_ops = &vm_ops_cpu;
>>                 break;
>>
>> +       case I915_MMAP_TYPE_FIXED:
>> +               GEM_WARN_ON(1);
>> +               /* fall-through */
>>         case I915_MMAP_TYPE_WB:
>>                 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
>>                 vma->vm_ops = &vm_ops_cpu;
>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
>> index ef3de2ae9723..afbadfc5516b 100644
>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
>> @@ -105,6 +105,7 @@ enum i915_mmap_type {
>>         I915_MMAP_TYPE_WC,
>>         I915_MMAP_TYPE_WB,
>>         I915_MMAP_TYPE_UC,
>> +       I915_MMAP_TYPE_FIXED,
>>  };
>>
>>  struct i915_mmap_offset {
>> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
>> index 1da8bd675e54..52789c8ad337 100644
>> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
>> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
>> @@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
>>         return 0;
>>  }
>>
>> +static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
>> +{
>> +       if (HAS_LMEM(i915))
>> +               return I915_MMAP_TYPE_FIXED;
>> +
>> +       return I915_MMAP_TYPE_GTT;
>> +}
>> +
>>  static bool assert_mmap_offset(struct drm_i915_private *i915,
>>                                unsigned long size,
>>                                int expected)
>> @@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
>>         if (IS_ERR(obj))
>>                 return expected && expected == PTR_ERR(obj);
>>
>> -       ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
>> +       ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>>         i915_gem_object_put(obj);
>>
>>         return ret == expected;
>> @@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
>>                 goto out;
>>         }
>>
>> -       err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
>> +       err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>>         if (err) {
>>                 pr_err("Unable to insert object into reclaimed hole\n");
>>                 goto err_obj;
>> @@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
>>
>>  static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
>>  {
>> +       struct drm_i915_private *i915 = to_i915(obj->base.dev);
>>         bool no_map;
>>
>> +       if (HAS_LMEM(i915))
>> +               return type == I915_MMAP_TYPE_FIXED;
>> +       else if (type == I915_MMAP_TYPE_FIXED)
>> +               return false;
>> +
>>         if (type == I915_MMAP_TYPE_GTT &&
>>             !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
>>                 return false;
>> @@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
>>                         err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
>>                         if (err == 0)
>>                                 err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
>> +                       if (err == 0)
>> +                               err = __igt_mmap(i915, obj, I915_MMAP_TYPE_FIXED);
>>
>>                         i915_gem_object_put(obj);
>>                         if (err)
>> @@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
>>         case I915_MMAP_TYPE_WB: return "wb";
>>         case I915_MMAP_TYPE_WC: return "wc";
>>         case I915_MMAP_TYPE_UC: return "uc";
>> +       case I915_MMAP_TYPE_FIXED: return "ttm";
> fixed?
>
> Otherwise, I trolled through the patch and everything looks good.  I
> don't know the code well enough to know if you missed anything but
> what you have seems sane.
>
> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
>
> I suppose you'll be wanting a couple mesa patches to go with this?  I
> can try and knock something out today.


Yes please! IGT probably needs fixing too. I can probably take a look at that.

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-14 17:05   ` Maarten Lankhorst
@ 2021-07-14 18:35     ` Jason Ekstrand
  0 siblings, 0 replies; 12+ messages in thread
From: Jason Ekstrand @ 2021-07-14 18:35 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: Daniel Vetter, Intel GFX

On Wed, Jul 14, 2021 at 12:05 PM Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:
>
> Op 14-07-2021 om 18:17 schreef Jason Ekstrand:
> > On Wed, Jul 14, 2021 at 5:03 AM Maarten Lankhorst
> > <maarten.lankhorst@linux.intel.com> wrote:
> >> The FIXED mapping is only used for ttm, and tells userspace that the
> >> mapping type is pre-defined. This disables the other type of mmap
> >> offsets when discrete memory is used, so fix the selftests as well.
> >>
> >> Document the struct as well, so it shows up in docbook.
> >>
> >> Cc: Jason Ekstrand <jason@jlekstrand.net>
> >> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 ++++++-
> >>  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
> >>  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 ++++++++++-
> >>  include/uapi/drm/i915_drm.h                   | 46 ++++++++++++++-----
> >>  4 files changed, 77 insertions(+), 14 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> >> index a90f796e85c0..31c4021bb6be 100644
> >> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> >> @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
> >>                 return -ENODEV;
> >>
> >>         if (obj->ops->mmap_offset)  {
> >> +               if (mmap_type != I915_MMAP_TYPE_FIXED)
> >> +                       return -ENODEV;
> >> +
> >>                 *offset = obj->ops->mmap_offset(obj);
> >>                 return 0;
> >>         }
> >>
> >> +       if (mmap_type == I915_MMAP_TYPE_FIXED)
> >> +               return -ENODEV;
> >> +
> >>         if (mmap_type != I915_MMAP_TYPE_GTT &&
> >>             !i915_gem_object_has_struct_page(obj) &&
> >>             !i915_gem_object_has_iomem(obj))
> >> @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
> >>  {
> >>         enum i915_mmap_type mmap_type;
> >>
> >> -       if (boot_cpu_has(X86_FEATURE_PAT))
> >> +       if (HAS_LMEM(to_i915(dev)))
> >> +               mmap_type = I915_MMAP_TYPE_FIXED;
> >> +       else if (boot_cpu_has(X86_FEATURE_PAT))
> >>                 mmap_type = I915_MMAP_TYPE_WC;
> >>         else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
> >>                 return -ENODEV;
> >> @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
> >>                 type = I915_MMAP_TYPE_UC;
> >>                 break;
> >>
> >> +       case I915_MMAP_OFFSET_FIXED:
> >> +               type = I915_MMAP_TYPE_FIXED;
> >> +               break;
> >> +
> >>         default:
> >>                 return -EINVAL;
> >>         }
> >> @@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
> >>                 vma->vm_ops = &vm_ops_cpu;
> >>                 break;
> >>
> >> +       case I915_MMAP_TYPE_FIXED:
> >> +               GEM_WARN_ON(1);
> >> +               /* fall-through */
> >>         case I915_MMAP_TYPE_WB:
> >>                 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
> >>                 vma->vm_ops = &vm_ops_cpu;
> >> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> >> index ef3de2ae9723..afbadfc5516b 100644
> >> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> >> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> >> @@ -105,6 +105,7 @@ enum i915_mmap_type {
> >>         I915_MMAP_TYPE_WC,
> >>         I915_MMAP_TYPE_WB,
> >>         I915_MMAP_TYPE_UC,
> >> +       I915_MMAP_TYPE_FIXED,
> >>  };
> >>
> >>  struct i915_mmap_offset {
> >> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> >> index 1da8bd675e54..52789c8ad337 100644
> >> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> >> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> >> @@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
> >>         return 0;
> >>  }
> >>
> >> +static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
> >> +{
> >> +       if (HAS_LMEM(i915))
> >> +               return I915_MMAP_TYPE_FIXED;
> >> +
> >> +       return I915_MMAP_TYPE_GTT;
> >> +}
> >> +
> >>  static bool assert_mmap_offset(struct drm_i915_private *i915,
> >>                                unsigned long size,
> >>                                int expected)
> >> @@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
> >>         if (IS_ERR(obj))
> >>                 return expected && expected == PTR_ERR(obj);
> >>
> >> -       ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> >> +       ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
> >>         i915_gem_object_put(obj);
> >>
> >>         return ret == expected;
> >> @@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
> >>                 goto out;
> >>         }
> >>
> >> -       err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> >> +       err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
> >>         if (err) {
> >>                 pr_err("Unable to insert object into reclaimed hole\n");
> >>                 goto err_obj;
> >> @@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
> >>
> >>  static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
> >>  {
> >> +       struct drm_i915_private *i915 = to_i915(obj->base.dev);
> >>         bool no_map;
> >>
> >> +       if (HAS_LMEM(i915))
> >> +               return type == I915_MMAP_TYPE_FIXED;
> >> +       else if (type == I915_MMAP_TYPE_FIXED)
> >> +               return false;
> >> +
> >>         if (type == I915_MMAP_TYPE_GTT &&
> >>             !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
> >>                 return false;
> >> @@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
> >>                         err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
> >>                         if (err == 0)
> >>                                 err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
> >> +                       if (err == 0)
> >> +                               err = __igt_mmap(i915, obj, I915_MMAP_TYPE_FIXED);
> >>
> >>                         i915_gem_object_put(obj);
> >>                         if (err)
> >> @@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
> >>         case I915_MMAP_TYPE_WB: return "wb";
> >>         case I915_MMAP_TYPE_WC: return "wc";
> >>         case I915_MMAP_TYPE_UC: return "uc";
> >> +       case I915_MMAP_TYPE_FIXED: return "ttm";
> > fixed?
> >
> > Otherwise, I trolled through the patch and everything looks good.  I
> > don't know the code well enough to know if you missed anything but
> > what you have seems sane.
> >
> > Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
> >
> > I suppose you'll be wanting a couple mesa patches to go with this?  I
> > can try and knock something out today.
>
> Yes please! IGT probably needs fixing too. I can probably take a look at that.

As promised: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11888

As usual, we should make sure those are reviewed and we're happy with
them before we land the uAPI but it was easy enough to wire up.

--Jason
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
@ 2021-07-14 12:23 kernel test robot
  0 siblings, 0 replies; 12+ messages in thread
From: kernel test robot @ 2021-07-14 12:23 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 27019 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20210714100323.752828-1-maarten.lankhorst@linux.intel.com>
References: <20210714100323.752828-1-maarten.lankhorst@linux.intel.com>
TO: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
TO: intel-gfx(a)lists.freedesktop.org
CC: Daniel Vetter <daniel.vetter@ffwll.ch>

Hi Maarten,

I love your patch! Perhaps something to improve:

[auto build test WARNING on drm-tip/drm-tip]
[cannot apply to drm-intel/for-linux-next v5.14-rc1 next-20210714]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Maarten-Lankhorst/drm-i915-Add-TTM-offset-argument-to-mmap/20210714-180455
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
:::::: branch date: 2 hours ago
:::::: commit date: 2 hours ago
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
cd tools/perf && ./check-headers.sh

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


perfheadercheck warnings: (new ones prefixed by >>)
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  852> /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  853>  * struct drm_i915_gem_mmap_offset - Retrieve an offset so we can mmap this buffer object.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  854>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  855>  * This struct is passed as argument to the `DRM_IOCTL_I915_GEM_MMAP_OFFSET` ioctl,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  856>  * and is used to retrieve the fake offset to mmap an object specified by &handle.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  857>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  858>  * The legacy way of using `DRM_IOCTL_I915_GEM_MMAP` is removed on gen12+.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  859>  * `DRM_IOCTL_I915_GEM_MMAP_GTT` is an older supported alias to this struct, but will behave
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  860>  * as setting the &extensions to 0, and &flags to `I915_MMAP_OFFSET_GTT`.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  861>  */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  853< 	/** Handle for the object being mapped. */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  863> 	/** @handle: Handle for the object being mapped. */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  865> 	/** @pad: Must be zero */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  857< 	 * Fake offset to use for subsequent mmap call
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  868> 	 * @offset: The fake offset to use for subsequent mmap call
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  864< 	 * Flags for extended behaviour.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  875> 	 * @flags: Flags for extended behaviour.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  866< 	 * It is mandatory that one of the MMAP_OFFSET types
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  867< 	 * (GTT, WC, WB, UC, etc) should be included.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  877> 	 * It is mandatory that one of the `MMAP_OFFSET` types
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  878> 	 * should be included:
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  879> 	 * - `I915_MMAP_OFFSET_GTT`: Use mmap with the object bound to GTT. (Write-Combined)
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  880> 	 * - `I915_MMAP_OFFSET_WC`: Use Write-Combined caching.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  881> 	 * - `I915_MMAP_OFFSET_WB`: Use Write-Back caching.
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  882> 	 * - `I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  883> 	 *
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  884> 	 * On devices with local memory `I915_MMAP_OFFSET_FIXED` is the only valid
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  885> 	 * type. Ondevices without local memory, this caching mode is invalid.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  886> 	 *
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  887> 	 * As caching mode when specifying `I915_MMAP_OFFSET_FIXED`, WC or WB will
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  888> 	 * be used, depending on the object placement on creation. WB will be used
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  889> 	 * when the object can only exist in system memory, WC otherwise.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  870< #define I915_MMAP_OFFSET_GTT 0
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  871< #define I915_MMAP_OFFSET_WC  1
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  872< #define I915_MMAP_OFFSET_WB  2
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  873< #define I915_MMAP_OFFSET_UC  3
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  875< 	/*
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  876< 	 * Zero-terminated chain of extensions.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  893> #define I915_MMAP_OFFSET_GTT	0
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  894> #define I915_MMAP_OFFSET_WC	1
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  895> #define I915_MMAP_OFFSET_WB	2
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  896> #define I915_MMAP_OFFSET_UC	3
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  897> #define I915_MMAP_OFFSET_FIXED	4
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  898> 
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  899> 	/**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  900> 	 * @extensions: Zero-terminated chain of extensions.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  907> /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  908>  * struct drm_i915_gem_set_domain - Adjust the objects write or read domain, in
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  909>  * preparation for accessing the pages via some CPU domain.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  910>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  911>  * Specifying a new write or read domain will flush the object out of the
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  912>  * previous domain(if required), before then updating the objects domain
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  913>  * tracking with the new domain.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  914>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  915>  * Note this might involve waiting for the object first if it is still active on
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  916>  * the GPU.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  917>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  918>  * Supported values for @read_domains and @write_domain:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  919>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  920>  *	- I915_GEM_DOMAIN_WC: Uncached write-combined domain
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  921>  *	- I915_GEM_DOMAIN_CPU: CPU cache domain
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  922>  *	- I915_GEM_DOMAIN_GTT: Mappable aperture domain
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  923>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  924>  * All other domains are rejected.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  925>  */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  884< 	/** Handle for the object */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  927> 	/** @handle: Handle for the object. */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  887< 	/** New read domains */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  930> 	/** @read_domains: New read domains. */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  890< 	/** New write domain */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  933> 	/**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  934> 	 * @write_domain: New write domain.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  935> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  936> 	 * Note that having something in the write domain implies it's in the
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  937> 	 * read domain, and only that read domain.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  938> 	 */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1351< 	 * I915_CONTEXT_SET_ENGINES parameter and via perf, i.e.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1399> 	 * I915_CONTEXT_PARAM_ENGINES context parameter and via perf, i.e.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1353< 	 * reported as active itself. Some hardware may have parallel
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1354< 	 * execution engines, e.g. multiple media engines, which are
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1355< 	 * mapped to the same class identifier and so are not separately
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1356< 	 * reported for busyness.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1401> 	 * Some hardware may have parallel execution engines, e.g. multiple
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1402> 	 * media engines, which are mapped to the same class identifier and so
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1403> 	 * are not separately reported for busyness.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1367<  * I915_CACHING_NONE
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1368<  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1369<  * GPU access is not coherent with cpu caches. Default for machines without an
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1370<  * LLC.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1371<  */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1372< #define I915_CACHING_NONE		0
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1373< /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1374<  * I915_CACHING_CACHED
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1414>  * struct drm_i915_gem_caching - Set or get the caching for given object
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1415>  * handle.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1376<  * GPU access is coherent with cpu caches and furthermore the data is cached in
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1377<  * last-level caches shared between cpu cores and the gpu GT. Default on
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1378<  * machines with HAS_LLC.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1417>  * Allow userspace to control the GTT caching bits for a given object when the
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1418>  * object is later mapped through the ppGTT(or GGTT on older platforms lacking
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1419>  * ppGTT support, or if the object is used for scanout). Note that this might
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1420>  * require unbinding the object from the GTT first, if its current caching value
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1421>  * doesn't match.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1380< #define I915_CACHING_CACHED		1
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1381< /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1382<  * I915_CACHING_DISPLAY
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1383<  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1384<  * Special GPU caching mode which is coherent with the scanout engines.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1385<  * Transparently falls back to I915_CACHING_NONE on platforms where no special
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1386<  * cache mode (like write-through or gfdt flushing) is available. The kernel
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1387<  * automatically sets this mode when using a buffer as a scanout target.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1388<  * Userspace can manually set this mode to avoid a costly stall and clflush in
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1389<  * the hotpath of drawing the first frame.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1390<  */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1391< #define I915_CACHING_DISPLAY		2
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1392< 
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1395< 	 * Handle of the buffer to set/get the caching level of. */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1425> 	 * @handle: Handle of the buffer to set/get the caching level.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1426> 	 */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1399< 	 * Cacheing level to apply or return value
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1430> 	 * @caching: The GTT caching level to apply or possible return value.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1431> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1432> 	 * The supported @caching values:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1401< 	 * bits0-15 are for generic caching control (i.e. the above defined
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1402< 	 * values). bits16-31 are reserved for platform-specific variations
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1403< 	 * (e.g. l3$ caching on gen7). */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1434> 	 * I915_CACHING_NONE:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1435> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1436> 	 * GPU access is not coherent with CPU caches.  Default for machines
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1437> 	 * without an LLC. This means manual flushing might be needed, if we
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1438> 	 * want GPU access to be coherent.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1439> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1440> 	 * I915_CACHING_CACHED:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1441> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1442> 	 * GPU access is coherent with CPU caches and furthermore the data is
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1443> 	 * cached in last-level caches shared between CPU cores and the GPU GT.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1444> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1445> 	 * I915_CACHING_DISPLAY:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1446> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1447> 	 * Special GPU caching mode which is coherent with the scanout engines.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1448> 	 * Transparently falls back to I915_CACHING_NONE on platforms where no
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1449> 	 * special cache mode (like write-through or gfdt flushing) is
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1450> 	 * available. The kernel automatically sets this mode when using a

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-01 11:42 Maarten Lankhorst
  2021-07-01 11:50 ` Maarten Lankhorst
@ 2021-07-09 14:14 ` Jason Ekstrand
  1 sibling, 0 replies; 12+ messages in thread
From: Jason Ekstrand @ 2021-07-09 14:14 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: Intel GFX

On Thu, Jul 1, 2021 at 6:42 AM Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:
>
> This is only used for ttm, and tells userspace that the mapping type is
> ignored. This disables the other type of mmap offsets when discrete
> memory is used, so fix the selftests as well.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 +++++++++++-
>  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
>  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 +++++++++++++++++--
>  include/uapi/drm/i915_drm.h                   |  9 ++++---
>  4 files changed, 47 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> index a90f796e85c0..b34be9e5d094 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
>                 return -ENODEV;
>
>         if (obj->ops->mmap_offset)  {
> +               if (mmap_type != I915_MMAP_TYPE_TTM)
> +                       return -ENODEV;
> +
>                 *offset = obj->ops->mmap_offset(obj);
>                 return 0;
>         }
>
> +       if (mmap_type == I915_MMAP_TYPE_TTM)
> +               return -ENODEV;
> +
>         if (mmap_type != I915_MMAP_TYPE_GTT &&
>             !i915_gem_object_has_struct_page(obj) &&
>             !i915_gem_object_has_iomem(obj))
> @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
>  {
>         enum i915_mmap_type mmap_type;
>
> -       if (boot_cpu_has(X86_FEATURE_PAT))
> +       if (HAS_LMEM(to_i915(dev)))
> +               mmap_type = I915_MMAP_TYPE_TTM;
> +       else if (boot_cpu_has(X86_FEATURE_PAT))
>                 mmap_type = I915_MMAP_TYPE_WC;
>         else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
>                 return -ENODEV;
> @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
>                 type = I915_MMAP_TYPE_UC;
>                 break;
>
> +       case I915_MMAP_OFFSET_TTM:
> +               type = I915_MMAP_TYPE_TTM;
> +               break;
> +
>         default:
>                 return -EINVAL;
>         }
> @@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
>                 vma->vm_ops = &vm_ops_cpu;
>                 break;
>
> +       case I915_MMAP_TYPE_TTM:
> +               GEM_WARN_ON(mmo->mmap_type == I915_MMAP_TYPE_TTM);
> +               /* fall-through */
>         case I915_MMAP_TYPE_WB:
>                 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
>                 vma->vm_ops = &vm_ops_cpu;
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> index 441f913c87e6..8b872b22a7ec 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> @@ -96,6 +96,7 @@ enum i915_mmap_type {
>         I915_MMAP_TYPE_WC,
>         I915_MMAP_TYPE_WB,
>         I915_MMAP_TYPE_UC,
> +       I915_MMAP_TYPE_TTM,
>  };
>
>  struct i915_mmap_offset {
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> index 607b7d2d4c29..321271bd2fa1 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> @@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
>         return 0;
>  }
>
> +static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
> +{
> +       if (HAS_LMEM(i915))
> +               return I915_MMAP_TYPE_TTM;
> +
> +       return I915_MMAP_TYPE_GTT;
> +}
> +
>  static bool assert_mmap_offset(struct drm_i915_private *i915,
>                                unsigned long size,
>                                int expected)
> @@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
>         if (IS_ERR(obj))
>                 return expected && expected == PTR_ERR(obj);
>
> -       ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> +       ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>         i915_gem_object_put(obj);
>
>         return ret == expected;
> @@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
>                 goto out;
>         }
>
> -       err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> +       err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>         if (err) {
>                 pr_err("Unable to insert object into reclaimed hole\n");
>                 goto err_obj;
> @@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
>
>  static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
>  {
> +       struct drm_i915_private *i915 = to_i915(obj->base.dev);
>         bool no_map;
>
> +       if (HAS_LMEM(i915))
> +               return type == I915_MMAP_TYPE_TTM;
> +       else if (type == I915_MMAP_TYPE_TTM)
> +               return false;
> +
>         if (type == I915_MMAP_TYPE_GTT &&
>             !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
>                 return false;
> @@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
>                         err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
>                         if (err == 0)
>                                 err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
> +                       if (err == 0)
> +                               err = __igt_mmap(i915, obj, I915_MMAP_TYPE_TTM);
>
>                         i915_gem_object_put(obj);
>                         if (err)
> @@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
>         case I915_MMAP_TYPE_WB: return "wb";
>         case I915_MMAP_TYPE_WC: return "wc";
>         case I915_MMAP_TYPE_UC: return "uc";
> +       case I915_MMAP_TYPE_TTM: return "ttm";
>         default: return "unknown";
>         }
>  }
> @@ -1100,6 +1117,8 @@ static int igt_mmap_access(void *arg)
>                         err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_WC);
>                 if (err == 0)
>                         err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_UC);
> +               if (err == 0)
> +                       err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_TTM);
>
>                 i915_gem_object_put(obj);
>                 if (err)
> @@ -1241,6 +1260,8 @@ static int igt_mmap_gpu(void *arg)
>                 err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_GTT);
>                 if (err == 0)
>                         err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_WC);
> +               if (err == 0)
> +                       err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_TTM);
>
>                 i915_gem_object_put(obj);
>                 if (err)
> @@ -1396,6 +1417,8 @@ static int igt_mmap_revoke(void *arg)
>                 err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_GTT);
>                 if (err == 0)
>                         err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_WC);
> +               if (err == 0)
> +                       err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_TTM);
>
>                 i915_gem_object_put(obj);
>                 if (err)
> diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> index 2f70c48567c0..12ec9c7f1711 100644
> --- a/include/uapi/drm/i915_drm.h
> +++ b/include/uapi/drm/i915_drm.h
> @@ -867,10 +867,11 @@ struct drm_i915_gem_mmap_offset {
>          * (GTT, WC, WB, UC, etc) should be included.
>          */
>         __u64 flags;
> -#define I915_MMAP_OFFSET_GTT 0
> -#define I915_MMAP_OFFSET_WC  1
> -#define I915_MMAP_OFFSET_WB  2
> -#define I915_MMAP_OFFSET_UC  3
> +#define I915_MMAP_OFFSET_GTT   0
> +#define I915_MMAP_OFFSET_WC    1
> +#define I915_MMAP_OFFSET_WB    2
> +#define I915_MMAP_OFFSET_UC    3
> +#define I915_MMAP_OFFSET_TTM   4

I'm not sure I like the name here.  TTM is an implementation detail,
not a kind of map.  I think we want something more like
I915_MMAP_OFFSET_IMPLICIT or something like that.  The semantics here,
as far as I can tell, are "the mmap type is based on the object; you
can't change it."  On DG1, the mmap type is fixed for all objects.  On
integrated, we could have a BO create option for the mmap type but we
don't yet.

--Jason

>
>         /*
>          * Zero-terminated chain of extensions.
> --
> 2.31.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-09  9:30     ` Matthew Auld
@ 2021-07-09 12:47       ` Maarten Lankhorst
  0 siblings, 0 replies; 12+ messages in thread
From: Maarten Lankhorst @ 2021-07-09 12:47 UTC (permalink / raw)
  To: Matthew Auld; +Cc: Ekstrand, Jason, Intel Graphics Development, Kenneth Graunke

Op 09-07-2021 om 11:30 schreef Matthew Auld:
> On Mon, 5 Jul 2021 at 15:36, Matthew Auld
> <matthew.william.auld@gmail.com> wrote:
>> On Thu, 1 Jul 2021 at 12:50, Maarten Lankhorst
>> <maarten.lankhorst@linux.intel.com> wrote:
>>> Op 01-07-2021 om 13:42 schreef Maarten Lankhorst:
>>>> This is only used for ttm, and tells userspace that the mapping type is
>>>> ignored. This disables the other type of mmap offsets when discrete
>>>> memory is used, so fix the selftests as well.
>>>>
>>>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>>>> ---
>>>>  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 +++++++++++-
>>>>  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
>>>>  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 +++++++++++++++++--
>>>>  include/uapi/drm/i915_drm.h                   |  9 ++++---
>>>>  4 files changed, 47 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>>>> index a90f796e85c0..b34be9e5d094 100644
>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
>>>> @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
>>>>               return -ENODEV;
>>>>
>>>>       if (obj->ops->mmap_offset)  {
>>>> +             if (mmap_type != I915_MMAP_TYPE_TTM)
>>>> +                     return -ENODEV;
>>>> +
>>>>               *offset = obj->ops->mmap_offset(obj);
>>>>               return 0;
>>>>       }
>>>>
>>>> +     if (mmap_type == I915_MMAP_TYPE_TTM)
>>>> +             return -ENODEV;
>>>> +
>>>>       if (mmap_type != I915_MMAP_TYPE_GTT &&
>>>>           !i915_gem_object_has_struct_page(obj) &&
>>>>           !i915_gem_object_has_iomem(obj))
>>>> @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
>>>>  {
>>>>       enum i915_mmap_type mmap_type;
>>>>
>>>> -     if (boot_cpu_has(X86_FEATURE_PAT))
>>>> +     if (HAS_LMEM(to_i915(dev)))
>>>> +             mmap_type = I915_MMAP_TYPE_TTM;
>>>> +     else if (boot_cpu_has(X86_FEATURE_PAT))
>>>>               mmap_type = I915_MMAP_TYPE_WC;
>> Hmm, I think we still need to check for X86_FEATURE_PAT somewhere,
>> since this is still just WC for lmem?
>>
>>>>       else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
>>>>               return -ENODEV;
>>>> @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
>>>>               type = I915_MMAP_TYPE_UC;
>>>>               break;
>>>>
>>>> +     case I915_MMAP_OFFSET_TTM:
>>>> +             type = I915_MMAP_TYPE_TTM;
>>>> +             break;
>> Would it not be simpler to just convert to WC or WB here, if we
>> encounter _TTM? With that we also don't need to touch the dumb mmap
>> stuff and i915_gem_mmap()?
>>
>> if (IS_DGFX()) {
>>         if (args->type != OFFSET_TTM)
>>                return -ENODEV:
>>
>>        GEM_BUG_ON(!obj->mm.n_placements);
>>        if (i915_gem_object_placement_possible(obj, INTEL_MEMORY_LOCAL)) {
>>               type = TYPE_WC;
>>       else
>>               ttype = TYPE_WB;
>> }
>>
>> https://patchwork.freedesktop.org/patch/442579/?series=92209&rev=1
> fyi this patch is now merged, in case you need the
> i915_gem_object_placement_possible() helper.

I think a separate type is better, as it could still be mapped WB if evicted to system memory?

~Maarten

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-05 14:36   ` Matthew Auld
@ 2021-07-09  9:30     ` Matthew Auld
  2021-07-09 12:47       ` Maarten Lankhorst
  0 siblings, 1 reply; 12+ messages in thread
From: Matthew Auld @ 2021-07-09  9:30 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: Ekstrand, Jason, Intel Graphics Development, Kenneth Graunke

On Mon, 5 Jul 2021 at 15:36, Matthew Auld
<matthew.william.auld@gmail.com> wrote:
>
> On Thu, 1 Jul 2021 at 12:50, Maarten Lankhorst
> <maarten.lankhorst@linux.intel.com> wrote:
> >
> > Op 01-07-2021 om 13:42 schreef Maarten Lankhorst:
> > > This is only used for ttm, and tells userspace that the mapping type is
> > > ignored. This disables the other type of mmap offsets when discrete
> > > memory is used, so fix the selftests as well.
> > >
> > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 +++++++++++-
> > >  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
> > >  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 +++++++++++++++++--
> > >  include/uapi/drm/i915_drm.h                   |  9 ++++---
> > >  4 files changed, 47 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> > > index a90f796e85c0..b34be9e5d094 100644
> > > --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> > > +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> > > @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
> > >               return -ENODEV;
> > >
> > >       if (obj->ops->mmap_offset)  {
> > > +             if (mmap_type != I915_MMAP_TYPE_TTM)
> > > +                     return -ENODEV;
> > > +
> > >               *offset = obj->ops->mmap_offset(obj);
> > >               return 0;
> > >       }
> > >
> > > +     if (mmap_type == I915_MMAP_TYPE_TTM)
> > > +             return -ENODEV;
> > > +
> > >       if (mmap_type != I915_MMAP_TYPE_GTT &&
> > >           !i915_gem_object_has_struct_page(obj) &&
> > >           !i915_gem_object_has_iomem(obj))
> > > @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
> > >  {
> > >       enum i915_mmap_type mmap_type;
> > >
> > > -     if (boot_cpu_has(X86_FEATURE_PAT))
> > > +     if (HAS_LMEM(to_i915(dev)))
> > > +             mmap_type = I915_MMAP_TYPE_TTM;
> > > +     else if (boot_cpu_has(X86_FEATURE_PAT))
> > >               mmap_type = I915_MMAP_TYPE_WC;
>
> Hmm, I think we still need to check for X86_FEATURE_PAT somewhere,
> since this is still just WC for lmem?
>
> > >       else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
> > >               return -ENODEV;
> > > @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
> > >               type = I915_MMAP_TYPE_UC;
> > >               break;
> > >
> > > +     case I915_MMAP_OFFSET_TTM:
> > > +             type = I915_MMAP_TYPE_TTM;
> > > +             break;
>
> Would it not be simpler to just convert to WC or WB here, if we
> encounter _TTM? With that we also don't need to touch the dumb mmap
> stuff and i915_gem_mmap()?
>
> if (IS_DGFX()) {
>         if (args->type != OFFSET_TTM)
>                return -ENODEV:
>
>        GEM_BUG_ON(!obj->mm.n_placements);
>        if (i915_gem_object_placement_possible(obj, INTEL_MEMORY_LOCAL)) {
>               type = TYPE_WC;
>       else
>               ttype = TYPE_WB;
> }
>
> https://patchwork.freedesktop.org/patch/442579/?series=92209&rev=1

fyi this patch is now merged, in case you need the
i915_gem_object_placement_possible() helper.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-01 11:50 ` Maarten Lankhorst
@ 2021-07-05 14:36   ` Matthew Auld
  2021-07-09  9:30     ` Matthew Auld
  0 siblings, 1 reply; 12+ messages in thread
From: Matthew Auld @ 2021-07-05 14:36 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: Ekstrand, Jason, Intel Graphics Development, Kenneth Graunke

On Thu, 1 Jul 2021 at 12:50, Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:
>
> Op 01-07-2021 om 13:42 schreef Maarten Lankhorst:
> > This is only used for ttm, and tells userspace that the mapping type is
> > ignored. This disables the other type of mmap offsets when discrete
> > memory is used, so fix the selftests as well.
> >
> > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 +++++++++++-
> >  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
> >  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 +++++++++++++++++--
> >  include/uapi/drm/i915_drm.h                   |  9 ++++---
> >  4 files changed, 47 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> > index a90f796e85c0..b34be9e5d094 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> > @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
> >               return -ENODEV;
> >
> >       if (obj->ops->mmap_offset)  {
> > +             if (mmap_type != I915_MMAP_TYPE_TTM)
> > +                     return -ENODEV;
> > +
> >               *offset = obj->ops->mmap_offset(obj);
> >               return 0;
> >       }
> >
> > +     if (mmap_type == I915_MMAP_TYPE_TTM)
> > +             return -ENODEV;
> > +
> >       if (mmap_type != I915_MMAP_TYPE_GTT &&
> >           !i915_gem_object_has_struct_page(obj) &&
> >           !i915_gem_object_has_iomem(obj))
> > @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
> >  {
> >       enum i915_mmap_type mmap_type;
> >
> > -     if (boot_cpu_has(X86_FEATURE_PAT))
> > +     if (HAS_LMEM(to_i915(dev)))
> > +             mmap_type = I915_MMAP_TYPE_TTM;
> > +     else if (boot_cpu_has(X86_FEATURE_PAT))
> >               mmap_type = I915_MMAP_TYPE_WC;

Hmm, I think we still need to check for X86_FEATURE_PAT somewhere,
since this is still just WC for lmem?

> >       else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
> >               return -ENODEV;
> > @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
> >               type = I915_MMAP_TYPE_UC;
> >               break;
> >
> > +     case I915_MMAP_OFFSET_TTM:
> > +             type = I915_MMAP_TYPE_TTM;
> > +             break;

Would it not be simpler to just convert to WC or WB here, if we
encounter _TTM? With that we also don't need to touch the dumb mmap
stuff and i915_gem_mmap()?

if (IS_DGFX()) {
        if (args->type != OFFSET_TTM)
               return -ENODEV:

       GEM_BUG_ON(!obj->mm.n_placements);
       if (i915_gem_object_placement_possible(obj, INTEL_MEMORY_LOCAL)) {
              type = TYPE_WC;
      else
              ttype = TYPE_WB;
}

https://patchwork.freedesktop.org/patch/442579/?series=92209&rev=1

> > +
> >       default:
> >               return -EINVAL;
> >       }
> > @@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
> >               vma->vm_ops = &vm_ops_cpu;
> >               break;
> >
> > +     case I915_MMAP_TYPE_TTM:
> > +             GEM_WARN_ON(mmo->mmap_type == I915_MMAP_TYPE_TTM);
> > +             /* fall-through */

Hmm, we still want WC for lmem, or if it's possible for it to be placed there.

> >       case I915_MMAP_TYPE_WB:
> >               vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
> >               vma->vm_ops = &vm_ops_cpu;
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> > index 441f913c87e6..8b872b22a7ec 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> > @@ -96,6 +96,7 @@ enum i915_mmap_type {
> >       I915_MMAP_TYPE_WC,
> >       I915_MMAP_TYPE_WB,
> >       I915_MMAP_TYPE_UC,
> > +     I915_MMAP_TYPE_TTM,
> >  };
> >
> >  struct i915_mmap_offset {
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> > index 607b7d2d4c29..321271bd2fa1 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> > @@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
> >       return 0;
> >  }
> >
> > +static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
> > +{
> > +     if (HAS_LMEM(i915))
> > +             return I915_MMAP_TYPE_TTM;
> > +
> > +     return I915_MMAP_TYPE_GTT;
> > +}
> > +
> >  static bool assert_mmap_offset(struct drm_i915_private *i915,
> >                              unsigned long size,
> >                              int expected)
> > @@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
> >       if (IS_ERR(obj))
> >               return expected && expected == PTR_ERR(obj);
> >
> > -     ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> > +     ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
> >       i915_gem_object_put(obj);
> >
> >       return ret == expected;
> > @@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
> >               goto out;
> >       }
> >
> > -     err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> > +     err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
> >       if (err) {
> >               pr_err("Unable to insert object into reclaimed hole\n");
> >               goto err_obj;
> > @@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
> >
> >  static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
> >  {
> > +     struct drm_i915_private *i915 = to_i915(obj->base.dev);
> >       bool no_map;
> >
> > +     if (HAS_LMEM(i915))
> > +             return type == I915_MMAP_TYPE_TTM;
> > +     else if (type == I915_MMAP_TYPE_TTM)
> > +             return false;
> > +
> >       if (type == I915_MMAP_TYPE_GTT &&
> >           !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
> >               return false;
> > @@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
> >                       err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
> >                       if (err == 0)
> >                               err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
> > +                     if (err == 0)
> > +                             err = __igt_mmap(i915, obj, I915_MMAP_TYPE_TTM);
> >
> >                       i915_gem_object_put(obj);
> >                       if (err)
> > @@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
> >       case I915_MMAP_TYPE_WB: return "wb";
> >       case I915_MMAP_TYPE_WC: return "wc";
> >       case I915_MMAP_TYPE_UC: return "uc";
> > +     case I915_MMAP_TYPE_TTM: return "ttm";
> >       default: return "unknown";
> >       }
> >  }
> > @@ -1100,6 +1117,8 @@ static int igt_mmap_access(void *arg)
> >                       err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_WC);
> >               if (err == 0)
> >                       err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_UC);
> > +             if (err == 0)
> > +                     err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_TTM);
> >
> >               i915_gem_object_put(obj);
> >               if (err)
> > @@ -1241,6 +1260,8 @@ static int igt_mmap_gpu(void *arg)
> >               err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_GTT);
> >               if (err == 0)
> >                       err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_WC);
> > +             if (err == 0)
> > +                     err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_TTM);
> >
> >               i915_gem_object_put(obj);
> >               if (err)
> > @@ -1396,6 +1417,8 @@ static int igt_mmap_revoke(void *arg)
> >               err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_GTT);
> >               if (err == 0)
> >                       err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_WC);
> > +             if (err == 0)
> > +                     err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_TTM);
> >
> >               i915_gem_object_put(obj);
> >               if (err)
> > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> > index 2f70c48567c0..12ec9c7f1711 100644
> > --- a/include/uapi/drm/i915_drm.h
> > +++ b/include/uapi/drm/i915_drm.h
> > @@ -867,10 +867,11 @@ struct drm_i915_gem_mmap_offset {
> >        * (GTT, WC, WB, UC, etc) should be included.
> >        */
> >       __u64 flags;
> > -#define I915_MMAP_OFFSET_GTT 0
> > -#define I915_MMAP_OFFSET_WC  1
> > -#define I915_MMAP_OFFSET_WB  2
> > -#define I915_MMAP_OFFSET_UC  3
> > +#define I915_MMAP_OFFSET_GTT 0
> > +#define I915_MMAP_OFFSET_WC  1
> > +#define I915_MMAP_OFFSET_WB  2
> > +#define I915_MMAP_OFFSET_UC  3
> > +#define I915_MMAP_OFFSET_TTM 4
> >
> >       /*
> >        * Zero-terminated chain of extensions.
>
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
@ 2021-07-01 13:25 kernel test robot
  0 siblings, 0 replies; 12+ messages in thread
From: kernel test robot @ 2021-07-01 13:25 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 29804 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20210701114234.3859716-1-maarten.lankhorst@linux.intel.com>
References: <20210701114234.3859716-1-maarten.lankhorst@linux.intel.com>
TO: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
TO: intel-gfx(a)lists.freedesktop.org

Hi Maarten,

I love your patch! Perhaps something to improve:

[auto build test WARNING on drm-tip/drm-tip]
[cannot apply to drm-intel/for-linux-next v5.13 next-20210701]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Maarten-Lankhorst/drm-i915-Add-TTM-offset-argument-to-mmap/20210701-194501
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
:::::: branch date: 2 hours ago
:::::: commit date: 2 hours ago
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
cd tools/perf && ./check-headers.sh

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


perfheadercheck warnings: (new ones prefixed by >>)
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   65< /*
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   66<  * i915_user_extension: Base class for defining a chain of extensions
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':   65> /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   66>  * struct i915_user_extension - Base class for defining a chain of extensions
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   79>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   80>  * Example chaining:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   81>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   82>  * .. code-block:: C
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   83>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   84>  *	struct i915_user_extension ext3 {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   85>  *		.next_extension = 0, // end
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   86>  *		.name = ...,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   87>  *	};
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   88>  *	struct i915_user_extension ext2 {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   89>  *		.next_extension = (uintptr_t)&ext3,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   90>  *		.name = ...,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   91>  *	};
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   92>  *	struct i915_user_extension ext1 {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   93>  *		.next_extension = (uintptr_t)&ext2,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   94>  *		.name = ...,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   95>  *	};
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   96>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   97>  * Typically the struct i915_user_extension would be embedded in some uAPI
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   98>  * struct, and in this case we would feed it the head of the chain(i.e ext1),
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   99>  * which would then apply all of the above extensions.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  100>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  103> 	/**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  104> 	 * @next_extension:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  105> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  106> 	 * Pointer to the next struct i915_user_extension, or zero if the end.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  107> 	 */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  109> 	/**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  110> 	 * @name: Name of the extension.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  111> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  112> 	 * Note that the name here is just some integer.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  113> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  114> 	 * Also note that the name space for this is not global for the whole
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  115> 	 * driver, but rather its scope/meaning is limited to the specific piece
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  116> 	 * of uAPI which has embedded the struct i915_user_extension.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  117> 	 */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   83< 	__u32 flags; /* All undefined bits must be zero. */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':   84< 	__u32 rsvd[4]; /* Reserved for future use; must be zero. */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  119> 	/**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  120> 	 * @flags: MBZ
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  121> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  122> 	 * All undefined bits must be zero.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  123> 	 */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  124> 	__u32 flags;
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  125> 	/**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  126> 	 * @rsvd: MBZ
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  127> 	 *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  128> 	 * Reserved for future use; must be zero.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  129> 	 */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  130> 	__u32 rsvd[4];
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  409> #define DRM_I915_GEM_CREATE_EXT		0x3c
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  442> #define DRM_IOCTL_I915_GEM_CREATE_EXT	DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE_EXT, struct drm_i915_gem_create_ext)
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  822< #define I915_MMAP_OFFSET_GTT 0
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  823< #define I915_MMAP_OFFSET_WC  1
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  824< #define I915_MMAP_OFFSET_WB  2
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  825< #define I915_MMAP_OFFSET_UC  3
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h':  870> #define I915_MMAP_OFFSET_GTT	0
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  871> #define I915_MMAP_OFFSET_WC	1
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  872> #define I915_MMAP_OFFSET_WB	2
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  873> #define I915_MMAP_OFFSET_UC	3
>> Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h':  874> #define I915_MMAP_OFFSET_TTM	4
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1057< /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1106> /*
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1062< /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1111> /*
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1303< 	 * I915_CONTEXT_SET_ENGINES parameter and via perf, i.e.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1352> 	 * I915_CONTEXT_PARAM_ENGINES context parameter and via perf, i.e.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1305< 	 * reported as active itself. Some hardware may have parallel
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1306< 	 * execution engines, e.g. multiple media engines, which are
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1307< 	 * mapped to the same class identifier and so are not separately
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1308< 	 * reported for busyness.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1354> 	 * Some hardware may have parallel execution engines, e.g. multiple
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1355> 	 * media engines, which are mapped to the same class identifier and so
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1356> 	 * are not separately reported for busyness.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1703< /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version@'include/uapi/drm/i915_drm.h': 1751> /*
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1810> /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1811>  * DOC: Virtual Engine uAPI
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1812>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1813>  * Virtual engine is a concept where userspace is able to configure a set of
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1814>  * physical engines, submit a batch buffer, and let the driver execute it on any
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1815>  * engine from the set as it sees fit.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1816>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1817>  * This is primarily useful on parts which have multiple instances of a same
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1818>  * class engine, like for example GT3+ Skylake parts with their two VCS engines.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1819>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1820>  * For instance userspace can enumerate all engines of a certain class using the
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1821>  * previously described `Engine Discovery uAPI`_. After that userspace can
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1822>  * create a GEM context with a placeholder slot for the virtual engine (using
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1823>  * `I915_ENGINE_CLASS_INVALID` and `I915_ENGINE_CLASS_INVALID_NONE` for class
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1824>  * and instance respectively) and finally using the
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1825>  * `I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE` extension place a virtual engine in
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1826>  * the same reserved slot.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1827>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1828>  * Example of creating a virtual engine and submitting a batch buffer to it:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1829>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1830>  * .. code-block:: C
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1831>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1832>  * 	I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(virtual, 2) = {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1833>  * 		.base.name = I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1834>  * 		.engine_index = 0, // Place this virtual engine into engine map slot 0
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1835>  * 		.num_siblings = 2,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1836>  * 		.engines = { { I915_ENGINE_CLASS_VIDEO, 0 },
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1837>  * 			     { I915_ENGINE_CLASS_VIDEO, 1 }, },
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1838>  * 	};
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1839>  * 	I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 1) = {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1840>  * 		.engines = { { I915_ENGINE_CLASS_INVALID,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1841>  * 			       I915_ENGINE_CLASS_INVALID_NONE } },
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1842>  * 		.extensions = to_user_pointer(&virtual), // Chains after load_balance extension
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1843>  * 	};
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1844>  * 	struct drm_i915_gem_context_create_ext_setparam p_engines = {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1845>  * 		.base = {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1846>  * 			.name = I915_CONTEXT_CREATE_EXT_SETPARAM,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1847>  * 		},
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1848>  * 		.param = {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1849>  * 			.param = I915_CONTEXT_PARAM_ENGINES,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1850>  * 			.value = to_user_pointer(&engines),
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1851>  * 			.size = sizeof(engines),
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1852>  * 		},
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1853>  * 	};
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1854>  * 	struct drm_i915_gem_context_create_ext create = {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1855>  * 		.flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS,
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1856>  * 		.extensions = to_user_pointer(&p_engines);
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1857>  * 	};
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1858>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1859>  * 	ctx_id = gem_context_create_ext(drm_fd, &create);
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1860>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1861>  * 	// Now we have created a GEM context with its engine map containing a
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1862>  * 	// single virtual engine. Submissions to this slot can go either to
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1863>  * 	// vcs0 or vcs1, depending on the load balancing algorithm used inside
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1864>  * 	// the driver. The load balancing is dynamic from one batch buffer to
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1865>  * 	// another and transparent to userspace.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1866>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1867>  * 	...
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1868>  * 	execbuf.rsvd1 = ctx_id;
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1869>  * 	execbuf.flags = 0; // Submits to index 0 which is the virtual engine
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1870>  * 	gem_execbuf(drm_fd, &execbuf);
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1871>  */
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1872> 
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1949> /**
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1950>  * DOC: Context Engine Map uAPI
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1951>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1952>  * Context engine map is a new way of addressing engines when submitting batch-
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1953>  * buffers, replacing the existing way of using identifiers like `I915_EXEC_BLT`
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1954>  * inside the flags field of `struct drm_i915_gem_execbuffer2`.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1955>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1956>  * To use it created GEM contexts need to be configured with a list of engines
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1957>  * the user is intending to submit to. This is accomplished using the
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1958>  * `I915_CONTEXT_PARAM_ENGINES` parameter and `struct
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1959>  * i915_context_param_engines`.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1960>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1961>  * For such contexts the `I915_EXEC_RING_MASK` field becomes an index into the
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1962>  * configured map.
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1963>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1964>  * Example of creating such context and submitting against it:
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1965>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1966>  * .. code-block:: C
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1967>  *
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1968>  * 	I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 2) = {
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1969>  * 		.engines = { { I915_ENGINE_CLASS_RENDER, 0 },
   Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h': 1970>  * 			     { I915_ENGINE_CLASS_COPY, 0 } }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
  2021-07-01 11:42 Maarten Lankhorst
@ 2021-07-01 11:50 ` Maarten Lankhorst
  2021-07-05 14:36   ` Matthew Auld
  2021-07-09 14:14 ` Jason Ekstrand
  1 sibling, 1 reply; 12+ messages in thread
From: Maarten Lankhorst @ 2021-07-01 11:50 UTC (permalink / raw)
  To: Intel Graphics Development; +Cc: Ekstrand, Jason, Kenneth Graunke

Op 01-07-2021 om 13:42 schreef Maarten Lankhorst:
> This is only used for ttm, and tells userspace that the mapping type is
> ignored. This disables the other type of mmap offsets when discrete
> memory is used, so fix the selftests as well.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 +++++++++++-
>  .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
>  .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 +++++++++++++++++--
>  include/uapi/drm/i915_drm.h                   |  9 ++++---
>  4 files changed, 47 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> index a90f796e85c0..b34be9e5d094 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
> @@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
>  		return -ENODEV;
>  
>  	if (obj->ops->mmap_offset)  {
> +		if (mmap_type != I915_MMAP_TYPE_TTM)
> +			return -ENODEV;
> +
>  		*offset = obj->ops->mmap_offset(obj);
>  		return 0;
>  	}
>  
> +	if (mmap_type == I915_MMAP_TYPE_TTM)
> +		return -ENODEV;
> +
>  	if (mmap_type != I915_MMAP_TYPE_GTT &&
>  	    !i915_gem_object_has_struct_page(obj) &&
>  	    !i915_gem_object_has_iomem(obj))
> @@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
>  {
>  	enum i915_mmap_type mmap_type;
>  
> -	if (boot_cpu_has(X86_FEATURE_PAT))
> +	if (HAS_LMEM(to_i915(dev)))
> +		mmap_type = I915_MMAP_TYPE_TTM;
> +	else if (boot_cpu_has(X86_FEATURE_PAT))
>  		mmap_type = I915_MMAP_TYPE_WC;
>  	else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
>  		return -ENODEV;
> @@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
>  		type = I915_MMAP_TYPE_UC;
>  		break;
>  
> +	case I915_MMAP_OFFSET_TTM:
> +		type = I915_MMAP_TYPE_TTM;
> +		break;
> +
>  	default:
>  		return -EINVAL;
>  	}
> @@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
>  		vma->vm_ops = &vm_ops_cpu;
>  		break;
>  
> +	case I915_MMAP_TYPE_TTM:
> +		GEM_WARN_ON(mmo->mmap_type == I915_MMAP_TYPE_TTM);
> +		/* fall-through */
>  	case I915_MMAP_TYPE_WB:
>  		vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
>  		vma->vm_ops = &vm_ops_cpu;
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> index 441f913c87e6..8b872b22a7ec 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
> @@ -96,6 +96,7 @@ enum i915_mmap_type {
>  	I915_MMAP_TYPE_WC,
>  	I915_MMAP_TYPE_WB,
>  	I915_MMAP_TYPE_UC,
> +	I915_MMAP_TYPE_TTM,
>  };
>  
>  struct i915_mmap_offset {
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> index 607b7d2d4c29..321271bd2fa1 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
> @@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
>  	return 0;
>  }
>  
> +static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
> +{
> +	if (HAS_LMEM(i915))
> +		return I915_MMAP_TYPE_TTM;
> +
> +	return I915_MMAP_TYPE_GTT;
> +}
> +
>  static bool assert_mmap_offset(struct drm_i915_private *i915,
>  			       unsigned long size,
>  			       int expected)
> @@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
>  	if (IS_ERR(obj))
>  		return expected && expected == PTR_ERR(obj);
>  
> -	ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> +	ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>  	i915_gem_object_put(obj);
>  
>  	return ret == expected;
> @@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
>  		goto out;
>  	}
>  
> -	err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
> +	err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
>  	if (err) {
>  		pr_err("Unable to insert object into reclaimed hole\n");
>  		goto err_obj;
> @@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
>  
>  static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
>  {
> +	struct drm_i915_private *i915 = to_i915(obj->base.dev);
>  	bool no_map;
>  
> +	if (HAS_LMEM(i915))
> +		return type == I915_MMAP_TYPE_TTM;
> +	else if (type == I915_MMAP_TYPE_TTM)
> +		return false;
> +
>  	if (type == I915_MMAP_TYPE_GTT &&
>  	    !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
>  		return false;
> @@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
>  			err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
>  			if (err == 0)
>  				err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
> +			if (err == 0)
> +				err = __igt_mmap(i915, obj, I915_MMAP_TYPE_TTM);
>  
>  			i915_gem_object_put(obj);
>  			if (err)
> @@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
>  	case I915_MMAP_TYPE_WB: return "wb";
>  	case I915_MMAP_TYPE_WC: return "wc";
>  	case I915_MMAP_TYPE_UC: return "uc";
> +	case I915_MMAP_TYPE_TTM: return "ttm";
>  	default: return "unknown";
>  	}
>  }
> @@ -1100,6 +1117,8 @@ static int igt_mmap_access(void *arg)
>  			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_WC);
>  		if (err == 0)
>  			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_UC);
> +		if (err == 0)
> +			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_TTM);
>  
>  		i915_gem_object_put(obj);
>  		if (err)
> @@ -1241,6 +1260,8 @@ static int igt_mmap_gpu(void *arg)
>  		err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_GTT);
>  		if (err == 0)
>  			err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_WC);
> +		if (err == 0)
> +			err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_TTM);
>  
>  		i915_gem_object_put(obj);
>  		if (err)
> @@ -1396,6 +1417,8 @@ static int igt_mmap_revoke(void *arg)
>  		err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_GTT);
>  		if (err == 0)
>  			err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_WC);
> +		if (err == 0)
> +			err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_TTM);
>  
>  		i915_gem_object_put(obj);
>  		if (err)
> diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> index 2f70c48567c0..12ec9c7f1711 100644
> --- a/include/uapi/drm/i915_drm.h
> +++ b/include/uapi/drm/i915_drm.h
> @@ -867,10 +867,11 @@ struct drm_i915_gem_mmap_offset {
>  	 * (GTT, WC, WB, UC, etc) should be included.
>  	 */
>  	__u64 flags;
> -#define I915_MMAP_OFFSET_GTT 0
> -#define I915_MMAP_OFFSET_WC  1
> -#define I915_MMAP_OFFSET_WB  2
> -#define I915_MMAP_OFFSET_UC  3
> +#define I915_MMAP_OFFSET_GTT	0
> +#define I915_MMAP_OFFSET_WC	1
> +#define I915_MMAP_OFFSET_WB	2
> +#define I915_MMAP_OFFSET_UC	3
> +#define I915_MMAP_OFFSET_TTM	4
>  
>  	/*
>  	 * Zero-terminated chain of extensions.


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap.
@ 2021-07-01 11:42 Maarten Lankhorst
  2021-07-01 11:50 ` Maarten Lankhorst
  2021-07-09 14:14 ` Jason Ekstrand
  0 siblings, 2 replies; 12+ messages in thread
From: Maarten Lankhorst @ 2021-07-01 11:42 UTC (permalink / raw)
  To: intel-gfx

This is only used for ttm, and tells userspace that the mapping type is
ignored. This disables the other type of mmap offsets when discrete
memory is used, so fix the selftests as well.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_mman.c      | 17 +++++++++++-
 .../gpu/drm/i915/gem/i915_gem_object_types.h  |  1 +
 .../drm/i915/gem/selftests/i915_gem_mman.c    | 27 +++++++++++++++++--
 include/uapi/drm/i915_drm.h                   |  9 ++++---
 4 files changed, 47 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index a90f796e85c0..b34be9e5d094 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -679,10 +679,16 @@ __assign_mmap_offset(struct drm_i915_gem_object *obj,
 		return -ENODEV;
 
 	if (obj->ops->mmap_offset)  {
+		if (mmap_type != I915_MMAP_TYPE_TTM)
+			return -ENODEV;
+
 		*offset = obj->ops->mmap_offset(obj);
 		return 0;
 	}
 
+	if (mmap_type == I915_MMAP_TYPE_TTM)
+		return -ENODEV;
+
 	if (mmap_type != I915_MMAP_TYPE_GTT &&
 	    !i915_gem_object_has_struct_page(obj) &&
 	    !i915_gem_object_has_iomem(obj))
@@ -727,7 +733,9 @@ i915_gem_dumb_mmap_offset(struct drm_file *file,
 {
 	enum i915_mmap_type mmap_type;
 
-	if (boot_cpu_has(X86_FEATURE_PAT))
+	if (HAS_LMEM(to_i915(dev)))
+		mmap_type = I915_MMAP_TYPE_TTM;
+	else if (boot_cpu_has(X86_FEATURE_PAT))
 		mmap_type = I915_MMAP_TYPE_WC;
 	else if (!i915_ggtt_has_aperture(&to_i915(dev)->ggtt))
 		return -ENODEV;
@@ -798,6 +806,10 @@ i915_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
 		type = I915_MMAP_TYPE_UC;
 		break;
 
+	case I915_MMAP_OFFSET_TTM:
+		type = I915_MMAP_TYPE_TTM;
+		break;
+
 	default:
 		return -EINVAL;
 	}
@@ -968,6 +980,9 @@ int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma)
 		vma->vm_ops = &vm_ops_cpu;
 		break;
 
+	case I915_MMAP_TYPE_TTM:
+		GEM_WARN_ON(mmo->mmap_type == I915_MMAP_TYPE_TTM);
+		/* fall-through */
 	case I915_MMAP_TYPE_WB:
 		vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
 		vma->vm_ops = &vm_ops_cpu;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
index 441f913c87e6..8b872b22a7ec 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
@@ -96,6 +96,7 @@ enum i915_mmap_type {
 	I915_MMAP_TYPE_WC,
 	I915_MMAP_TYPE_WB,
 	I915_MMAP_TYPE_UC,
+	I915_MMAP_TYPE_TTM,
 };
 
 struct i915_mmap_offset {
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
index 607b7d2d4c29..321271bd2fa1 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
@@ -573,6 +573,14 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
 	return 0;
 }
 
+static enum i915_mmap_type default_mapping(struct drm_i915_private *i915)
+{
+	if (HAS_LMEM(i915))
+		return I915_MMAP_TYPE_TTM;
+
+	return I915_MMAP_TYPE_GTT;
+}
+
 static bool assert_mmap_offset(struct drm_i915_private *i915,
 			       unsigned long size,
 			       int expected)
@@ -585,7 +593,7 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
 	if (IS_ERR(obj))
 		return expected && expected == PTR_ERR(obj);
 
-	ret = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
+	ret = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
 	i915_gem_object_put(obj);
 
 	return ret == expected;
@@ -689,7 +697,7 @@ static int igt_mmap_offset_exhaustion(void *arg)
 		goto out;
 	}
 
-	err = __assign_mmap_offset(obj, I915_MMAP_TYPE_GTT, &offset, NULL);
+	err = __assign_mmap_offset(obj, default_mapping(i915), &offset, NULL);
 	if (err) {
 		pr_err("Unable to insert object into reclaimed hole\n");
 		goto err_obj;
@@ -831,8 +839,14 @@ static int wc_check(struct drm_i915_gem_object *obj)
 
 static bool can_mmap(struct drm_i915_gem_object *obj, enum i915_mmap_type type)
 {
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	bool no_map;
 
+	if (HAS_LMEM(i915))
+		return type == I915_MMAP_TYPE_TTM;
+	else if (type == I915_MMAP_TYPE_TTM)
+		return false;
+
 	if (type == I915_MMAP_TYPE_GTT &&
 	    !i915_ggtt_has_aperture(&to_i915(obj->base.dev)->ggtt))
 		return false;
@@ -970,6 +984,8 @@ static int igt_mmap(void *arg)
 			err = __igt_mmap(i915, obj, I915_MMAP_TYPE_GTT);
 			if (err == 0)
 				err = __igt_mmap(i915, obj, I915_MMAP_TYPE_WC);
+			if (err == 0)
+				err = __igt_mmap(i915, obj, I915_MMAP_TYPE_TTM);
 
 			i915_gem_object_put(obj);
 			if (err)
@@ -987,6 +1003,7 @@ static const char *repr_mmap_type(enum i915_mmap_type type)
 	case I915_MMAP_TYPE_WB: return "wb";
 	case I915_MMAP_TYPE_WC: return "wc";
 	case I915_MMAP_TYPE_UC: return "uc";
+	case I915_MMAP_TYPE_TTM: return "ttm";
 	default: return "unknown";
 	}
 }
@@ -1100,6 +1117,8 @@ static int igt_mmap_access(void *arg)
 			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_WC);
 		if (err == 0)
 			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_UC);
+		if (err == 0)
+			err = __igt_mmap_access(i915, obj, I915_MMAP_TYPE_TTM);
 
 		i915_gem_object_put(obj);
 		if (err)
@@ -1241,6 +1260,8 @@ static int igt_mmap_gpu(void *arg)
 		err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_GTT);
 		if (err == 0)
 			err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_WC);
+		if (err == 0)
+			err = __igt_mmap_gpu(i915, obj, I915_MMAP_TYPE_TTM);
 
 		i915_gem_object_put(obj);
 		if (err)
@@ -1396,6 +1417,8 @@ static int igt_mmap_revoke(void *arg)
 		err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_GTT);
 		if (err == 0)
 			err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_WC);
+		if (err == 0)
+			err = __igt_mmap_revoke(i915, obj, I915_MMAP_TYPE_TTM);
 
 		i915_gem_object_put(obj);
 		if (err)
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index 2f70c48567c0..12ec9c7f1711 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -867,10 +867,11 @@ struct drm_i915_gem_mmap_offset {
 	 * (GTT, WC, WB, UC, etc) should be included.
 	 */
 	__u64 flags;
-#define I915_MMAP_OFFSET_GTT 0
-#define I915_MMAP_OFFSET_WC  1
-#define I915_MMAP_OFFSET_WB  2
-#define I915_MMAP_OFFSET_UC  3
+#define I915_MMAP_OFFSET_GTT	0
+#define I915_MMAP_OFFSET_WC	1
+#define I915_MMAP_OFFSET_WB	2
+#define I915_MMAP_OFFSET_UC	3
+#define I915_MMAP_OFFSET_TTM	4
 
 	/*
 	 * Zero-terminated chain of extensions.
-- 
2.31.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-07-14 18:36 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-14 10:03 [Intel-gfx] [PATCH] drm/i915: Add TTM offset argument to mmap Maarten Lankhorst
2021-07-14 16:17 ` Jason Ekstrand
2021-07-14 17:05   ` Maarten Lankhorst
2021-07-14 18:35     ` Jason Ekstrand
  -- strict thread matches above, loose matches on Subject: below --
2021-07-14 12:23 kernel test robot
2021-07-01 13:25 kernel test robot
2021-07-01 11:42 Maarten Lankhorst
2021-07-01 11:50 ` Maarten Lankhorst
2021-07-05 14:36   ` Matthew Auld
2021-07-09  9:30     ` Matthew Auld
2021-07-09 12:47       ` Maarten Lankhorst
2021-07-09 14:14 ` Jason Ekstrand

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.