forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/drivers/gpu/drm/i915/i915_gem.h
....@@ -28,17 +28,20 @@
2828 #include <linux/bug.h>
2929 #include <linux/interrupt.h>
3030
31
+#include <drm/drm_drv.h>
32
+
33
+#include "i915_utils.h"
34
+
3135 struct drm_i915_private;
3236
3337 #ifdef CONFIG_DRM_I915_DEBUG_GEM
3438
35
-#define GEM_SHOW_DEBUG() (drm_debug & DRM_UT_DRIVER)
39
+#define GEM_SHOW_DEBUG() drm_debug_enabled(DRM_UT_DRIVER)
3640
3741 #define GEM_BUG_ON(condition) do { if (unlikely((condition))) { \
38
- pr_err("%s:%d GEM_BUG_ON(%s)\n", \
39
- __func__, __LINE__, __stringify(condition)); \
40
- GEM_TRACE("%s:%d GEM_BUG_ON(%s)\n", \
41
- __func__, __LINE__, __stringify(condition)); \
42
+ GEM_TRACE_ERR("%s:%d GEM_BUG_ON(%s)\n", \
43
+ __func__, __LINE__, __stringify(condition)); \
44
+ GEM_TRACE_DUMP(); \
4245 BUG(); \
4346 } \
4447 } while(0)
....@@ -47,45 +50,55 @@
4750 #define GEM_DEBUG_DECL(var) var
4851 #define GEM_DEBUG_EXEC(expr) expr
4952 #define GEM_DEBUG_BUG_ON(expr) GEM_BUG_ON(expr)
53
+#define GEM_DEBUG_WARN_ON(expr) GEM_WARN_ON(expr)
5054
5155 #else
5256
5357 #define GEM_SHOW_DEBUG() (0)
5458
5559 #define GEM_BUG_ON(expr) BUILD_BUG_ON_INVALID(expr)
56
-#define GEM_WARN_ON(expr) (BUILD_BUG_ON_INVALID(expr), 0)
60
+#define GEM_WARN_ON(expr) ({ unlikely(!!(expr)); })
5761
5862 #define GEM_DEBUG_DECL(var)
5963 #define GEM_DEBUG_EXEC(expr) do { } while (0)
6064 #define GEM_DEBUG_BUG_ON(expr)
65
+#define GEM_DEBUG_WARN_ON(expr) ({ BUILD_BUG_ON_INVALID(expr); 0; })
6166 #endif
6267
6368 #if IS_ENABLED(CONFIG_DRM_I915_TRACE_GEM)
6469 #define GEM_TRACE(...) trace_printk(__VA_ARGS__)
65
-#define GEM_TRACE_DUMP() ftrace_dump(DUMP_ALL)
70
+#define GEM_TRACE_ERR(...) do { \
71
+ pr_err(__VA_ARGS__); \
72
+ trace_printk(__VA_ARGS__); \
73
+} while (0)
74
+#define GEM_TRACE_DUMP() \
75
+ do { ftrace_dump(DUMP_ALL); __add_taint_for_CI(TAINT_WARN); } while (0)
6676 #define GEM_TRACE_DUMP_ON(expr) \
67
- do { if (expr) ftrace_dump(DUMP_ALL); } while (0)
77
+ do { if (expr) GEM_TRACE_DUMP(); } while (0)
6878 #else
6979 #define GEM_TRACE(...) do { } while (0)
80
+#define GEM_TRACE_ERR(...) do { } while (0)
7081 #define GEM_TRACE_DUMP() do { } while (0)
7182 #define GEM_TRACE_DUMP_ON(expr) BUILD_BUG_ON_INVALID(expr)
7283 #endif
7384
74
-#define I915_NUM_ENGINES 8
85
+#define I915_GEM_IDLE_TIMEOUT (HZ / 5)
7586
76
-void i915_gem_park(struct drm_i915_private *i915);
77
-void i915_gem_unpark(struct drm_i915_private *i915);
87
+static inline void tasklet_lock(struct tasklet_struct *t)
88
+{
89
+ while (!tasklet_trylock(t))
90
+ cpu_relax();
91
+}
92
+
93
+static inline bool tasklet_is_locked(const struct tasklet_struct *t)
94
+{
95
+ return test_bit(TASKLET_STATE_RUN, &t->state);
96
+}
7897
7998 static inline void __tasklet_disable_sync_once(struct tasklet_struct *t)
8099 {
81
- if (atomic_inc_return(&t->count) == 1)
100
+ if (!atomic_fetch_inc(&t->count))
82101 tasklet_unlock_wait(t);
83
-}
84
-
85
-static inline void __tasklet_enable_sync_once(struct tasklet_struct *t)
86
-{
87
- if (atomic_dec_return(&t->count) == 0)
88
- tasklet_kill(t);
89102 }
90103
91104 static inline bool __tasklet_is_enabled(const struct tasklet_struct *t)
....@@ -93,4 +106,26 @@
93106 return !atomic_read(&t->count);
94107 }
95108
109
+static inline bool __tasklet_enable(struct tasklet_struct *t)
110
+{
111
+ return atomic_dec_and_test(&t->count);
112
+}
113
+
114
+static inline bool __tasklet_is_scheduled(struct tasklet_struct *t)
115
+{
116
+ return test_bit(TASKLET_STATE_SCHED, &t->state);
117
+}
118
+
119
+struct i915_gem_ww_ctx {
120
+ struct ww_acquire_ctx ctx;
121
+ struct list_head obj_list;
122
+ bool intr;
123
+ struct drm_i915_gem_object *contended;
124
+};
125
+
126
+void i915_gem_ww_ctx_init(struct i915_gem_ww_ctx *ctx, bool intr);
127
+void i915_gem_ww_ctx_fini(struct i915_gem_ww_ctx *ctx);
128
+int __must_check i915_gem_ww_ctx_backoff(struct i915_gem_ww_ctx *ctx);
129
+void i915_gem_ww_unlock_single(struct drm_i915_gem_object *obj);
130
+
96131 #endif /* __I915_GEM_H__ */