From: Thomas Hellström <thomas.hellst...@intel.com>

As we're about to add more ww-related functionality,
break out the dma_resv ww locking utilities to their own files

Signed-off-by: Thomas Hellström <thomas.hellst...@intel.com>
---
 drivers/gpu/drm/i915/Makefile               |  1 +
 drivers/gpu/drm/i915/gem/i915_gem_object.h  |  1 +
 drivers/gpu/drm/i915/gt/intel_renderstate.h |  1 +
 drivers/gpu/drm/i915/i915_gem.c             | 64 ------------------
 drivers/gpu/drm/i915/i915_gem.h             | 15 -----
 drivers/gpu/drm/i915/i915_gem_ww.c          | 72 +++++++++++++++++++++
 drivers/gpu/drm/i915/i915_gem_ww.h          | 23 +++++++
 7 files changed, 98 insertions(+), 79 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/i915_gem_ww.c
 create mode 100644 drivers/gpu/drm/i915/i915_gem_ww.h

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 58d129b5a65a..71503bc26d98 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -45,6 +45,7 @@ i915-y += i915_drv.o \
          i915_switcheroo.o \
          i915_sysfs.o \
          i915_utils.o \
+         i915_gem_ww.o \
          intel_device_info.o \
          intel_dram.o \
          intel_memory_region.o \
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h 
b/drivers/gpu/drm/i915/gem/i915_gem_object.h
index f084a25c5121..cd64b1fdf53c 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h
@@ -15,6 +15,7 @@
 #include "i915_gem_object_types.h"
 #include "i915_gem_gtt.h"
 #include "i915_vma_types.h"
+#include "i915_gem_ww.h"
 
 void i915_gem_init__objects(struct drm_i915_private *i915);
 
diff --git a/drivers/gpu/drm/i915/gt/intel_renderstate.h 
b/drivers/gpu/drm/i915/gt/intel_renderstate.h
index 713aa1e86c80..d9db833b873b 100644
--- a/drivers/gpu/drm/i915/gt/intel_renderstate.h
+++ b/drivers/gpu/drm/i915/gt/intel_renderstate.h
@@ -26,6 +26,7 @@
 
 #include <linux/types.h>
 #include "i915_gem.h"
+#include "i915_gem_ww.h"
 
 struct i915_request;
 struct intel_context;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 3f83ac729644..fa1b7861b954 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1365,70 +1365,6 @@ int i915_gem_open(struct drm_i915_private *i915, struct 
drm_file *file)
        return ret;
 }
 
-void i915_gem_ww_ctx_init(struct i915_gem_ww_ctx *ww, bool intr)
-{
-       ww_acquire_init(&ww->ctx, &reservation_ww_class);
-       INIT_LIST_HEAD(&ww->obj_list);
-       ww->intr = intr;
-       ww->contended = NULL;
-}
-
-static void i915_gem_ww_ctx_unlock_all(struct i915_gem_ww_ctx *ww)
-{
-       struct drm_i915_gem_object *obj;
-
-       while ((obj = list_first_entry_or_null(&ww->obj_list, struct 
drm_i915_gem_object, obj_link))) {
-               if (WARN_ON(!kref_read(&obj->base.refcount))) {
-                       unsigned long *entries;
-                       unsigned int nr_entries;
-
-                       nr_entries = stack_depot_fetch(obj->bt, &entries);
-                       stack_trace_print(entries, nr_entries, 4);
-               }
-
-               obj->bt = 0;
-               list_del(&obj->obj_link);
-               i915_gem_object_unlock(obj);
-       }
-}
-
-void i915_gem_ww_unlock_single(struct drm_i915_gem_object *obj)
-{
-       list_del(&obj->obj_link);
-       i915_gem_object_unlock(obj);
-}
-
-void i915_gem_ww_ctx_fini(struct i915_gem_ww_ctx *ww)
-{
-       i915_gem_ww_ctx_unlock_all(ww);
-       WARN_ON(ww->contended);
-       ww_acquire_fini(&ww->ctx);
-}
-
-int __must_check i915_gem_ww_ctx_backoff(struct i915_gem_ww_ctx *ww)
-{
-       int ret = 0;
-
-       if (WARN_ON(!ww->contended))
-               return -EINVAL;
-
-       i915_gem_ww_ctx_unlock_all(ww);
-       if (ww->intr)
-               ret = 
dma_resv_lock_slow_interruptible(ww->contended->base.resv, &ww->ctx);
-       else
-               dma_resv_lock_slow(ww->contended->base.resv, &ww->ctx);
-
-       if (!ret) {
-               list_add_tail(&ww->contended->obj_link, &ww->obj_list);
-               ww->contended->bt = ww->contended_bt;
-       }
-
-       ww->contended = NULL;
-       ww->contended_bt = 0;
-
-       return ret;
-}
-
 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
 #include "selftests/mock_gem_device.c"
 #include "selftests/i915_gem.c"
diff --git a/drivers/gpu/drm/i915/i915_gem.h b/drivers/gpu/drm/i915/i915_gem.h
index 4d50afab43f2..db0b2835095d 100644
--- a/drivers/gpu/drm/i915/i915_gem.h
+++ b/drivers/gpu/drm/i915/i915_gem.h
@@ -27,8 +27,6 @@
 
 #include <linux/bug.h>
 #include <linux/interrupt.h>
-#include <linux/stackdepot.h>
-#include <linux/stacktrace.h>
 #include <drm/drm_drv.h>
 
 #include "i915_utils.h"
@@ -117,17 +115,4 @@ static inline bool __tasklet_is_scheduled(struct 
tasklet_struct *t)
        return test_bit(TASKLET_STATE_SCHED, &t->state);
 }
 
-struct i915_gem_ww_ctx {
-       struct ww_acquire_ctx ctx;
-       struct list_head obj_list;
-       bool intr;
-       struct drm_i915_gem_object *contended;
-       depot_stack_handle_t contended_bt;
-};
-
-void i915_gem_ww_ctx_init(struct i915_gem_ww_ctx *ctx, bool intr);
-void i915_gem_ww_ctx_fini(struct i915_gem_ww_ctx *ctx);
-int __must_check i915_gem_ww_ctx_backoff(struct i915_gem_ww_ctx *ctx);
-void i915_gem_ww_unlock_single(struct drm_i915_gem_object *obj);
-
 #endif /* __I915_GEM_H__ */
diff --git a/drivers/gpu/drm/i915/i915_gem_ww.c 
b/drivers/gpu/drm/i915/i915_gem_ww.c
new file mode 100644
index 000000000000..3490b72cf613
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_gem_ww.c
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+#include <linux/dma-resv.h>
+#include <linux/stacktrace.h>
+#include "i915_gem_ww.h"
+#include "gem/i915_gem_object.h"
+
+void i915_gem_ww_ctx_init(struct i915_gem_ww_ctx *ww, bool intr)
+{
+       ww_acquire_init(&ww->ctx, &reservation_ww_class);
+       INIT_LIST_HEAD(&ww->obj_list);
+       ww->intr = intr;
+       ww->contended = NULL;
+}
+
+static void i915_gem_ww_ctx_unlock_all(struct i915_gem_ww_ctx *ww)
+{
+       struct drm_i915_gem_object *obj;
+
+       while ((obj = list_first_entry_or_null(&ww->obj_list, struct 
drm_i915_gem_object, obj_link))) {
+               if (WARN_ON(!kref_read(&obj->base.refcount))) {
+                       unsigned long *entries;
+                       unsigned int nr_entries;
+
+                       nr_entries = stack_depot_fetch(obj->bt, &entries);
+                       stack_trace_print(entries, nr_entries, 4);
+               }
+
+               obj->bt = 0;
+               list_del(&obj->obj_link);
+               i915_gem_object_unlock(obj);
+       }
+}
+
+void i915_gem_ww_unlock_single(struct drm_i915_gem_object *obj)
+{
+       list_del(&obj->obj_link);
+       i915_gem_object_unlock(obj);
+}
+
+void i915_gem_ww_ctx_fini(struct i915_gem_ww_ctx *ww)
+{
+       i915_gem_ww_ctx_unlock_all(ww);
+       WARN_ON(ww->contended);
+       ww_acquire_fini(&ww->ctx);
+}
+
+int __must_check i915_gem_ww_ctx_backoff(struct i915_gem_ww_ctx *ww)
+{
+       int ret = 0;
+
+       if (WARN_ON(!ww->contended))
+               return -EINVAL;
+
+       i915_gem_ww_ctx_unlock_all(ww);
+       if (ww->intr)
+               ret = 
dma_resv_lock_slow_interruptible(ww->contended->base.resv, &ww->ctx);
+       else
+               dma_resv_lock_slow(ww->contended->base.resv, &ww->ctx);
+
+       if (!ret) {
+               list_add_tail(&ww->contended->obj_link, &ww->obj_list);
+               ww->contended->bt = ww->contended_bt;
+       }
+
+       ww->contended = NULL;
+       ww->contended_bt = 0;
+
+       return ret;
+}
diff --git a/drivers/gpu/drm/i915/i915_gem_ww.h 
b/drivers/gpu/drm/i915/i915_gem_ww.h
new file mode 100644
index 000000000000..94fdf8c5f89b
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_gem_ww.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+#ifndef __I915_GEM_WW_H__
+#define __I915_GEM_WW_H__
+
+#include <linux/stackdepot.h>
+#include <drm/drm_drv.h>
+
+struct i915_gem_ww_ctx {
+       struct ww_acquire_ctx ctx;
+       struct list_head obj_list;
+       struct drm_i915_gem_object *contended;
+       depot_stack_handle_t contended_bt;
+       bool intr;
+};
+
+void i915_gem_ww_ctx_init(struct i915_gem_ww_ctx *ctx, bool intr);
+void i915_gem_ww_ctx_fini(struct i915_gem_ww_ctx *ctx);
+int __must_check i915_gem_ww_ctx_backoff(struct i915_gem_ww_ctx *ctx);
+void i915_gem_ww_unlock_single(struct drm_i915_gem_object *obj);
+#endif
-- 
2.25.1

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

Reply via email to