* [PATCH 0/5] drm/i915: clean up i915_utils.h
@ 2025-09-08 14:11 Jani Nikula
2025-09-08 14:11 ` [PATCH 1/5] drm/i915: redundant i915_utils.h includes Jani Nikula
` (5 more replies)
0 siblings, 6 replies; 14+ messages in thread
From: Jani Nikula @ 2025-09-08 14:11 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Split out functionality from i915_utils.h to not make it such a
catch-all header that all files depend on. The end goal is to eventually
remove the dependency on i915_utils.h from display/, but make the task
easier by chopping up i915_utils.h and reducing the dependencies on it
in core i915 first.
Whenever include lists need to be touched, group and sort them in a
uniform manner instead of doing that in separate patches.
BR,
Jani.
Jani Nikula (5):
drm/i915: redundant i915_utils.h includes
drm/i915: split out i915_ptr_util.h
drm/i915: split out i915_timer_util.[ch]
drm/i915: split out i915_list_util.h
drm/i915: split out i915_wait_util.h
drivers/gpu/drm/i915/Makefile | 1 +
drivers/gpu/drm/i915/gt/intel_context_types.h | 1 -
.../drm/i915/gt/intel_execlists_submission.c | 6 +-
.../gpu/drm/i915/gt/intel_gt_buffer_pool.c | 1 +
drivers/gpu/drm/i915/gt/intel_gt_mcr.c | 1 +
drivers/gpu/drm/i915/gt/intel_reset.c | 7 +-
.../gpu/drm/i915/gt/intel_ring_submission.c | 7 +-
drivers/gpu/drm/i915/gt/intel_rps.c | 2 +
drivers/gpu/drm/i915/gt/intel_timeline.h | 1 +
drivers/gpu/drm/i915/gt/selftest_tlb.c | 6 +-
drivers/gpu/drm/i915/gt/sysfs_engines.c | 1 +
drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c | 6 +-
.../i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c | 2 +
drivers/gpu/drm/i915/gt/uc/intel_guc.c | 8 +-
drivers/gpu/drm/i915/gt/uc/intel_guc.h | 1 -
drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 3 +-
drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 4 +-
drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 13 +-
.../gpu/drm/i915/gt/uc/intel_guc_submission.c | 10 +-
drivers/gpu/drm/i915/gvt/mmio_context.c | 6 +-
drivers/gpu/drm/i915/i915_debugfs.c | 3 +-
drivers/gpu/drm/i915/i915_gem.h | 2 -
drivers/gpu/drm/i915/i915_list_util.h | 23 +++
drivers/gpu/drm/i915/i915_ptr_util.h | 66 ++++++
drivers/gpu/drm/i915/i915_request.h | 5 +-
drivers/gpu/drm/i915/i915_timer_util.c | 36 ++++
drivers/gpu/drm/i915/i915_timer_util.h | 23 +++
drivers/gpu/drm/i915/i915_utils.c | 30 ---
drivers/gpu/drm/i915/i915_utils.h | 191 ------------------
drivers/gpu/drm/i915/i915_vma.h | 6 +-
drivers/gpu/drm/i915/i915_wait_util.h | 119 +++++++++++
drivers/gpu/drm/i915/intel_pcode.c | 1 +
drivers/gpu/drm/i915/intel_uncore.c | 7 +-
drivers/gpu/drm/i915/pxp/intel_pxp.c | 4 +-
drivers/gpu/drm/i915/selftests/i915_request.c | 5 +-
.../gpu/drm/i915/selftests/i915_selftest.c | 2 +-
drivers/gpu/drm/i915/selftests/igt_spinner.c | 5 +-
drivers/gpu/drm/i915/vlv_suspend.c | 5 +-
38 files changed, 345 insertions(+), 275 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_list_util.h
create mode 100644 drivers/gpu/drm/i915/i915_ptr_util.h
create mode 100644 drivers/gpu/drm/i915/i915_timer_util.c
create mode 100644 drivers/gpu/drm/i915/i915_timer_util.h
create mode 100644 drivers/gpu/drm/i915/i915_wait_util.h
--
2.47.3
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/5] drm/i915: redundant i915_utils.h includes
2025-09-08 14:11 [PATCH 0/5] drm/i915: clean up i915_utils.h Jani Nikula
@ 2025-09-08 14:11 ` Jani Nikula
2025-09-09 13:36 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 2/5] drm/i915: split out i915_ptr_util.h Jani Nikula
` (4 subsequent siblings)
5 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2025-09-08 14:11 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Neither intel_guc.h nor i915_gem.h need i915_utils.h anymore. Just drop
the includes.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/gt/uc/intel_guc.h | 1 -
drivers/gpu/drm/i915/i915_gem.h | 2 --
2 files changed, 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.h b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
index 053780f562c1..ce766f558ce5 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
@@ -18,7 +18,6 @@
#include "intel_guc_slpc_types.h"
#include "intel_uc_fw.h"
#include "intel_uncore.h"
-#include "i915_utils.h"
#include "i915_vma.h"
struct __guc_ads_blob;
diff --git a/drivers/gpu/drm/i915/i915_gem.h b/drivers/gpu/drm/i915/i915_gem.h
index 20b3cb29cfff..cd7114002944 100644
--- a/drivers/gpu/drm/i915/i915_gem.h
+++ b/drivers/gpu/drm/i915/i915_gem.h
@@ -30,8 +30,6 @@
#include <drm/drm_drv.h>
-#include "i915_utils.h"
-
struct drm_file;
struct drm_i915_gem_object;
struct drm_i915_private;
--
2.47.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/5] drm/i915: split out i915_ptr_util.h
2025-09-08 14:11 [PATCH 0/5] drm/i915: clean up i915_utils.h Jani Nikula
2025-09-08 14:11 ` [PATCH 1/5] drm/i915: redundant i915_utils.h includes Jani Nikula
@ 2025-09-08 14:11 ` Jani Nikula
2025-09-09 13:37 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 3/5] drm/i915: split out i915_timer_util.[ch] Jani Nikula
` (3 subsequent siblings)
5 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2025-09-08 14:11 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Move pointer related utilities from i915_utils.h to a separate new
i915_ptr_util.h header. Clean up related includes.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/gt/intel_context_types.h | 1 -
drivers/gpu/drm/i915/gt/intel_timeline.h | 1 +
drivers/gpu/drm/i915/i915_ptr_util.h | 66 +++++++++++++++++++
drivers/gpu/drm/i915/i915_request.h | 5 +-
drivers/gpu/drm/i915/i915_utils.h | 57 ----------------
drivers/gpu/drm/i915/i915_vma.h | 6 +-
6 files changed, 73 insertions(+), 63 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_ptr_util.h
diff --git a/drivers/gpu/drm/i915/gt/intel_context_types.h b/drivers/gpu/drm/i915/gt/intel_context_types.h
index 98c7f6052069..10070ee4d74c 100644
--- a/drivers/gpu/drm/i915/gt/intel_context_types.h
+++ b/drivers/gpu/drm/i915/gt/intel_context_types.h
@@ -14,7 +14,6 @@
#include "i915_active_types.h"
#include "i915_sw_fence.h"
-#include "i915_utils.h"
#include "intel_engine_types.h"
#include "intel_sseu.h"
#include "intel_wakeref.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.h b/drivers/gpu/drm/i915/gt/intel_timeline.h
index 57308c4d664a..5f8c8f79714e 100644
--- a/drivers/gpu/drm/i915/gt/intel_timeline.h
+++ b/drivers/gpu/drm/i915/gt/intel_timeline.h
@@ -10,6 +10,7 @@
#include "i915_active.h"
#include "i915_syncmap.h"
+#include "i915_utils.h"
#include "intel_timeline_types.h"
struct drm_printer;
diff --git a/drivers/gpu/drm/i915/i915_ptr_util.h b/drivers/gpu/drm/i915/i915_ptr_util.h
new file mode 100644
index 000000000000..9f8931d7d99b
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_ptr_util.h
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2025 Intel Corporation */
+
+#ifndef __I915_PTR_UTIL_H__
+#define __I915_PTR_UTIL_H__
+
+#include <linux/types.h>
+
+#define ptr_mask_bits(ptr, n) ({ \
+ unsigned long __v = (unsigned long)(ptr); \
+ (typeof(ptr))(__v & -BIT(n)); \
+})
+
+#define ptr_unmask_bits(ptr, n) ((unsigned long)(ptr) & (BIT(n) - 1))
+
+#define ptr_unpack_bits(ptr, bits, n) ({ \
+ unsigned long __v = (unsigned long)(ptr); \
+ *(bits) = __v & (BIT(n) - 1); \
+ (typeof(ptr))(__v & -BIT(n)); \
+})
+
+#define ptr_pack_bits(ptr, bits, n) ({ \
+ unsigned long __bits = (bits); \
+ GEM_BUG_ON(__bits & -BIT(n)); \
+ ((typeof(ptr))((unsigned long)(ptr) | __bits)); \
+})
+
+#define ptr_dec(ptr) ({ \
+ unsigned long __v = (unsigned long)(ptr); \
+ (typeof(ptr))(__v - 1); \
+})
+
+#define ptr_inc(ptr) ({ \
+ unsigned long __v = (unsigned long)(ptr); \
+ (typeof(ptr))(__v + 1); \
+})
+
+#define page_mask_bits(ptr) ptr_mask_bits(ptr, PAGE_SHIFT)
+#define page_unmask_bits(ptr) ptr_unmask_bits(ptr, PAGE_SHIFT)
+#define page_pack_bits(ptr, bits) ptr_pack_bits(ptr, bits, PAGE_SHIFT)
+#define page_unpack_bits(ptr, bits) ptr_unpack_bits(ptr, bits, PAGE_SHIFT)
+
+static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
+{
+ return a - b;
+}
+
+#define u64_to_ptr(T, x) ({ \
+ typecheck(u64, x); \
+ (T *)(uintptr_t)(x); \
+})
+
+/*
+ * container_of_user: Extract the superclass from a pointer to a member.
+ *
+ * Exactly like container_of() with the exception that it plays nicely
+ * with sparse for __user @ptr.
+ */
+#define container_of_user(ptr, type, member) ({ \
+ void __user *__mptr = (void __user *)(ptr); \
+ BUILD_BUG_ON_MSG(!__same_type(*(ptr), typeof_member(type, member)) && \
+ !__same_type(*(ptr), void), \
+ "pointer type mismatch in container_of()"); \
+ ((type __user *)(__mptr - offsetof(type, member))); })
+
+#endif /* __I915_PTR_UTIL_H__ */
diff --git a/drivers/gpu/drm/i915/i915_request.h b/drivers/gpu/drm/i915/i915_request.h
index 5f7e8138ec14..b09135301f39 100644
--- a/drivers/gpu/drm/i915/i915_request.h
+++ b/drivers/gpu/drm/i915/i915_request.h
@@ -31,19 +31,20 @@
#include <linux/llist.h>
#include <linux/lockdep.h>
+#include <uapi/drm/i915_drm.h>
+
#include "gem/i915_gem_context_types.h"
#include "gt/intel_context_types.h"
#include "gt/intel_engine_types.h"
#include "gt/intel_timeline_types.h"
#include "i915_gem.h"
+#include "i915_ptr_util.h"
#include "i915_scheduler.h"
#include "i915_selftest.h"
#include "i915_sw_fence.h"
#include "i915_vma_resource.h"
-#include <uapi/drm/i915_drm.h>
-
struct drm_file;
struct drm_i915_gem_object;
struct drm_printer;
diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
index eb4d43c40009..dff02a944a57 100644
--- a/drivers/gpu/drm/i915/i915_utils.h
+++ b/drivers/gpu/drm/i915/i915_utils.h
@@ -67,64 +67,12 @@ bool i915_error_injected(void);
drm_err(&(i915)->drm, fmt, ##__VA_ARGS__); \
})
-#define ptr_mask_bits(ptr, n) ({ \
- unsigned long __v = (unsigned long)(ptr); \
- (typeof(ptr))(__v & -BIT(n)); \
-})
-
-#define ptr_unmask_bits(ptr, n) ((unsigned long)(ptr) & (BIT(n) - 1))
-
-#define ptr_unpack_bits(ptr, bits, n) ({ \
- unsigned long __v = (unsigned long)(ptr); \
- *(bits) = __v & (BIT(n) - 1); \
- (typeof(ptr))(__v & -BIT(n)); \
-})
-
-#define ptr_pack_bits(ptr, bits, n) ({ \
- unsigned long __bits = (bits); \
- GEM_BUG_ON(__bits & -BIT(n)); \
- ((typeof(ptr))((unsigned long)(ptr) | __bits)); \
-})
-
-#define ptr_dec(ptr) ({ \
- unsigned long __v = (unsigned long)(ptr); \
- (typeof(ptr))(__v - 1); \
-})
-
-#define ptr_inc(ptr) ({ \
- unsigned long __v = (unsigned long)(ptr); \
- (typeof(ptr))(__v + 1); \
-})
-
-#define page_mask_bits(ptr) ptr_mask_bits(ptr, PAGE_SHIFT)
-#define page_unmask_bits(ptr) ptr_unmask_bits(ptr, PAGE_SHIFT)
-#define page_pack_bits(ptr, bits) ptr_pack_bits(ptr, bits, PAGE_SHIFT)
-#define page_unpack_bits(ptr, bits) ptr_unpack_bits(ptr, bits, PAGE_SHIFT)
-
#define fetch_and_zero(ptr) ({ \
typeof(*ptr) __T = *(ptr); \
*(ptr) = (typeof(*ptr))0; \
__T; \
})
-static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
-{
- return a - b;
-}
-
-/*
- * container_of_user: Extract the superclass from a pointer to a member.
- *
- * Exactly like container_of() with the exception that it plays nicely
- * with sparse for __user @ptr.
- */
-#define container_of_user(ptr, type, member) ({ \
- void __user *__mptr = (void __user *)(ptr); \
- BUILD_BUG_ON_MSG(!__same_type(*(ptr), typeof_member(type, member)) && \
- !__same_type(*(ptr), void), \
- "pointer type mismatch in container_of()"); \
- ((type __user *)(__mptr - offsetof(type, member))); })
-
/*
* check_user_mbz: Check that a user value exists and is zero
*
@@ -143,11 +91,6 @@ static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
get_user(mbz__, (U)) ? -EFAULT : mbz__ ? -EINVAL : 0; \
})
-#define u64_to_ptr(T, x) ({ \
- typecheck(u64, x); \
- (T *)(uintptr_t)(x); \
-})
-
#define __mask_next_bit(mask) ({ \
int __idx = ffs(mask) - 1; \
mask &= ~BIT(__idx); \
diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h
index 0f9eee6d18d2..8054047840aa 100644
--- a/drivers/gpu/drm/i915/i915_vma.h
+++ b/drivers/gpu/drm/i915/i915_vma.h
@@ -30,12 +30,12 @@
#include <drm/drm_mm.h>
-#include "gt/intel_ggtt_fencing.h"
#include "gem/i915_gem_object.h"
-
-#include "i915_gem_gtt.h"
+#include "gt/intel_ggtt_fencing.h"
#include "i915_active.h"
+#include "i915_gem_gtt.h"
+#include "i915_ptr_util.h"
#include "i915_request.h"
#include "i915_vma_resource.h"
#include "i915_vma_types.h"
--
2.47.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/5] drm/i915: split out i915_timer_util.[ch]
2025-09-08 14:11 [PATCH 0/5] drm/i915: clean up i915_utils.h Jani Nikula
2025-09-08 14:11 ` [PATCH 1/5] drm/i915: redundant i915_utils.h includes Jani Nikula
2025-09-08 14:11 ` [PATCH 2/5] drm/i915: split out i915_ptr_util.h Jani Nikula
@ 2025-09-08 14:11 ` Jani Nikula
2025-09-09 13:38 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 4/5] drm/i915: split out i915_list_util.h Jani Nikula
` (2 subsequent siblings)
5 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2025-09-08 14:11 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Move timer related utilities from i915_utils.[ch] to separate new files
i915_timer_util.[ch]. Clean up related includes.
Note: Arguably none of this should exist in i915 in the first place. At
least isolate it better.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/Makefile | 1 +
.../drm/i915/gt/intel_execlists_submission.c | 4 ++-
drivers/gpu/drm/i915/gt/sysfs_engines.c | 1 +
drivers/gpu/drm/i915/i915_timer_util.c | 36 +++++++++++++++++++
drivers/gpu/drm/i915/i915_timer_util.h | 23 ++++++++++++
drivers/gpu/drm/i915/i915_utils.c | 30 ----------------
drivers/gpu/drm/i915/i915_utils.h | 14 --------
7 files changed, 64 insertions(+), 45 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_timer_util.c
create mode 100644 drivers/gpu/drm/i915/i915_timer_util.h
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index db150a0c33ce..e58c0c158b3a 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -32,6 +32,7 @@ i915-y += \
i915_scatterlist.o \
i915_switcheroo.o \
i915_sysfs.o \
+ i915_timer_util.o \
i915_utils.o \
intel_clock_gating.o \
intel_cpu_info.o \
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index 03baa7fa0a27..52c8fddedfce 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -106,14 +106,16 @@
* preemption, but just sampling the new tail pointer).
*
*/
+
#include <linux/interrupt.h>
#include <linux/string_helpers.h>
+#include "gen8_engine_cs.h"
#include "i915_drv.h"
#include "i915_reg.h"
+#include "i915_timer_util.h"
#include "i915_trace.h"
#include "i915_vgpu.h"
-#include "gen8_engine_cs.h"
#include "intel_breadcrumbs.h"
#include "intel_context.h"
#include "intel_engine_heartbeat.h"
diff --git a/drivers/gpu/drm/i915/gt/sysfs_engines.c b/drivers/gpu/drm/i915/gt/sysfs_engines.c
index aab2759067d2..4a81bc396b21 100644
--- a/drivers/gpu/drm/i915/gt/sysfs_engines.c
+++ b/drivers/gpu/drm/i915/gt/sysfs_engines.c
@@ -7,6 +7,7 @@
#include <linux/sysfs.h>
#include "i915_drv.h"
+#include "i915_timer_util.h"
#include "intel_engine.h"
#include "intel_engine_heartbeat.h"
#include "sysfs_engines.h"
diff --git a/drivers/gpu/drm/i915/i915_timer_util.c b/drivers/gpu/drm/i915/i915_timer_util.c
new file mode 100644
index 000000000000..ee4cfd8b3c07
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_timer_util.c
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: MIT
+/* Copyright © 2025 Intel Corporation */
+
+#include <linux/jiffies.h>
+
+#include "i915_timer_util.h"
+
+void cancel_timer(struct timer_list *t)
+{
+ if (!timer_active(t))
+ return;
+
+ timer_delete(t);
+ WRITE_ONCE(t->expires, 0);
+}
+
+void set_timer_ms(struct timer_list *t, unsigned long timeout)
+{
+ if (!timeout) {
+ cancel_timer(t);
+ return;
+ }
+
+ timeout = msecs_to_jiffies(timeout);
+
+ /*
+ * Paranoia to make sure the compiler computes the timeout before
+ * loading 'jiffies' as jiffies is volatile and may be updated in
+ * the background by a timer tick. All to reduce the complexity
+ * of the addition and reduce the risk of losing a jiffy.
+ */
+ barrier();
+
+ /* Keep t->expires = 0 reserved to indicate a canceled timer. */
+ mod_timer(t, jiffies + timeout ?: 1);
+}
diff --git a/drivers/gpu/drm/i915/i915_timer_util.h b/drivers/gpu/drm/i915/i915_timer_util.h
new file mode 100644
index 000000000000..f35ad730820c
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_timer_util.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2025 Intel Corporation */
+
+#ifndef __I915_TIMER_UTIL_H__
+#define __I915_TIMER_UTIL_H__
+
+#include <linux/timer.h>
+#include <asm/rwonce.h>
+
+void cancel_timer(struct timer_list *t);
+void set_timer_ms(struct timer_list *t, unsigned long timeout);
+
+static inline bool timer_active(const struct timer_list *t)
+{
+ return READ_ONCE(t->expires);
+}
+
+static inline bool timer_expired(const struct timer_list *t)
+{
+ return timer_active(t) && !timer_pending(t);
+}
+
+#endif /* __I915_TIMER_UTIL_H__ */
diff --git a/drivers/gpu/drm/i915/i915_utils.c b/drivers/gpu/drm/i915/i915_utils.c
index b60c28fbd207..49f7ed413132 100644
--- a/drivers/gpu/drm/i915/i915_utils.c
+++ b/drivers/gpu/drm/i915/i915_utils.c
@@ -47,36 +47,6 @@ bool i915_error_injected(void)
#endif
-void cancel_timer(struct timer_list *t)
-{
- if (!timer_active(t))
- return;
-
- timer_delete(t);
- WRITE_ONCE(t->expires, 0);
-}
-
-void set_timer_ms(struct timer_list *t, unsigned long timeout)
-{
- if (!timeout) {
- cancel_timer(t);
- return;
- }
-
- timeout = msecs_to_jiffies(timeout);
-
- /*
- * Paranoia to make sure the compiler computes the timeout before
- * loading 'jiffies' as jiffies is volatile and may be updated in
- * the background by a timer tick. All to reduce the complexity
- * of the addition and reduce the risk of losing a jiffy.
- */
- barrier();
-
- /* Keep t->expires = 0 reserved to indicate a canceled timer. */
- mod_timer(t, jiffies + timeout ?: 1);
-}
-
bool i915_vtd_active(struct drm_i915_private *i915)
{
if (device_iommu_mapped(i915->drm.dev))
diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
index dff02a944a57..6278a74d08c2 100644
--- a/drivers/gpu/drm/i915/i915_utils.h
+++ b/drivers/gpu/drm/i915/i915_utils.h
@@ -38,7 +38,6 @@
#endif
struct drm_i915_private;
-struct timer_list;
#define MISSING_CASE(x) WARN(1, "Missing case (%s == %ld)\n", \
__stringify(x), (long)(x))
@@ -270,19 +269,6 @@ static inline void __add_taint_for_CI(unsigned int taint)
add_taint(taint, LOCKDEP_STILL_OK);
}
-void cancel_timer(struct timer_list *t);
-void set_timer_ms(struct timer_list *t, unsigned long timeout);
-
-static inline bool timer_active(const struct timer_list *t)
-{
- return READ_ONCE(t->expires);
-}
-
-static inline bool timer_expired(const struct timer_list *t)
-{
- return timer_active(t) && !timer_pending(t);
-}
-
static inline bool i915_run_as_guest(void)
{
#if IS_ENABLED(CONFIG_X86)
--
2.47.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/5] drm/i915: split out i915_list_util.h
2025-09-08 14:11 [PATCH 0/5] drm/i915: clean up i915_utils.h Jani Nikula
` (2 preceding siblings ...)
2025-09-08 14:11 ` [PATCH 3/5] drm/i915: split out i915_timer_util.[ch] Jani Nikula
@ 2025-09-08 14:11 ` Jani Nikula
2025-09-09 13:39 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 5/5] drm/i915: split out i915_wait_util.h Jani Nikula
2025-09-08 19:07 ` ✗ Fi.CI.BUILD: failure for drm/i915: clean up i915_utils.h Patchwork
5 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2025-09-08 14:11 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Move list related utilities from i915_utils.h to separate new file
i915_list_util.h. Clean up related includes.
Note: Arguably none of this should exist in i915 in the first place. At
least isolate it better.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
.../drm/i915/gt/intel_execlists_submission.c | 1 +
.../gpu/drm/i915/gt/intel_gt_buffer_pool.c | 1 +
drivers/gpu/drm/i915/gt/intel_timeline.h | 2 +-
drivers/gpu/drm/i915/i915_list_util.h | 23 +++++++++++++++++++
drivers/gpu/drm/i915/i915_utils.h | 14 -----------
5 files changed, 26 insertions(+), 15 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_list_util.h
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index 52c8fddedfce..0c1b2df02d26 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -112,6 +112,7 @@
#include "gen8_engine_cs.h"
#include "i915_drv.h"
+#include "i915_list_util.h"
#include "i915_reg.h"
#include "i915_timer_util.h"
#include "i915_trace.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c b/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
index 86b5a9ba323d..c7befc5c20d0 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
@@ -7,6 +7,7 @@
#include "gem/i915_gem_object.h"
#include "i915_drv.h"
+#include "i915_list_util.h"
#include "intel_engine_pm.h"
#include "intel_gt_buffer_pool.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.h b/drivers/gpu/drm/i915/gt/intel_timeline.h
index 5f8c8f79714e..85b43f9b9d95 100644
--- a/drivers/gpu/drm/i915/gt/intel_timeline.h
+++ b/drivers/gpu/drm/i915/gt/intel_timeline.h
@@ -9,8 +9,8 @@
#include <linux/lockdep.h>
#include "i915_active.h"
+#include "i915_list_util.h"
#include "i915_syncmap.h"
-#include "i915_utils.h"
#include "intel_timeline_types.h"
struct drm_printer;
diff --git a/drivers/gpu/drm/i915/i915_list_util.h b/drivers/gpu/drm/i915/i915_list_util.h
new file mode 100644
index 000000000000..4e515dc8a3e0
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_list_util.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2025 Intel Corporation */
+
+#ifndef __I915_LIST_UTIL_H__
+#define __I915_LIST_UTIL_H__
+
+#include <linux/list.h>
+#include <asm/rwonce.h>
+
+static inline void __list_del_many(struct list_head *head,
+ struct list_head *first)
+{
+ first->prev = head;
+ WRITE_ONCE(head->next, first);
+}
+
+static inline int list_is_last_rcu(const struct list_head *list,
+ const struct list_head *head)
+{
+ return READ_ONCE(list->next) == head;
+}
+
+#endif /* __I915_LIST_UTIL_H__ */
diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
index 6278a74d08c2..4a6437d6e00e 100644
--- a/drivers/gpu/drm/i915/i915_utils.h
+++ b/drivers/gpu/drm/i915/i915_utils.h
@@ -25,7 +25,6 @@
#ifndef __I915_UTILS_H
#define __I915_UTILS_H
-#include <linux/list.h>
#include <linux/overflow.h>
#include <linux/sched.h>
#include <linux/string_helpers.h>
@@ -101,19 +100,6 @@ static inline bool is_power_of_2_u64(u64 n)
return (n != 0 && ((n & (n - 1)) == 0));
}
-static inline void __list_del_many(struct list_head *head,
- struct list_head *first)
-{
- first->prev = head;
- WRITE_ONCE(head->next, first);
-}
-
-static inline int list_is_last_rcu(const struct list_head *list,
- const struct list_head *head)
-{
- return READ_ONCE(list->next) == head;
-}
-
static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m)
{
unsigned long j = msecs_to_jiffies(m);
--
2.47.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/5] drm/i915: split out i915_wait_util.h
2025-09-08 14:11 [PATCH 0/5] drm/i915: clean up i915_utils.h Jani Nikula
` (3 preceding siblings ...)
2025-09-08 14:11 ` [PATCH 4/5] drm/i915: split out i915_list_util.h Jani Nikula
@ 2025-09-08 14:11 ` Jani Nikula
2025-09-09 13:40 ` Rodrigo Vivi
2025-09-08 19:07 ` ✗ Fi.CI.BUILD: failure for drm/i915: clean up i915_utils.h Patchwork
5 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2025-09-08 14:11 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Move waiting related utilities from i915_utils.h to separate new file
i915_wait_util.h. Clean up related includes.
Note: Many of the various wait macro usages could likely be refactored
to use poll_timeout_us().
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
.../drm/i915/gt/intel_execlists_submission.c | 1 +
drivers/gpu/drm/i915/gt/intel_gt_mcr.c | 1 +
drivers/gpu/drm/i915/gt/intel_reset.c | 7 +-
.../gpu/drm/i915/gt/intel_ring_submission.c | 7 +-
drivers/gpu/drm/i915/gt/intel_rps.c | 2 +
drivers/gpu/drm/i915/gt/selftest_tlb.c | 6 +-
drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c | 6 +-
.../i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c | 2 +
drivers/gpu/drm/i915/gt/uc/intel_guc.c | 8 +-
drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 3 +-
drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 4 +-
drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 13 +-
.../gpu/drm/i915/gt/uc/intel_guc_submission.c | 10 +-
drivers/gpu/drm/i915/gvt/mmio_context.c | 6 +-
drivers/gpu/drm/i915/i915_debugfs.c | 3 +-
drivers/gpu/drm/i915/i915_utils.h | 106 ----------------
drivers/gpu/drm/i915/i915_wait_util.h | 119 ++++++++++++++++++
drivers/gpu/drm/i915/intel_pcode.c | 1 +
drivers/gpu/drm/i915/intel_uncore.c | 7 +-
drivers/gpu/drm/i915/pxp/intel_pxp.c | 4 +-
drivers/gpu/drm/i915/selftests/i915_request.c | 5 +-
.../gpu/drm/i915/selftests/i915_selftest.c | 2 +-
drivers/gpu/drm/i915/selftests/igt_spinner.c | 5 +-
drivers/gpu/drm/i915/vlv_suspend.c | 5 +-
24 files changed, 183 insertions(+), 150 deletions(-)
create mode 100644 drivers/gpu/drm/i915/i915_wait_util.h
diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
index 0c1b2df02d26..7f389cb0bde4 100644
--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
@@ -117,6 +117,7 @@
#include "i915_timer_util.h"
#include "i915_trace.h"
#include "i915_vgpu.h"
+#include "i915_wait_util.h"
#include "intel_breadcrumbs.h"
#include "intel_context.h"
#include "intel_engine_heartbeat.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
index a60822e2b5d4..c3afa321fe30 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -4,6 +4,7 @@
*/
#include "i915_drv.h"
+#include "i915_wait_util.h"
#include "intel_gt.h"
#include "intel_gt_mcr.h"
#include "intel_gt_print.h"
diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c
index 4a1675dea1c7..41b5036dc538 100644
--- a/drivers/gpu/drm/i915/gt/intel_reset.c
+++ b/drivers/gpu/drm/i915/gt/intel_reset.c
@@ -9,18 +9,17 @@
#include "display/intel_display_reset.h"
#include "display/intel_overlay.h"
-
#include "gem/i915_gem_context.h"
-
#include "gt/intel_gt_regs.h"
-
#include "gt/uc/intel_gsc_fw.h"
+#include "uc/intel_guc.h"
#include "i915_drv.h"
#include "i915_file_private.h"
#include "i915_gpu_error.h"
#include "i915_irq.h"
#include "i915_reg.h"
+#include "i915_wait_util.h"
#include "intel_breadcrumbs.h"
#include "intel_engine_pm.h"
#include "intel_engine_regs.h"
@@ -32,8 +31,6 @@
#include "intel_pci_config.h"
#include "intel_reset.h"
-#include "uc/intel_guc.h"
-
#define RESET_MAX_RETRIES 3
static void client_mark_guilty(struct i915_gem_context *ctx, bool banned)
diff --git a/drivers/gpu/drm/i915/gt/intel_ring_submission.c b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
index 2a6d79abf25b..8314a4b0505e 100644
--- a/drivers/gpu/drm/i915/gt/intel_ring_submission.c
+++ b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
@@ -15,18 +15,19 @@
#include "i915_irq.h"
#include "i915_mitigations.h"
#include "i915_reg.h"
+#include "i915_wait_util.h"
#include "intel_breadcrumbs.h"
#include "intel_context.h"
+#include "intel_engine_heartbeat.h"
+#include "intel_engine_pm.h"
#include "intel_engine_regs.h"
#include "intel_gt.h"
#include "intel_gt_irq.h"
+#include "intel_gt_print.h"
#include "intel_gt_regs.h"
#include "intel_reset.h"
#include "intel_ring.h"
#include "shmem_utils.h"
-#include "intel_engine_heartbeat.h"
-#include "intel_engine_pm.h"
-#include "intel_gt_print.h"
/* Rough estimate of the typical request size, performing a flush,
* set-context and then emitting the batch.
diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
index 006042e0b229..4da94098bd3e 100644
--- a/drivers/gpu/drm/i915/gt/intel_rps.c
+++ b/drivers/gpu/drm/i915/gt/intel_rps.c
@@ -10,9 +10,11 @@
#include "display/intel_display.h"
#include "display/intel_display_rps.h"
#include "soc/intel_dram.h"
+
#include "i915_drv.h"
#include "i915_irq.h"
#include "i915_reg.h"
+#include "i915_wait_util.h"
#include "intel_breadcrumbs.h"
#include "intel_gt.h"
#include "intel_gt_clock_utils.h"
diff --git a/drivers/gpu/drm/i915/gt/selftest_tlb.c b/drivers/gpu/drm/i915/gt/selftest_tlb.c
index 69ed946a39e5..a5184f09d1de 100644
--- a/drivers/gpu/drm/i915/gt/selftest_tlb.c
+++ b/drivers/gpu/drm/i915/gt/selftest_tlb.c
@@ -3,17 +3,17 @@
* Copyright © 2022 Intel Corporation
*/
-#include "i915_selftest.h"
-
#include "gem/i915_gem_internal.h"
#include "gem/i915_gem_lmem.h"
#include "gem/i915_gem_region.h"
#include "gen8_engine_cs.h"
#include "i915_gem_ww.h"
+#include "i915_selftest.h"
+#include "i915_wait_util.h"
+#include "intel_context.h"
#include "intel_engine_regs.h"
#include "intel_gpu_commands.h"
-#include "intel_context.h"
#include "intel_gt.h"
#include "intel_ring.h"
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
index d8edd7c054c8..e7444ebc373e 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
@@ -10,11 +10,13 @@
#include "gt/intel_gt.h"
#include "gt/intel_gt_print.h"
+
+#include "i915_drv.h"
+#include "i915_reg.h"
+#include "i915_wait_util.h"
#include "intel_gsc_proxy.h"
#include "intel_gsc_uc.h"
#include "intel_gsc_uc_heci_cmd_submit.h"
-#include "i915_drv.h"
-#include "i915_reg.h"
/*
* GSC proxy:
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
index 2fde5c360cff..9bd29be7656f 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
@@ -8,6 +8,8 @@
#include "gt/intel_gpu_commands.h"
#include "gt/intel_gt.h"
#include "gt/intel_ring.h"
+
+#include "i915_wait_util.h"
#include "intel_gsc_uc_heci_cmd_submit.h"
struct gsc_heci_pkt {
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
index f360f020d8f1..52ec4421a211 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
@@ -8,15 +8,17 @@
#include "gt/intel_gt_irq.h"
#include "gt/intel_gt_pm_irq.h"
#include "gt/intel_gt_regs.h"
+
+#include "i915_drv.h"
+#include "i915_irq.h"
+#include "i915_reg.h"
+#include "i915_wait_util.h"
#include "intel_guc.h"
#include "intel_guc_ads.h"
#include "intel_guc_capture.h"
#include "intel_guc_print.h"
#include "intel_guc_slpc.h"
#include "intel_guc_submission.h"
-#include "i915_drv.h"
-#include "i915_irq.h"
-#include "i915_reg.h"
/**
* DOC: GuC
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
index 380a11c92d63..3e7e5badcc2b 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
@@ -5,11 +5,12 @@
#include <linux/circ_buf.h>
#include <linux/ktime.h>
-#include <linux/time64.h>
#include <linux/string_helpers.h>
+#include <linux/time64.h>
#include <linux/timekeeping.h>
#include "i915_drv.h"
+#include "i915_wait_util.h"
#include "intel_guc_ct.h"
#include "intel_guc_print.h"
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
index e7ccfa520df3..1bb1491f90fc 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
@@ -13,9 +13,11 @@
#include "gt/intel_gt_mcr.h"
#include "gt/intel_gt_regs.h"
#include "gt/intel_rps.h"
+
+#include "i915_drv.h"
+#include "i915_wait_util.h"
#include "intel_guc_fw.h"
#include "intel_guc_print.h"
-#include "i915_drv.h"
static void guc_prepare_xfer(struct intel_gt *gt)
{
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
index d5ee6e5e1443..fa9af08f9708 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
@@ -3,17 +3,20 @@
* Copyright © 2021 Intel Corporation
*/
-#include <drm/drm_cache.h>
#include <linux/string_helpers.h>
+#include <drm/drm_cache.h>
+
+#include "gt/intel_gt.h"
+#include "gt/intel_gt_regs.h"
+#include "gt/intel_rps.h"
+
#include "i915_drv.h"
#include "i915_reg.h"
-#include "intel_guc_slpc.h"
+#include "i915_wait_util.h"
#include "intel_guc_print.h"
+#include "intel_guc_slpc.h"
#include "intel_mchbar_regs.h"
-#include "gt/intel_gt.h"
-#include "gt/intel_gt_regs.h"
-#include "gt/intel_rps.h"
/**
* DOC: SLPC - Dynamic Frequency management
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 127316d2c8aa..68f2b8d363ac 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -25,16 +25,16 @@
#include "gt/intel_mocs.h"
#include "gt/intel_ring.h"
+#include "i915_drv.h"
+#include "i915_irq.h"
+#include "i915_reg.h"
+#include "i915_trace.h"
+#include "i915_wait_util.h"
#include "intel_guc_ads.h"
#include "intel_guc_capture.h"
#include "intel_guc_print.h"
#include "intel_guc_submission.h"
-#include "i915_drv.h"
-#include "i915_reg.h"
-#include "i915_irq.h"
-#include "i915_trace.h"
-
/**
* DOC: GuC-based command submission
*
diff --git a/drivers/gpu/drm/i915/gvt/mmio_context.c b/drivers/gpu/drm/i915/gvt/mmio_context.c
index 2f7208843367..0b810baad20a 100644
--- a/drivers/gpu/drm/i915/gvt/mmio_context.c
+++ b/drivers/gpu/drm/i915/gvt/mmio_context.c
@@ -33,14 +33,16 @@
*
*/
-#include "i915_drv.h"
-#include "i915_reg.h"
#include "gt/intel_context.h"
#include "gt/intel_engine_regs.h"
#include "gt/intel_gpu_commands.h"
#include "gt/intel_gt_regs.h"
#include "gt/intel_ring.h"
+
#include "gvt.h"
+#include "i915_drv.h"
+#include "i915_reg.h"
+#include "i915_wait_util.h"
#include "trace.h"
#define GEN9_MOCS_SIZE 64
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 23fa098c4479..c2e38d4bcd01 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -26,11 +26,11 @@
*
*/
+#include <linux/debugfs.h>
#include <linux/sched/mm.h>
#include <linux/sort.h>
#include <linux/string_helpers.h>
-#include <linux/debugfs.h>
#include <drm/drm_debugfs.h>
#include "gem/i915_gem_context.h"
@@ -54,6 +54,7 @@
#include "i915_irq.h"
#include "i915_reg.h"
#include "i915_scheduler.h"
+#include "i915_wait_util.h"
#include "intel_mchbar_regs.h"
static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
index 4a6437d6e00e..a0c892e4c40d 100644
--- a/drivers/gpu/drm/i915/i915_utils.h
+++ b/drivers/gpu/drm/i915/i915_utils.h
@@ -134,112 +134,6 @@ wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms)
}
}
-/*
- * __wait_for - magic wait macro
- *
- * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
- * important that we check the condition again after having timed out, since the
- * timeout could be due to preemption or similar and we've never had a chance to
- * check the condition before the timeout.
- */
-#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
- const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
- long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
- int ret__; \
- might_sleep(); \
- for (;;) { \
- const bool expired__ = ktime_after(ktime_get_raw(), end__); \
- OP; \
- /* Guarantee COND check prior to timeout */ \
- barrier(); \
- if (COND) { \
- ret__ = 0; \
- break; \
- } \
- if (expired__) { \
- ret__ = -ETIMEDOUT; \
- break; \
- } \
- usleep_range(wait__, wait__ * 2); \
- if (wait__ < (Wmax)) \
- wait__ <<= 1; \
- } \
- ret__; \
-})
-
-#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
- (Wmax))
-#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
-
-/*
- * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
- * On PREEMPT_RT the context isn't becoming atomic because it is used in an
- * interrupt handler or because a spinlock_t is acquired. This leads to
- * warnings which don't occur otherwise and therefore the check is disabled.
- */
-#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
-# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
-#else
-# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
-#endif
-
-#define _wait_for_atomic(COND, US, ATOMIC) \
-({ \
- int cpu, ret, timeout = (US) * 1000; \
- u64 base; \
- _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
- if (!(ATOMIC)) { \
- preempt_disable(); \
- cpu = smp_processor_id(); \
- } \
- base = local_clock(); \
- for (;;) { \
- u64 now = local_clock(); \
- if (!(ATOMIC)) \
- preempt_enable(); \
- /* Guarantee COND check prior to timeout */ \
- barrier(); \
- if (COND) { \
- ret = 0; \
- break; \
- } \
- if (now - base >= timeout) { \
- ret = -ETIMEDOUT; \
- break; \
- } \
- cpu_relax(); \
- if (!(ATOMIC)) { \
- preempt_disable(); \
- if (unlikely(cpu != smp_processor_id())) { \
- timeout -= now - base; \
- cpu = smp_processor_id(); \
- base = local_clock(); \
- } \
- } \
- } \
- ret; \
-})
-
-#define wait_for_us(COND, US) \
-({ \
- int ret__; \
- BUILD_BUG_ON(!__builtin_constant_p(US)); \
- if ((US) > 10) \
- ret__ = _wait_for((COND), (US), 10, 10); \
- else \
- ret__ = _wait_for_atomic((COND), (US), 0); \
- ret__; \
-})
-
-#define wait_for_atomic_us(COND, US) \
-({ \
- BUILD_BUG_ON(!__builtin_constant_p(US)); \
- BUILD_BUG_ON((US) > 50000); \
- _wait_for_atomic((COND), (US), 1); \
-})
-
-#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
-
#define KHz(x) (1000 * (x))
#define MHz(x) KHz(1000 * (x))
diff --git a/drivers/gpu/drm/i915/i915_wait_util.h b/drivers/gpu/drm/i915/i915_wait_util.h
new file mode 100644
index 000000000000..7376898e3bf8
--- /dev/null
+++ b/drivers/gpu/drm/i915/i915_wait_util.h
@@ -0,0 +1,119 @@
+/* SPDX-License-Identifier: MIT */
+/* Copyright © 2025 Intel Corporation */
+
+#ifndef __I915_WAIT_UTIL_H__
+#define __I915_WAIT_UTIL_H__
+
+#include <linux/compiler.h>
+#include <linux/delay.h>
+#include <linux/ktime.h>
+#include <linux/sched/clock.h>
+#include <linux/smp.h>
+
+/*
+ * __wait_for - magic wait macro
+ *
+ * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
+ * important that we check the condition again after having timed out, since the
+ * timeout could be due to preemption or similar and we've never had a chance to
+ * check the condition before the timeout.
+ */
+#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
+ const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
+ long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
+ int ret__; \
+ might_sleep(); \
+ for (;;) { \
+ const bool expired__ = ktime_after(ktime_get_raw(), end__); \
+ OP; \
+ /* Guarantee COND check prior to timeout */ \
+ barrier(); \
+ if (COND) { \
+ ret__ = 0; \
+ break; \
+ } \
+ if (expired__) { \
+ ret__ = -ETIMEDOUT; \
+ break; \
+ } \
+ usleep_range(wait__, wait__ * 2); \
+ if (wait__ < (Wmax)) \
+ wait__ <<= 1; \
+ } \
+ ret__; \
+})
+
+#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
+ (Wmax))
+#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
+
+/*
+ * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
+ * On PREEMPT_RT the context isn't becoming atomic because it is used in an
+ * interrupt handler or because a spinlock_t is acquired. This leads to
+ * warnings which don't occur otherwise and therefore the check is disabled.
+ */
+#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
+# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
+#else
+# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
+#endif
+
+#define _wait_for_atomic(COND, US, ATOMIC) \
+({ \
+ int cpu, ret, timeout = (US) * 1000; \
+ u64 base; \
+ _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
+ if (!(ATOMIC)) { \
+ preempt_disable(); \
+ cpu = smp_processor_id(); \
+ } \
+ base = local_clock(); \
+ for (;;) { \
+ u64 now = local_clock(); \
+ if (!(ATOMIC)) \
+ preempt_enable(); \
+ /* Guarantee COND check prior to timeout */ \
+ barrier(); \
+ if (COND) { \
+ ret = 0; \
+ break; \
+ } \
+ if (now - base >= timeout) { \
+ ret = -ETIMEDOUT; \
+ break; \
+ } \
+ cpu_relax(); \
+ if (!(ATOMIC)) { \
+ preempt_disable(); \
+ if (unlikely(cpu != smp_processor_id())) { \
+ timeout -= now - base; \
+ cpu = smp_processor_id(); \
+ base = local_clock(); \
+ } \
+ } \
+ } \
+ ret; \
+})
+
+#define wait_for_us(COND, US) \
+({ \
+ int ret__; \
+ BUILD_BUG_ON(!__builtin_constant_p(US)); \
+ if ((US) > 10) \
+ ret__ = _wait_for((COND), (US), 10, 10); \
+ else \
+ ret__ = _wait_for_atomic((COND), (US), 0); \
+ ret__; \
+})
+
+#define wait_for_atomic_us(COND, US) \
+({ \
+ BUILD_BUG_ON(!__builtin_constant_p(US)); \
+ BUILD_BUG_ON((US) > 50000); \
+ _wait_for_atomic((COND), (US), 1); \
+})
+
+#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
+
+#endif /* __I915_WAIT_UTIL_H__ */
diff --git a/drivers/gpu/drm/i915/intel_pcode.c b/drivers/gpu/drm/i915/intel_pcode.c
index 81da75108c60..55ffedad2490 100644
--- a/drivers/gpu/drm/i915/intel_pcode.c
+++ b/drivers/gpu/drm/i915/intel_pcode.c
@@ -5,6 +5,7 @@
#include "i915_drv.h"
#include "i915_reg.h"
+#include "i915_wait_util.h"
#include "intel_pcode.h"
static int gen6_check_mailbox_status(u32 mbox)
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index 4ccba7c8ffb3..8cb59f8d1f4c 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -21,19 +21,20 @@
* IN THE SOFTWARE.
*/
-#include <drm/drm_managed.h>
#include <linux/pm_runtime.h>
-#include "display/intel_display_core.h"
+#include <drm/drm_managed.h>
-#include "gt/intel_gt.h"
+#include "display/intel_display_core.h"
#include "gt/intel_engine_regs.h"
+#include "gt/intel_gt.h"
#include "gt/intel_gt_regs.h"
#include "i915_drv.h"
#include "i915_iosf_mbi.h"
#include "i915_reg.h"
#include "i915_vgpu.h"
+#include "i915_wait_util.h"
#include "intel_uncore_trace.h"
#define FORCEWAKE_ACK_TIMEOUT_MS 50
diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp.c b/drivers/gpu/drm/i915/pxp/intel_pxp.c
index f8da693ad3ce..27d545c4e6a5 100644
--- a/drivers/gpu/drm/i915/pxp/intel_pxp.c
+++ b/drivers/gpu/drm/i915/pxp/intel_pxp.c
@@ -2,15 +2,15 @@
/*
* Copyright(c) 2020 Intel Corporation.
*/
+
#include <linux/workqueue.h>
#include "gem/i915_gem_context.h"
-
#include "gt/intel_context.h"
#include "gt/intel_gt.h"
#include "i915_drv.h"
-
+#include "i915_wait_util.h"
#include "intel_pxp.h"
#include "intel_pxp_gsccs.h"
#include "intel_pxp_irq.h"
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
index 2fb7a9e7efec..48cd617247d1 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -22,14 +22,13 @@
*
*/
-#include <linux/prime_numbers.h>
#include <linux/pm_qos.h>
+#include <linux/prime_numbers.h>
#include <linux/sort.h>
#include "gem/i915_gem_internal.h"
#include "gem/i915_gem_pm.h"
#include "gem/selftests/mock_context.h"
-
#include "gt/intel_engine_heartbeat.h"
#include "gt/intel_engine_pm.h"
#include "gt/intel_engine_user.h"
@@ -40,11 +39,11 @@
#include "i915_random.h"
#include "i915_selftest.h"
+#include "i915_wait_util.h"
#include "igt_flush_test.h"
#include "igt_live_test.h"
#include "igt_spinner.h"
#include "lib_sw_fence.h"
-
#include "mock_drm.h"
#include "mock_gem_device.h"
diff --git a/drivers/gpu/drm/i915/selftests/i915_selftest.c b/drivers/gpu/drm/i915/selftests/i915_selftest.c
index 889281819c5b..9c276c9d0a75 100644
--- a/drivers/gpu/drm/i915/selftests/i915_selftest.c
+++ b/drivers/gpu/drm/i915/selftests/i915_selftest.c
@@ -31,7 +31,7 @@
#include "i915_driver.h"
#include "i915_drv.h"
#include "i915_selftest.h"
-
+#include "i915_wait_util.h"
#include "igt_flush_test.h"
struct i915_selftest i915_selftest __read_mostly = {
diff --git a/drivers/gpu/drm/i915/selftests/igt_spinner.c b/drivers/gpu/drm/i915/selftests/igt_spinner.c
index 8c3e1f20e5a1..820364171ebe 100644
--- a/drivers/gpu/drm/i915/selftests/igt_spinner.c
+++ b/drivers/gpu/drm/i915/selftests/igt_spinner.c
@@ -3,12 +3,13 @@
*
* Copyright © 2018 Intel Corporation
*/
-#include "gt/intel_gpu_commands.h"
-#include "gt/intel_gt.h"
#include "gem/i915_gem_internal.h"
#include "gem/selftests/igt_gem_utils.h"
+#include "gt/intel_gpu_commands.h"
+#include "gt/intel_gt.h"
+#include "i915_wait_util.h"
#include "igt_spinner.h"
int igt_spinner_init(struct igt_spinner *spin, struct intel_gt *gt)
diff --git a/drivers/gpu/drm/i915/vlv_suspend.c b/drivers/gpu/drm/i915/vlv_suspend.c
index fc9f311ea1db..221e4c0b2c58 100644
--- a/drivers/gpu/drm/i915/vlv_suspend.c
+++ b/drivers/gpu/drm/i915/vlv_suspend.c
@@ -8,16 +8,17 @@
#include <drm/drm_print.h>
+#include "gt/intel_gt_regs.h"
+
#include "i915_drv.h"
#include "i915_reg.h"
#include "i915_trace.h"
#include "i915_utils.h"
+#include "i915_wait_util.h"
#include "intel_clock_gating.h"
#include "intel_uncore_trace.h"
#include "vlv_suspend.h"
-#include "gt/intel_gt_regs.h"
-
struct vlv_s0ix_state {
/* GAM */
u32 wr_watermark;
--
2.47.3
^ permalink raw reply related [flat|nested] 14+ messages in thread
* ✗ Fi.CI.BUILD: failure for drm/i915: clean up i915_utils.h
2025-09-08 14:11 [PATCH 0/5] drm/i915: clean up i915_utils.h Jani Nikula
` (4 preceding siblings ...)
2025-09-08 14:11 ` [PATCH 5/5] drm/i915: split out i915_wait_util.h Jani Nikula
@ 2025-09-08 19:07 ` Patchwork
5 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2025-09-08 19:07 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Series Details ==
Series: drm/i915: clean up i915_utils.h
URL : https://patchwork.freedesktop.org/series/154194/
State : failure
== Summary ==
Error: make failed
CALL scripts/checksyscalls.sh
DESCEND objtool
INSTALL libsubcmd_headers
CC [M] drivers/gpu/drm/i915/i915_driver.o
In file included from ./drivers/gpu/drm/i915/gt/intel_engine_types.h:20,
from ./drivers/gpu/drm/i915/gt/intel_context_types.h:17,
from drivers/gpu/drm/i915/gem/i915_gem_context_types.h:19,
from drivers/gpu/drm/i915/gem/i915_gem_context.h:9,
from drivers/gpu/drm/i915/i915_driver.c:70:
./drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h: In function ‘engine_class_to_guc_class’:
./drivers/gpu/drm/i915/i915_gem.h:123:37: error: implicit declaration of function ‘__add_taint_for_CI’ [-Werror=implicit-function-declaration]
123 | do { ftrace_dump(DUMP_ALL); __add_taint_for_CI(TAINT_WARN); } while (0)
| ^~~~~~~~~~~~~~~~~~
./drivers/gpu/drm/i915/i915_gem.h:98:17: note: in expansion of macro ‘GEM_TRACE_DUMP’
98 | GEM_TRACE_DUMP(); \
| ^~~~~~~~~~~~~~
./drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:186:9: note: in expansion of macro ‘GEM_BUG_ON’
186 | GEM_BUG_ON(class > MAX_ENGINE_CLASS);
| ^~~~~~~~~~
In file included from ./drivers/gpu/drm/i915/i915_drv.h:56,
from ./drivers/gpu/drm/i915/gt/intel_context.h:14,
from drivers/gpu/drm/i915/gem/i915_gem_context.h:11:
./drivers/gpu/drm/i915/i915_utils.h: At top level:
./drivers/gpu/drm/i915/i915_utils.h:141:20: error: conflicting types for ‘__add_taint_for_CI’; have ‘void(unsigned int)’ [-Werror]
141 | static inline void __add_taint_for_CI(unsigned int taint)
| ^~~~~~~~~~~~~~~~~~
./drivers/gpu/drm/i915/i915_utils.h:141:20: error: static declaration of ‘__add_taint_for_CI’ follows non-static declaration
./drivers/gpu/drm/i915/i915_gem.h:123:37: note: previous implicit declaration of ‘__add_taint_for_CI’ with type ‘void(unsigned int)’
123 | do { ftrace_dump(DUMP_ALL); __add_taint_for_CI(TAINT_WARN); } while (0)
| ^~~~~~~~~~~~~~~~~~
./drivers/gpu/drm/i915/i915_gem.h:98:17: note: in expansion of macro ‘GEM_TRACE_DUMP’
98 | GEM_TRACE_DUMP(); \
| ^~~~~~~~~~~~~~
./drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:186:9: note: in expansion of macro ‘GEM_BUG_ON’
186 | GEM_BUG_ON(class > MAX_ENGINE_CLASS);
| ^~~~~~~~~~
cc1: all warnings being treated as errors
make[6]: *** [scripts/Makefile.build:287: drivers/gpu/drm/i915/i915_driver.o] Error 1
make[5]: *** [scripts/Makefile.build:556: drivers/gpu/drm/i915] Error 2
make[4]: *** [scripts/Makefile.build:556: drivers/gpu/drm] Error 2
make[3]: *** [scripts/Makefile.build:556: drivers/gpu] Error 2
make[2]: *** [scripts/Makefile.build:556: drivers] Error 2
make[1]: *** [/home/kbuild2/kernel/Makefile:2011: .] Error 2
make: *** [Makefile:248: __sub-make] Error 2
Build failed, no error log produced
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] drm/i915: redundant i915_utils.h includes
2025-09-08 14:11 ` [PATCH 1/5] drm/i915: redundant i915_utils.h includes Jani Nikula
@ 2025-09-09 13:36 ` Rodrigo Vivi
0 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Vivi @ 2025-09-09 13:36 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Mon, Sep 08, 2025 at 05:11:45PM +0300, Jani Nikula wrote:
> Neither intel_guc.h nor i915_gem.h need i915_utils.h anymore. Just drop
> the includes.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/gt/uc/intel_guc.h | 1 -
> drivers/gpu/drm/i915/i915_gem.h | 2 --
> 2 files changed, 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.h b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
> index 053780f562c1..ce766f558ce5 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
> @@ -18,7 +18,6 @@
> #include "intel_guc_slpc_types.h"
> #include "intel_uc_fw.h"
> #include "intel_uncore.h"
> -#include "i915_utils.h"
> #include "i915_vma.h"
>
> struct __guc_ads_blob;
> diff --git a/drivers/gpu/drm/i915/i915_gem.h b/drivers/gpu/drm/i915/i915_gem.h
> index 20b3cb29cfff..cd7114002944 100644
> --- a/drivers/gpu/drm/i915/i915_gem.h
> +++ b/drivers/gpu/drm/i915/i915_gem.h
> @@ -30,8 +30,6 @@
>
> #include <drm/drm_drv.h>
>
> -#include "i915_utils.h"
> -
> struct drm_file;
> struct drm_i915_gem_object;
> struct drm_i915_private;
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/5] drm/i915: split out i915_ptr_util.h
2025-09-08 14:11 ` [PATCH 2/5] drm/i915: split out i915_ptr_util.h Jani Nikula
@ 2025-09-09 13:37 ` Rodrigo Vivi
0 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Vivi @ 2025-09-09 13:37 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Mon, Sep 08, 2025 at 05:11:46PM +0300, Jani Nikula wrote:
> Move pointer related utilities from i915_utils.h to a separate new
> i915_ptr_util.h header. Clean up related includes.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
I wonder if we should add some 'i915_' prefix in them
to avoid pretending they are a global kernel thing...
but the spin off is already a good clean-up start point...
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_context_types.h | 1 -
> drivers/gpu/drm/i915/gt/intel_timeline.h | 1 +
> drivers/gpu/drm/i915/i915_ptr_util.h | 66 +++++++++++++++++++
> drivers/gpu/drm/i915/i915_request.h | 5 +-
> drivers/gpu/drm/i915/i915_utils.h | 57 ----------------
> drivers/gpu/drm/i915/i915_vma.h | 6 +-
> 6 files changed, 73 insertions(+), 63 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/i915_ptr_util.h
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_context_types.h b/drivers/gpu/drm/i915/gt/intel_context_types.h
> index 98c7f6052069..10070ee4d74c 100644
> --- a/drivers/gpu/drm/i915/gt/intel_context_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_context_types.h
> @@ -14,7 +14,6 @@
>
> #include "i915_active_types.h"
> #include "i915_sw_fence.h"
> -#include "i915_utils.h"
> #include "intel_engine_types.h"
> #include "intel_sseu.h"
> #include "intel_wakeref.h"
> diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.h b/drivers/gpu/drm/i915/gt/intel_timeline.h
> index 57308c4d664a..5f8c8f79714e 100644
> --- a/drivers/gpu/drm/i915/gt/intel_timeline.h
> +++ b/drivers/gpu/drm/i915/gt/intel_timeline.h
> @@ -10,6 +10,7 @@
>
> #include "i915_active.h"
> #include "i915_syncmap.h"
> +#include "i915_utils.h"
> #include "intel_timeline_types.h"
>
> struct drm_printer;
> diff --git a/drivers/gpu/drm/i915/i915_ptr_util.h b/drivers/gpu/drm/i915/i915_ptr_util.h
> new file mode 100644
> index 000000000000..9f8931d7d99b
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_ptr_util.h
> @@ -0,0 +1,66 @@
> +/* SPDX-License-Identifier: MIT */
> +/* Copyright © 2025 Intel Corporation */
> +
> +#ifndef __I915_PTR_UTIL_H__
> +#define __I915_PTR_UTIL_H__
> +
> +#include <linux/types.h>
> +
> +#define ptr_mask_bits(ptr, n) ({ \
> + unsigned long __v = (unsigned long)(ptr); \
> + (typeof(ptr))(__v & -BIT(n)); \
> +})
> +
> +#define ptr_unmask_bits(ptr, n) ((unsigned long)(ptr) & (BIT(n) - 1))
> +
> +#define ptr_unpack_bits(ptr, bits, n) ({ \
> + unsigned long __v = (unsigned long)(ptr); \
> + *(bits) = __v & (BIT(n) - 1); \
> + (typeof(ptr))(__v & -BIT(n)); \
> +})
> +
> +#define ptr_pack_bits(ptr, bits, n) ({ \
> + unsigned long __bits = (bits); \
> + GEM_BUG_ON(__bits & -BIT(n)); \
> + ((typeof(ptr))((unsigned long)(ptr) | __bits)); \
> +})
> +
> +#define ptr_dec(ptr) ({ \
> + unsigned long __v = (unsigned long)(ptr); \
> + (typeof(ptr))(__v - 1); \
> +})
> +
> +#define ptr_inc(ptr) ({ \
> + unsigned long __v = (unsigned long)(ptr); \
> + (typeof(ptr))(__v + 1); \
> +})
> +
> +#define page_mask_bits(ptr) ptr_mask_bits(ptr, PAGE_SHIFT)
> +#define page_unmask_bits(ptr) ptr_unmask_bits(ptr, PAGE_SHIFT)
> +#define page_pack_bits(ptr, bits) ptr_pack_bits(ptr, bits, PAGE_SHIFT)
> +#define page_unpack_bits(ptr, bits) ptr_unpack_bits(ptr, bits, PAGE_SHIFT)
> +
> +static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
> +{
> + return a - b;
> +}
> +
> +#define u64_to_ptr(T, x) ({ \
> + typecheck(u64, x); \
> + (T *)(uintptr_t)(x); \
> +})
> +
> +/*
> + * container_of_user: Extract the superclass from a pointer to a member.
> + *
> + * Exactly like container_of() with the exception that it plays nicely
> + * with sparse for __user @ptr.
> + */
> +#define container_of_user(ptr, type, member) ({ \
> + void __user *__mptr = (void __user *)(ptr); \
> + BUILD_BUG_ON_MSG(!__same_type(*(ptr), typeof_member(type, member)) && \
> + !__same_type(*(ptr), void), \
> + "pointer type mismatch in container_of()"); \
> + ((type __user *)(__mptr - offsetof(type, member))); })
> +
> +#endif /* __I915_PTR_UTIL_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_request.h b/drivers/gpu/drm/i915/i915_request.h
> index 5f7e8138ec14..b09135301f39 100644
> --- a/drivers/gpu/drm/i915/i915_request.h
> +++ b/drivers/gpu/drm/i915/i915_request.h
> @@ -31,19 +31,20 @@
> #include <linux/llist.h>
> #include <linux/lockdep.h>
>
> +#include <uapi/drm/i915_drm.h>
> +
> #include "gem/i915_gem_context_types.h"
> #include "gt/intel_context_types.h"
> #include "gt/intel_engine_types.h"
> #include "gt/intel_timeline_types.h"
>
> #include "i915_gem.h"
> +#include "i915_ptr_util.h"
> #include "i915_scheduler.h"
> #include "i915_selftest.h"
> #include "i915_sw_fence.h"
> #include "i915_vma_resource.h"
>
> -#include <uapi/drm/i915_drm.h>
> -
> struct drm_file;
> struct drm_i915_gem_object;
> struct drm_printer;
> diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
> index eb4d43c40009..dff02a944a57 100644
> --- a/drivers/gpu/drm/i915/i915_utils.h
> +++ b/drivers/gpu/drm/i915/i915_utils.h
> @@ -67,64 +67,12 @@ bool i915_error_injected(void);
> drm_err(&(i915)->drm, fmt, ##__VA_ARGS__); \
> })
>
> -#define ptr_mask_bits(ptr, n) ({ \
> - unsigned long __v = (unsigned long)(ptr); \
> - (typeof(ptr))(__v & -BIT(n)); \
> -})
> -
> -#define ptr_unmask_bits(ptr, n) ((unsigned long)(ptr) & (BIT(n) - 1))
> -
> -#define ptr_unpack_bits(ptr, bits, n) ({ \
> - unsigned long __v = (unsigned long)(ptr); \
> - *(bits) = __v & (BIT(n) - 1); \
> - (typeof(ptr))(__v & -BIT(n)); \
> -})
> -
> -#define ptr_pack_bits(ptr, bits, n) ({ \
> - unsigned long __bits = (bits); \
> - GEM_BUG_ON(__bits & -BIT(n)); \
> - ((typeof(ptr))((unsigned long)(ptr) | __bits)); \
> -})
> -
> -#define ptr_dec(ptr) ({ \
> - unsigned long __v = (unsigned long)(ptr); \
> - (typeof(ptr))(__v - 1); \
> -})
> -
> -#define ptr_inc(ptr) ({ \
> - unsigned long __v = (unsigned long)(ptr); \
> - (typeof(ptr))(__v + 1); \
> -})
> -
> -#define page_mask_bits(ptr) ptr_mask_bits(ptr, PAGE_SHIFT)
> -#define page_unmask_bits(ptr) ptr_unmask_bits(ptr, PAGE_SHIFT)
> -#define page_pack_bits(ptr, bits) ptr_pack_bits(ptr, bits, PAGE_SHIFT)
> -#define page_unpack_bits(ptr, bits) ptr_unpack_bits(ptr, bits, PAGE_SHIFT)
> -
> #define fetch_and_zero(ptr) ({ \
> typeof(*ptr) __T = *(ptr); \
> *(ptr) = (typeof(*ptr))0; \
> __T; \
> })
>
> -static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
> -{
> - return a - b;
> -}
> -
> -/*
> - * container_of_user: Extract the superclass from a pointer to a member.
> - *
> - * Exactly like container_of() with the exception that it plays nicely
> - * with sparse for __user @ptr.
> - */
> -#define container_of_user(ptr, type, member) ({ \
> - void __user *__mptr = (void __user *)(ptr); \
> - BUILD_BUG_ON_MSG(!__same_type(*(ptr), typeof_member(type, member)) && \
> - !__same_type(*(ptr), void), \
> - "pointer type mismatch in container_of()"); \
> - ((type __user *)(__mptr - offsetof(type, member))); })
> -
> /*
> * check_user_mbz: Check that a user value exists and is zero
> *
> @@ -143,11 +91,6 @@ static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
> get_user(mbz__, (U)) ? -EFAULT : mbz__ ? -EINVAL : 0; \
> })
>
> -#define u64_to_ptr(T, x) ({ \
> - typecheck(u64, x); \
> - (T *)(uintptr_t)(x); \
> -})
> -
> #define __mask_next_bit(mask) ({ \
> int __idx = ffs(mask) - 1; \
> mask &= ~BIT(__idx); \
> diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h
> index 0f9eee6d18d2..8054047840aa 100644
> --- a/drivers/gpu/drm/i915/i915_vma.h
> +++ b/drivers/gpu/drm/i915/i915_vma.h
> @@ -30,12 +30,12 @@
>
> #include <drm/drm_mm.h>
>
> -#include "gt/intel_ggtt_fencing.h"
> #include "gem/i915_gem_object.h"
> -
> -#include "i915_gem_gtt.h"
> +#include "gt/intel_ggtt_fencing.h"
>
> #include "i915_active.h"
> +#include "i915_gem_gtt.h"
> +#include "i915_ptr_util.h"
> #include "i915_request.h"
> #include "i915_vma_resource.h"
> #include "i915_vma_types.h"
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] drm/i915: split out i915_timer_util.[ch]
2025-09-08 14:11 ` [PATCH 3/5] drm/i915: split out i915_timer_util.[ch] Jani Nikula
@ 2025-09-09 13:38 ` Rodrigo Vivi
0 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Vivi @ 2025-09-09 13:38 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Mon, Sep 08, 2025 at 05:11:47PM +0300, Jani Nikula wrote:
> Move timer related utilities from i915_utils.[ch] to separate new files
> i915_timer_util.[ch]. Clean up related includes.
>
> Note: Arguably none of this should exist in i915 in the first place. At
> least isolate it better.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/i915/Makefile | 1 +
> .../drm/i915/gt/intel_execlists_submission.c | 4 ++-
> drivers/gpu/drm/i915/gt/sysfs_engines.c | 1 +
> drivers/gpu/drm/i915/i915_timer_util.c | 36 +++++++++++++++++++
> drivers/gpu/drm/i915/i915_timer_util.h | 23 ++++++++++++
> drivers/gpu/drm/i915/i915_utils.c | 30 ----------------
> drivers/gpu/drm/i915/i915_utils.h | 14 --------
> 7 files changed, 64 insertions(+), 45 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/i915_timer_util.c
> create mode 100644 drivers/gpu/drm/i915/i915_timer_util.h
>
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index db150a0c33ce..e58c0c158b3a 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -32,6 +32,7 @@ i915-y += \
> i915_scatterlist.o \
> i915_switcheroo.o \
> i915_sysfs.o \
> + i915_timer_util.o \
> i915_utils.o \
> intel_clock_gating.o \
> intel_cpu_info.o \
> diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> index 03baa7fa0a27..52c8fddedfce 100644
> --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> @@ -106,14 +106,16 @@
> * preemption, but just sampling the new tail pointer).
> *
> */
> +
> #include <linux/interrupt.h>
> #include <linux/string_helpers.h>
>
> +#include "gen8_engine_cs.h"
> #include "i915_drv.h"
> #include "i915_reg.h"
> +#include "i915_timer_util.h"
> #include "i915_trace.h"
> #include "i915_vgpu.h"
> -#include "gen8_engine_cs.h"
> #include "intel_breadcrumbs.h"
> #include "intel_context.h"
> #include "intel_engine_heartbeat.h"
> diff --git a/drivers/gpu/drm/i915/gt/sysfs_engines.c b/drivers/gpu/drm/i915/gt/sysfs_engines.c
> index aab2759067d2..4a81bc396b21 100644
> --- a/drivers/gpu/drm/i915/gt/sysfs_engines.c
> +++ b/drivers/gpu/drm/i915/gt/sysfs_engines.c
> @@ -7,6 +7,7 @@
> #include <linux/sysfs.h>
>
> #include "i915_drv.h"
> +#include "i915_timer_util.h"
> #include "intel_engine.h"
> #include "intel_engine_heartbeat.h"
> #include "sysfs_engines.h"
> diff --git a/drivers/gpu/drm/i915/i915_timer_util.c b/drivers/gpu/drm/i915/i915_timer_util.c
> new file mode 100644
> index 000000000000..ee4cfd8b3c07
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_timer_util.c
> @@ -0,0 +1,36 @@
> +// SPDX-License-Identifier: MIT
> +/* Copyright © 2025 Intel Corporation */
> +
> +#include <linux/jiffies.h>
> +
> +#include "i915_timer_util.h"
> +
> +void cancel_timer(struct timer_list *t)
> +{
> + if (!timer_active(t))
> + return;
> +
> + timer_delete(t);
> + WRITE_ONCE(t->expires, 0);
> +}
> +
> +void set_timer_ms(struct timer_list *t, unsigned long timeout)
> +{
> + if (!timeout) {
> + cancel_timer(t);
> + return;
> + }
> +
> + timeout = msecs_to_jiffies(timeout);
> +
> + /*
> + * Paranoia to make sure the compiler computes the timeout before
> + * loading 'jiffies' as jiffies is volatile and may be updated in
> + * the background by a timer tick. All to reduce the complexity
> + * of the addition and reduce the risk of losing a jiffy.
> + */
> + barrier();
> +
> + /* Keep t->expires = 0 reserved to indicate a canceled timer. */
> + mod_timer(t, jiffies + timeout ?: 1);
> +}
> diff --git a/drivers/gpu/drm/i915/i915_timer_util.h b/drivers/gpu/drm/i915/i915_timer_util.h
> new file mode 100644
> index 000000000000..f35ad730820c
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_timer_util.h
> @@ -0,0 +1,23 @@
> +/* SPDX-License-Identifier: MIT */
> +/* Copyright © 2025 Intel Corporation */
> +
> +#ifndef __I915_TIMER_UTIL_H__
> +#define __I915_TIMER_UTIL_H__
> +
> +#include <linux/timer.h>
> +#include <asm/rwonce.h>
> +
> +void cancel_timer(struct timer_list *t);
> +void set_timer_ms(struct timer_list *t, unsigned long timeout);
> +
> +static inline bool timer_active(const struct timer_list *t)
> +{
> + return READ_ONCE(t->expires);
> +}
> +
> +static inline bool timer_expired(const struct timer_list *t)
> +{
> + return timer_active(t) && !timer_pending(t);
> +}
> +
> +#endif /* __I915_TIMER_UTIL_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_utils.c b/drivers/gpu/drm/i915/i915_utils.c
> index b60c28fbd207..49f7ed413132 100644
> --- a/drivers/gpu/drm/i915/i915_utils.c
> +++ b/drivers/gpu/drm/i915/i915_utils.c
> @@ -47,36 +47,6 @@ bool i915_error_injected(void)
>
> #endif
>
> -void cancel_timer(struct timer_list *t)
> -{
> - if (!timer_active(t))
> - return;
> -
> - timer_delete(t);
> - WRITE_ONCE(t->expires, 0);
> -}
> -
> -void set_timer_ms(struct timer_list *t, unsigned long timeout)
> -{
> - if (!timeout) {
> - cancel_timer(t);
> - return;
> - }
> -
> - timeout = msecs_to_jiffies(timeout);
> -
> - /*
> - * Paranoia to make sure the compiler computes the timeout before
> - * loading 'jiffies' as jiffies is volatile and may be updated in
> - * the background by a timer tick. All to reduce the complexity
> - * of the addition and reduce the risk of losing a jiffy.
> - */
> - barrier();
> -
> - /* Keep t->expires = 0 reserved to indicate a canceled timer. */
> - mod_timer(t, jiffies + timeout ?: 1);
> -}
> -
> bool i915_vtd_active(struct drm_i915_private *i915)
> {
> if (device_iommu_mapped(i915->drm.dev))
> diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
> index dff02a944a57..6278a74d08c2 100644
> --- a/drivers/gpu/drm/i915/i915_utils.h
> +++ b/drivers/gpu/drm/i915/i915_utils.h
> @@ -38,7 +38,6 @@
> #endif
>
> struct drm_i915_private;
> -struct timer_list;
>
> #define MISSING_CASE(x) WARN(1, "Missing case (%s == %ld)\n", \
> __stringify(x), (long)(x))
> @@ -270,19 +269,6 @@ static inline void __add_taint_for_CI(unsigned int taint)
> add_taint(taint, LOCKDEP_STILL_OK);
> }
>
> -void cancel_timer(struct timer_list *t);
> -void set_timer_ms(struct timer_list *t, unsigned long timeout);
> -
> -static inline bool timer_active(const struct timer_list *t)
> -{
> - return READ_ONCE(t->expires);
> -}
> -
> -static inline bool timer_expired(const struct timer_list *t)
> -{
> - return timer_active(t) && !timer_pending(t);
> -}
> -
> static inline bool i915_run_as_guest(void)
> {
> #if IS_ENABLED(CONFIG_X86)
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/5] drm/i915: split out i915_list_util.h
2025-09-08 14:11 ` [PATCH 4/5] drm/i915: split out i915_list_util.h Jani Nikula
@ 2025-09-09 13:39 ` Rodrigo Vivi
0 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Vivi @ 2025-09-09 13:39 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Mon, Sep 08, 2025 at 05:11:48PM +0300, Jani Nikula wrote:
> Move list related utilities from i915_utils.h to separate new file
> i915_list_util.h. Clean up related includes.
>
here as well I believe it would be better to have an i915_ prefix.
but up to you
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Note: Arguably none of this should exist in i915 in the first place. At
> least isolate it better.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> .../drm/i915/gt/intel_execlists_submission.c | 1 +
> .../gpu/drm/i915/gt/intel_gt_buffer_pool.c | 1 +
> drivers/gpu/drm/i915/gt/intel_timeline.h | 2 +-
> drivers/gpu/drm/i915/i915_list_util.h | 23 +++++++++++++++++++
> drivers/gpu/drm/i915/i915_utils.h | 14 -----------
> 5 files changed, 26 insertions(+), 15 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/i915_list_util.h
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> index 52c8fddedfce..0c1b2df02d26 100644
> --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> @@ -112,6 +112,7 @@
>
> #include "gen8_engine_cs.h"
> #include "i915_drv.h"
> +#include "i915_list_util.h"
> #include "i915_reg.h"
> #include "i915_timer_util.h"
> #include "i915_trace.h"
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c b/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
> index 86b5a9ba323d..c7befc5c20d0 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.c
> @@ -7,6 +7,7 @@
> #include "gem/i915_gem_object.h"
>
> #include "i915_drv.h"
> +#include "i915_list_util.h"
> #include "intel_engine_pm.h"
> #include "intel_gt_buffer_pool.h"
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.h b/drivers/gpu/drm/i915/gt/intel_timeline.h
> index 5f8c8f79714e..85b43f9b9d95 100644
> --- a/drivers/gpu/drm/i915/gt/intel_timeline.h
> +++ b/drivers/gpu/drm/i915/gt/intel_timeline.h
> @@ -9,8 +9,8 @@
> #include <linux/lockdep.h>
>
> #include "i915_active.h"
> +#include "i915_list_util.h"
> #include "i915_syncmap.h"
> -#include "i915_utils.h"
> #include "intel_timeline_types.h"
>
> struct drm_printer;
> diff --git a/drivers/gpu/drm/i915/i915_list_util.h b/drivers/gpu/drm/i915/i915_list_util.h
> new file mode 100644
> index 000000000000..4e515dc8a3e0
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_list_util.h
> @@ -0,0 +1,23 @@
> +/* SPDX-License-Identifier: MIT */
> +/* Copyright © 2025 Intel Corporation */
> +
> +#ifndef __I915_LIST_UTIL_H__
> +#define __I915_LIST_UTIL_H__
> +
> +#include <linux/list.h>
> +#include <asm/rwonce.h>
> +
> +static inline void __list_del_many(struct list_head *head,
> + struct list_head *first)
> +{
> + first->prev = head;
> + WRITE_ONCE(head->next, first);
> +}
> +
> +static inline int list_is_last_rcu(const struct list_head *list,
> + const struct list_head *head)
> +{
> + return READ_ONCE(list->next) == head;
> +}
> +
> +#endif /* __I915_LIST_UTIL_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
> index 6278a74d08c2..4a6437d6e00e 100644
> --- a/drivers/gpu/drm/i915/i915_utils.h
> +++ b/drivers/gpu/drm/i915/i915_utils.h
> @@ -25,7 +25,6 @@
> #ifndef __I915_UTILS_H
> #define __I915_UTILS_H
>
> -#include <linux/list.h>
> #include <linux/overflow.h>
> #include <linux/sched.h>
> #include <linux/string_helpers.h>
> @@ -101,19 +100,6 @@ static inline bool is_power_of_2_u64(u64 n)
> return (n != 0 && ((n & (n - 1)) == 0));
> }
>
> -static inline void __list_del_many(struct list_head *head,
> - struct list_head *first)
> -{
> - first->prev = head;
> - WRITE_ONCE(head->next, first);
> -}
> -
> -static inline int list_is_last_rcu(const struct list_head *list,
> - const struct list_head *head)
> -{
> - return READ_ONCE(list->next) == head;
> -}
> -
> static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m)
> {
> unsigned long j = msecs_to_jiffies(m);
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] drm/i915: split out i915_wait_util.h
2025-09-08 14:11 ` [PATCH 5/5] drm/i915: split out i915_wait_util.h Jani Nikula
@ 2025-09-09 13:40 ` Rodrigo Vivi
2025-09-10 12:06 ` Jani Nikula
0 siblings, 1 reply; 14+ messages in thread
From: Rodrigo Vivi @ 2025-09-09 13:40 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Mon, Sep 08, 2025 at 05:11:49PM +0300, Jani Nikula wrote:
> Move waiting related utilities from i915_utils.h to separate new file
> i915_wait_util.h. Clean up related includes.
>
> Note: Many of the various wait macro usages could likely be refactored
> to use poll_timeout_us().
I hope so! :)
nice clean up overall, although my dream is that we
could get rid entirely of these utils that pretend
they are core kernel.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> .../drm/i915/gt/intel_execlists_submission.c | 1 +
> drivers/gpu/drm/i915/gt/intel_gt_mcr.c | 1 +
> drivers/gpu/drm/i915/gt/intel_reset.c | 7 +-
> .../gpu/drm/i915/gt/intel_ring_submission.c | 7 +-
> drivers/gpu/drm/i915/gt/intel_rps.c | 2 +
> drivers/gpu/drm/i915/gt/selftest_tlb.c | 6 +-
> drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c | 6 +-
> .../i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c | 2 +
> drivers/gpu/drm/i915/gt/uc/intel_guc.c | 8 +-
> drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 3 +-
> drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 4 +-
> drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 13 +-
> .../gpu/drm/i915/gt/uc/intel_guc_submission.c | 10 +-
> drivers/gpu/drm/i915/gvt/mmio_context.c | 6 +-
> drivers/gpu/drm/i915/i915_debugfs.c | 3 +-
> drivers/gpu/drm/i915/i915_utils.h | 106 ----------------
> drivers/gpu/drm/i915/i915_wait_util.h | 119 ++++++++++++++++++
> drivers/gpu/drm/i915/intel_pcode.c | 1 +
> drivers/gpu/drm/i915/intel_uncore.c | 7 +-
> drivers/gpu/drm/i915/pxp/intel_pxp.c | 4 +-
> drivers/gpu/drm/i915/selftests/i915_request.c | 5 +-
> .../gpu/drm/i915/selftests/i915_selftest.c | 2 +-
> drivers/gpu/drm/i915/selftests/igt_spinner.c | 5 +-
> drivers/gpu/drm/i915/vlv_suspend.c | 5 +-
> 24 files changed, 183 insertions(+), 150 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/i915_wait_util.h
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> index 0c1b2df02d26..7f389cb0bde4 100644
> --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> @@ -117,6 +117,7 @@
> #include "i915_timer_util.h"
> #include "i915_trace.h"
> #include "i915_vgpu.h"
> +#include "i915_wait_util.h"
> #include "intel_breadcrumbs.h"
> #include "intel_context.h"
> #include "intel_engine_heartbeat.h"
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> index a60822e2b5d4..c3afa321fe30 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> @@ -4,6 +4,7 @@
> */
>
> #include "i915_drv.h"
> +#include "i915_wait_util.h"
> #include "intel_gt.h"
> #include "intel_gt_mcr.h"
> #include "intel_gt_print.h"
> diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c
> index 4a1675dea1c7..41b5036dc538 100644
> --- a/drivers/gpu/drm/i915/gt/intel_reset.c
> +++ b/drivers/gpu/drm/i915/gt/intel_reset.c
> @@ -9,18 +9,17 @@
>
> #include "display/intel_display_reset.h"
> #include "display/intel_overlay.h"
> -
> #include "gem/i915_gem_context.h"
> -
> #include "gt/intel_gt_regs.h"
> -
> #include "gt/uc/intel_gsc_fw.h"
> +#include "uc/intel_guc.h"
>
> #include "i915_drv.h"
> #include "i915_file_private.h"
> #include "i915_gpu_error.h"
> #include "i915_irq.h"
> #include "i915_reg.h"
> +#include "i915_wait_util.h"
> #include "intel_breadcrumbs.h"
> #include "intel_engine_pm.h"
> #include "intel_engine_regs.h"
> @@ -32,8 +31,6 @@
> #include "intel_pci_config.h"
> #include "intel_reset.h"
>
> -#include "uc/intel_guc.h"
> -
> #define RESET_MAX_RETRIES 3
>
> static void client_mark_guilty(struct i915_gem_context *ctx, bool banned)
> diff --git a/drivers/gpu/drm/i915/gt/intel_ring_submission.c b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
> index 2a6d79abf25b..8314a4b0505e 100644
> --- a/drivers/gpu/drm/i915/gt/intel_ring_submission.c
> +++ b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
> @@ -15,18 +15,19 @@
> #include "i915_irq.h"
> #include "i915_mitigations.h"
> #include "i915_reg.h"
> +#include "i915_wait_util.h"
> #include "intel_breadcrumbs.h"
> #include "intel_context.h"
> +#include "intel_engine_heartbeat.h"
> +#include "intel_engine_pm.h"
> #include "intel_engine_regs.h"
> #include "intel_gt.h"
> #include "intel_gt_irq.h"
> +#include "intel_gt_print.h"
> #include "intel_gt_regs.h"
> #include "intel_reset.h"
> #include "intel_ring.h"
> #include "shmem_utils.h"
> -#include "intel_engine_heartbeat.h"
> -#include "intel_engine_pm.h"
> -#include "intel_gt_print.h"
>
> /* Rough estimate of the typical request size, performing a flush,
> * set-context and then emitting the batch.
> diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
> index 006042e0b229..4da94098bd3e 100644
> --- a/drivers/gpu/drm/i915/gt/intel_rps.c
> +++ b/drivers/gpu/drm/i915/gt/intel_rps.c
> @@ -10,9 +10,11 @@
> #include "display/intel_display.h"
> #include "display/intel_display_rps.h"
> #include "soc/intel_dram.h"
> +
> #include "i915_drv.h"
> #include "i915_irq.h"
> #include "i915_reg.h"
> +#include "i915_wait_util.h"
> #include "intel_breadcrumbs.h"
> #include "intel_gt.h"
> #include "intel_gt_clock_utils.h"
> diff --git a/drivers/gpu/drm/i915/gt/selftest_tlb.c b/drivers/gpu/drm/i915/gt/selftest_tlb.c
> index 69ed946a39e5..a5184f09d1de 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_tlb.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_tlb.c
> @@ -3,17 +3,17 @@
> * Copyright © 2022 Intel Corporation
> */
>
> -#include "i915_selftest.h"
> -
> #include "gem/i915_gem_internal.h"
> #include "gem/i915_gem_lmem.h"
> #include "gem/i915_gem_region.h"
>
> #include "gen8_engine_cs.h"
> #include "i915_gem_ww.h"
> +#include "i915_selftest.h"
> +#include "i915_wait_util.h"
> +#include "intel_context.h"
> #include "intel_engine_regs.h"
> #include "intel_gpu_commands.h"
> -#include "intel_context.h"
> #include "intel_gt.h"
> #include "intel_ring.h"
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
> index d8edd7c054c8..e7444ebc373e 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
> @@ -10,11 +10,13 @@
>
> #include "gt/intel_gt.h"
> #include "gt/intel_gt_print.h"
> +
> +#include "i915_drv.h"
> +#include "i915_reg.h"
> +#include "i915_wait_util.h"
> #include "intel_gsc_proxy.h"
> #include "intel_gsc_uc.h"
> #include "intel_gsc_uc_heci_cmd_submit.h"
> -#include "i915_drv.h"
> -#include "i915_reg.h"
>
> /*
> * GSC proxy:
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
> index 2fde5c360cff..9bd29be7656f 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
> @@ -8,6 +8,8 @@
> #include "gt/intel_gpu_commands.h"
> #include "gt/intel_gt.h"
> #include "gt/intel_ring.h"
> +
> +#include "i915_wait_util.h"
> #include "intel_gsc_uc_heci_cmd_submit.h"
>
> struct gsc_heci_pkt {
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> index f360f020d8f1..52ec4421a211 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> @@ -8,15 +8,17 @@
> #include "gt/intel_gt_irq.h"
> #include "gt/intel_gt_pm_irq.h"
> #include "gt/intel_gt_regs.h"
> +
> +#include "i915_drv.h"
> +#include "i915_irq.h"
> +#include "i915_reg.h"
> +#include "i915_wait_util.h"
> #include "intel_guc.h"
> #include "intel_guc_ads.h"
> #include "intel_guc_capture.h"
> #include "intel_guc_print.h"
> #include "intel_guc_slpc.h"
> #include "intel_guc_submission.h"
> -#include "i915_drv.h"
> -#include "i915_irq.h"
> -#include "i915_reg.h"
>
> /**
> * DOC: GuC
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> index 380a11c92d63..3e7e5badcc2b 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> @@ -5,11 +5,12 @@
>
> #include <linux/circ_buf.h>
> #include <linux/ktime.h>
> -#include <linux/time64.h>
> #include <linux/string_helpers.h>
> +#include <linux/time64.h>
> #include <linux/timekeeping.h>
>
> #include "i915_drv.h"
> +#include "i915_wait_util.h"
> #include "intel_guc_ct.h"
> #include "intel_guc_print.h"
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> index e7ccfa520df3..1bb1491f90fc 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> @@ -13,9 +13,11 @@
> #include "gt/intel_gt_mcr.h"
> #include "gt/intel_gt_regs.h"
> #include "gt/intel_rps.h"
> +
> +#include "i915_drv.h"
> +#include "i915_wait_util.h"
> #include "intel_guc_fw.h"
> #include "intel_guc_print.h"
> -#include "i915_drv.h"
>
> static void guc_prepare_xfer(struct intel_gt *gt)
> {
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
> index d5ee6e5e1443..fa9af08f9708 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
> @@ -3,17 +3,20 @@
> * Copyright © 2021 Intel Corporation
> */
>
> -#include <drm/drm_cache.h>
> #include <linux/string_helpers.h>
>
> +#include <drm/drm_cache.h>
> +
> +#include "gt/intel_gt.h"
> +#include "gt/intel_gt_regs.h"
> +#include "gt/intel_rps.h"
> +
> #include "i915_drv.h"
> #include "i915_reg.h"
> -#include "intel_guc_slpc.h"
> +#include "i915_wait_util.h"
> #include "intel_guc_print.h"
> +#include "intel_guc_slpc.h"
> #include "intel_mchbar_regs.h"
> -#include "gt/intel_gt.h"
> -#include "gt/intel_gt_regs.h"
> -#include "gt/intel_rps.h"
>
> /**
> * DOC: SLPC - Dynamic Frequency management
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> index 127316d2c8aa..68f2b8d363ac 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> @@ -25,16 +25,16 @@
> #include "gt/intel_mocs.h"
> #include "gt/intel_ring.h"
>
> +#include "i915_drv.h"
> +#include "i915_irq.h"
> +#include "i915_reg.h"
> +#include "i915_trace.h"
> +#include "i915_wait_util.h"
> #include "intel_guc_ads.h"
> #include "intel_guc_capture.h"
> #include "intel_guc_print.h"
> #include "intel_guc_submission.h"
>
> -#include "i915_drv.h"
> -#include "i915_reg.h"
> -#include "i915_irq.h"
> -#include "i915_trace.h"
> -
> /**
> * DOC: GuC-based command submission
> *
> diff --git a/drivers/gpu/drm/i915/gvt/mmio_context.c b/drivers/gpu/drm/i915/gvt/mmio_context.c
> index 2f7208843367..0b810baad20a 100644
> --- a/drivers/gpu/drm/i915/gvt/mmio_context.c
> +++ b/drivers/gpu/drm/i915/gvt/mmio_context.c
> @@ -33,14 +33,16 @@
> *
> */
>
> -#include "i915_drv.h"
> -#include "i915_reg.h"
> #include "gt/intel_context.h"
> #include "gt/intel_engine_regs.h"
> #include "gt/intel_gpu_commands.h"
> #include "gt/intel_gt_regs.h"
> #include "gt/intel_ring.h"
> +
> #include "gvt.h"
> +#include "i915_drv.h"
> +#include "i915_reg.h"
> +#include "i915_wait_util.h"
> #include "trace.h"
>
> #define GEN9_MOCS_SIZE 64
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 23fa098c4479..c2e38d4bcd01 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -26,11 +26,11 @@
> *
> */
>
> +#include <linux/debugfs.h>
> #include <linux/sched/mm.h>
> #include <linux/sort.h>
> #include <linux/string_helpers.h>
>
> -#include <linux/debugfs.h>
> #include <drm/drm_debugfs.h>
>
> #include "gem/i915_gem_context.h"
> @@ -54,6 +54,7 @@
> #include "i915_irq.h"
> #include "i915_reg.h"
> #include "i915_scheduler.h"
> +#include "i915_wait_util.h"
> #include "intel_mchbar_regs.h"
>
> static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
> diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
> index 4a6437d6e00e..a0c892e4c40d 100644
> --- a/drivers/gpu/drm/i915/i915_utils.h
> +++ b/drivers/gpu/drm/i915/i915_utils.h
> @@ -134,112 +134,6 @@ wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms)
> }
> }
>
> -/*
> - * __wait_for - magic wait macro
> - *
> - * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
> - * important that we check the condition again after having timed out, since the
> - * timeout could be due to preemption or similar and we've never had a chance to
> - * check the condition before the timeout.
> - */
> -#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
> - const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
> - long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
> - int ret__; \
> - might_sleep(); \
> - for (;;) { \
> - const bool expired__ = ktime_after(ktime_get_raw(), end__); \
> - OP; \
> - /* Guarantee COND check prior to timeout */ \
> - barrier(); \
> - if (COND) { \
> - ret__ = 0; \
> - break; \
> - } \
> - if (expired__) { \
> - ret__ = -ETIMEDOUT; \
> - break; \
> - } \
> - usleep_range(wait__, wait__ * 2); \
> - if (wait__ < (Wmax)) \
> - wait__ <<= 1; \
> - } \
> - ret__; \
> -})
> -
> -#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
> - (Wmax))
> -#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
> -
> -/*
> - * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
> - * On PREEMPT_RT the context isn't becoming atomic because it is used in an
> - * interrupt handler or because a spinlock_t is acquired. This leads to
> - * warnings which don't occur otherwise and therefore the check is disabled.
> - */
> -#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
> -# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
> -#else
> -# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
> -#endif
> -
> -#define _wait_for_atomic(COND, US, ATOMIC) \
> -({ \
> - int cpu, ret, timeout = (US) * 1000; \
> - u64 base; \
> - _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
> - if (!(ATOMIC)) { \
> - preempt_disable(); \
> - cpu = smp_processor_id(); \
> - } \
> - base = local_clock(); \
> - for (;;) { \
> - u64 now = local_clock(); \
> - if (!(ATOMIC)) \
> - preempt_enable(); \
> - /* Guarantee COND check prior to timeout */ \
> - barrier(); \
> - if (COND) { \
> - ret = 0; \
> - break; \
> - } \
> - if (now - base >= timeout) { \
> - ret = -ETIMEDOUT; \
> - break; \
> - } \
> - cpu_relax(); \
> - if (!(ATOMIC)) { \
> - preempt_disable(); \
> - if (unlikely(cpu != smp_processor_id())) { \
> - timeout -= now - base; \
> - cpu = smp_processor_id(); \
> - base = local_clock(); \
> - } \
> - } \
> - } \
> - ret; \
> -})
> -
> -#define wait_for_us(COND, US) \
> -({ \
> - int ret__; \
> - BUILD_BUG_ON(!__builtin_constant_p(US)); \
> - if ((US) > 10) \
> - ret__ = _wait_for((COND), (US), 10, 10); \
> - else \
> - ret__ = _wait_for_atomic((COND), (US), 0); \
> - ret__; \
> -})
> -
> -#define wait_for_atomic_us(COND, US) \
> -({ \
> - BUILD_BUG_ON(!__builtin_constant_p(US)); \
> - BUILD_BUG_ON((US) > 50000); \
> - _wait_for_atomic((COND), (US), 1); \
> -})
> -
> -#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
> -
> #define KHz(x) (1000 * (x))
> #define MHz(x) KHz(1000 * (x))
>
> diff --git a/drivers/gpu/drm/i915/i915_wait_util.h b/drivers/gpu/drm/i915/i915_wait_util.h
> new file mode 100644
> index 000000000000..7376898e3bf8
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_wait_util.h
> @@ -0,0 +1,119 @@
> +/* SPDX-License-Identifier: MIT */
> +/* Copyright © 2025 Intel Corporation */
> +
> +#ifndef __I915_WAIT_UTIL_H__
> +#define __I915_WAIT_UTIL_H__
> +
> +#include <linux/compiler.h>
> +#include <linux/delay.h>
> +#include <linux/ktime.h>
> +#include <linux/sched/clock.h>
> +#include <linux/smp.h>
> +
> +/*
> + * __wait_for - magic wait macro
> + *
> + * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
> + * important that we check the condition again after having timed out, since the
> + * timeout could be due to preemption or similar and we've never had a chance to
> + * check the condition before the timeout.
> + */
> +#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
> + const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
> + long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
> + int ret__; \
> + might_sleep(); \
> + for (;;) { \
> + const bool expired__ = ktime_after(ktime_get_raw(), end__); \
> + OP; \
> + /* Guarantee COND check prior to timeout */ \
> + barrier(); \
> + if (COND) { \
> + ret__ = 0; \
> + break; \
> + } \
> + if (expired__) { \
> + ret__ = -ETIMEDOUT; \
> + break; \
> + } \
> + usleep_range(wait__, wait__ * 2); \
> + if (wait__ < (Wmax)) \
> + wait__ <<= 1; \
> + } \
> + ret__; \
> +})
> +
> +#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
> + (Wmax))
> +#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
> +
> +/*
> + * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
> + * On PREEMPT_RT the context isn't becoming atomic because it is used in an
> + * interrupt handler or because a spinlock_t is acquired. This leads to
> + * warnings which don't occur otherwise and therefore the check is disabled.
> + */
> +#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
> +# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
> +#else
> +# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
> +#endif
> +
> +#define _wait_for_atomic(COND, US, ATOMIC) \
> +({ \
> + int cpu, ret, timeout = (US) * 1000; \
> + u64 base; \
> + _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
> + if (!(ATOMIC)) { \
> + preempt_disable(); \
> + cpu = smp_processor_id(); \
> + } \
> + base = local_clock(); \
> + for (;;) { \
> + u64 now = local_clock(); \
> + if (!(ATOMIC)) \
> + preempt_enable(); \
> + /* Guarantee COND check prior to timeout */ \
> + barrier(); \
> + if (COND) { \
> + ret = 0; \
> + break; \
> + } \
> + if (now - base >= timeout) { \
> + ret = -ETIMEDOUT; \
> + break; \
> + } \
> + cpu_relax(); \
> + if (!(ATOMIC)) { \
> + preempt_disable(); \
> + if (unlikely(cpu != smp_processor_id())) { \
> + timeout -= now - base; \
> + cpu = smp_processor_id(); \
> + base = local_clock(); \
> + } \
> + } \
> + } \
> + ret; \
> +})
> +
> +#define wait_for_us(COND, US) \
> +({ \
> + int ret__; \
> + BUILD_BUG_ON(!__builtin_constant_p(US)); \
> + if ((US) > 10) \
> + ret__ = _wait_for((COND), (US), 10, 10); \
> + else \
> + ret__ = _wait_for_atomic((COND), (US), 0); \
> + ret__; \
> +})
> +
> +#define wait_for_atomic_us(COND, US) \
> +({ \
> + BUILD_BUG_ON(!__builtin_constant_p(US)); \
> + BUILD_BUG_ON((US) > 50000); \
> + _wait_for_atomic((COND), (US), 1); \
> +})
> +
> +#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
> +
> +#endif /* __I915_WAIT_UTIL_H__ */
> diff --git a/drivers/gpu/drm/i915/intel_pcode.c b/drivers/gpu/drm/i915/intel_pcode.c
> index 81da75108c60..55ffedad2490 100644
> --- a/drivers/gpu/drm/i915/intel_pcode.c
> +++ b/drivers/gpu/drm/i915/intel_pcode.c
> @@ -5,6 +5,7 @@
>
> #include "i915_drv.h"
> #include "i915_reg.h"
> +#include "i915_wait_util.h"
> #include "intel_pcode.h"
>
> static int gen6_check_mailbox_status(u32 mbox)
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> index 4ccba7c8ffb3..8cb59f8d1f4c 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -21,19 +21,20 @@
> * IN THE SOFTWARE.
> */
>
> -#include <drm/drm_managed.h>
> #include <linux/pm_runtime.h>
>
> -#include "display/intel_display_core.h"
> +#include <drm/drm_managed.h>
>
> -#include "gt/intel_gt.h"
> +#include "display/intel_display_core.h"
> #include "gt/intel_engine_regs.h"
> +#include "gt/intel_gt.h"
> #include "gt/intel_gt_regs.h"
>
> #include "i915_drv.h"
> #include "i915_iosf_mbi.h"
> #include "i915_reg.h"
> #include "i915_vgpu.h"
> +#include "i915_wait_util.h"
> #include "intel_uncore_trace.h"
>
> #define FORCEWAKE_ACK_TIMEOUT_MS 50
> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp.c b/drivers/gpu/drm/i915/pxp/intel_pxp.c
> index f8da693ad3ce..27d545c4e6a5 100644
> --- a/drivers/gpu/drm/i915/pxp/intel_pxp.c
> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp.c
> @@ -2,15 +2,15 @@
> /*
> * Copyright(c) 2020 Intel Corporation.
> */
> +
> #include <linux/workqueue.h>
>
> #include "gem/i915_gem_context.h"
> -
> #include "gt/intel_context.h"
> #include "gt/intel_gt.h"
>
> #include "i915_drv.h"
> -
> +#include "i915_wait_util.h"
> #include "intel_pxp.h"
> #include "intel_pxp_gsccs.h"
> #include "intel_pxp_irq.h"
> diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> index 2fb7a9e7efec..48cd617247d1 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> @@ -22,14 +22,13 @@
> *
> */
>
> -#include <linux/prime_numbers.h>
> #include <linux/pm_qos.h>
> +#include <linux/prime_numbers.h>
> #include <linux/sort.h>
>
> #include "gem/i915_gem_internal.h"
> #include "gem/i915_gem_pm.h"
> #include "gem/selftests/mock_context.h"
> -
> #include "gt/intel_engine_heartbeat.h"
> #include "gt/intel_engine_pm.h"
> #include "gt/intel_engine_user.h"
> @@ -40,11 +39,11 @@
>
> #include "i915_random.h"
> #include "i915_selftest.h"
> +#include "i915_wait_util.h"
> #include "igt_flush_test.h"
> #include "igt_live_test.h"
> #include "igt_spinner.h"
> #include "lib_sw_fence.h"
> -
> #include "mock_drm.h"
> #include "mock_gem_device.h"
>
> diff --git a/drivers/gpu/drm/i915/selftests/i915_selftest.c b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> index 889281819c5b..9c276c9d0a75 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_selftest.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> @@ -31,7 +31,7 @@
> #include "i915_driver.h"
> #include "i915_drv.h"
> #include "i915_selftest.h"
> -
> +#include "i915_wait_util.h"
> #include "igt_flush_test.h"
>
> struct i915_selftest i915_selftest __read_mostly = {
> diff --git a/drivers/gpu/drm/i915/selftests/igt_spinner.c b/drivers/gpu/drm/i915/selftests/igt_spinner.c
> index 8c3e1f20e5a1..820364171ebe 100644
> --- a/drivers/gpu/drm/i915/selftests/igt_spinner.c
> +++ b/drivers/gpu/drm/i915/selftests/igt_spinner.c
> @@ -3,12 +3,13 @@
> *
> * Copyright © 2018 Intel Corporation
> */
> -#include "gt/intel_gpu_commands.h"
> -#include "gt/intel_gt.h"
>
> #include "gem/i915_gem_internal.h"
> #include "gem/selftests/igt_gem_utils.h"
> +#include "gt/intel_gpu_commands.h"
> +#include "gt/intel_gt.h"
>
> +#include "i915_wait_util.h"
> #include "igt_spinner.h"
>
> int igt_spinner_init(struct igt_spinner *spin, struct intel_gt *gt)
> diff --git a/drivers/gpu/drm/i915/vlv_suspend.c b/drivers/gpu/drm/i915/vlv_suspend.c
> index fc9f311ea1db..221e4c0b2c58 100644
> --- a/drivers/gpu/drm/i915/vlv_suspend.c
> +++ b/drivers/gpu/drm/i915/vlv_suspend.c
> @@ -8,16 +8,17 @@
>
> #include <drm/drm_print.h>
>
> +#include "gt/intel_gt_regs.h"
> +
> #include "i915_drv.h"
> #include "i915_reg.h"
> #include "i915_trace.h"
> #include "i915_utils.h"
> +#include "i915_wait_util.h"
> #include "intel_clock_gating.h"
> #include "intel_uncore_trace.h"
> #include "vlv_suspend.h"
>
> -#include "gt/intel_gt_regs.h"
> -
> struct vlv_s0ix_state {
> /* GAM */
> u32 wr_watermark;
> --
> 2.47.3
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] drm/i915: split out i915_wait_util.h
2025-09-09 13:40 ` Rodrigo Vivi
@ 2025-09-10 12:06 ` Jani Nikula
2025-09-10 16:45 ` Rodrigo Vivi
0 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2025-09-10 12:06 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: intel-gfx
On Tue, 09 Sep 2025, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> On Mon, Sep 08, 2025 at 05:11:49PM +0300, Jani Nikula wrote:
>> Move waiting related utilities from i915_utils.h to separate new file
>> i915_wait_util.h. Clean up related includes.
>>
>> Note: Many of the various wait macro usages could likely be refactored
>> to use poll_timeout_us().
>
> I hope so! :)
>
> nice clean up overall, although my dream is that we
> could get rid entirely of these utils that pretend
> they are core kernel.
>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Thanks, but no dice. :(
I didn't realize GEM_BUG_ON() uses GEM_TRACE_DUMP() uses
__add_taint_for_CI(), i.e. roughly everything requires i915_utils.h.
Maybe I'll post just some of these and drop patch 1.
BR,
Jani.
>
>
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>> .../drm/i915/gt/intel_execlists_submission.c | 1 +
>> drivers/gpu/drm/i915/gt/intel_gt_mcr.c | 1 +
>> drivers/gpu/drm/i915/gt/intel_reset.c | 7 +-
>> .../gpu/drm/i915/gt/intel_ring_submission.c | 7 +-
>> drivers/gpu/drm/i915/gt/intel_rps.c | 2 +
>> drivers/gpu/drm/i915/gt/selftest_tlb.c | 6 +-
>> drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c | 6 +-
>> .../i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c | 2 +
>> drivers/gpu/drm/i915/gt/uc/intel_guc.c | 8 +-
>> drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 3 +-
>> drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 4 +-
>> drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 13 +-
>> .../gpu/drm/i915/gt/uc/intel_guc_submission.c | 10 +-
>> drivers/gpu/drm/i915/gvt/mmio_context.c | 6 +-
>> drivers/gpu/drm/i915/i915_debugfs.c | 3 +-
>> drivers/gpu/drm/i915/i915_utils.h | 106 ----------------
>> drivers/gpu/drm/i915/i915_wait_util.h | 119 ++++++++++++++++++
>> drivers/gpu/drm/i915/intel_pcode.c | 1 +
>> drivers/gpu/drm/i915/intel_uncore.c | 7 +-
>> drivers/gpu/drm/i915/pxp/intel_pxp.c | 4 +-
>> drivers/gpu/drm/i915/selftests/i915_request.c | 5 +-
>> .../gpu/drm/i915/selftests/i915_selftest.c | 2 +-
>> drivers/gpu/drm/i915/selftests/igt_spinner.c | 5 +-
>> drivers/gpu/drm/i915/vlv_suspend.c | 5 +-
>> 24 files changed, 183 insertions(+), 150 deletions(-)
>> create mode 100644 drivers/gpu/drm/i915/i915_wait_util.h
>>
>> diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>> index 0c1b2df02d26..7f389cb0bde4 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
>> @@ -117,6 +117,7 @@
>> #include "i915_timer_util.h"
>> #include "i915_trace.h"
>> #include "i915_vgpu.h"
>> +#include "i915_wait_util.h"
>> #include "intel_breadcrumbs.h"
>> #include "intel_context.h"
>> #include "intel_engine_heartbeat.h"
>> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> index a60822e2b5d4..c3afa321fe30 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> @@ -4,6 +4,7 @@
>> */
>>
>> #include "i915_drv.h"
>> +#include "i915_wait_util.h"
>> #include "intel_gt.h"
>> #include "intel_gt_mcr.h"
>> #include "intel_gt_print.h"
>> diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c
>> index 4a1675dea1c7..41b5036dc538 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_reset.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_reset.c
>> @@ -9,18 +9,17 @@
>>
>> #include "display/intel_display_reset.h"
>> #include "display/intel_overlay.h"
>> -
>> #include "gem/i915_gem_context.h"
>> -
>> #include "gt/intel_gt_regs.h"
>> -
>> #include "gt/uc/intel_gsc_fw.h"
>> +#include "uc/intel_guc.h"
>>
>> #include "i915_drv.h"
>> #include "i915_file_private.h"
>> #include "i915_gpu_error.h"
>> #include "i915_irq.h"
>> #include "i915_reg.h"
>> +#include "i915_wait_util.h"
>> #include "intel_breadcrumbs.h"
>> #include "intel_engine_pm.h"
>> #include "intel_engine_regs.h"
>> @@ -32,8 +31,6 @@
>> #include "intel_pci_config.h"
>> #include "intel_reset.h"
>>
>> -#include "uc/intel_guc.h"
>> -
>> #define RESET_MAX_RETRIES 3
>>
>> static void client_mark_guilty(struct i915_gem_context *ctx, bool banned)
>> diff --git a/drivers/gpu/drm/i915/gt/intel_ring_submission.c b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
>> index 2a6d79abf25b..8314a4b0505e 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_ring_submission.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
>> @@ -15,18 +15,19 @@
>> #include "i915_irq.h"
>> #include "i915_mitigations.h"
>> #include "i915_reg.h"
>> +#include "i915_wait_util.h"
>> #include "intel_breadcrumbs.h"
>> #include "intel_context.h"
>> +#include "intel_engine_heartbeat.h"
>> +#include "intel_engine_pm.h"
>> #include "intel_engine_regs.h"
>> #include "intel_gt.h"
>> #include "intel_gt_irq.h"
>> +#include "intel_gt_print.h"
>> #include "intel_gt_regs.h"
>> #include "intel_reset.h"
>> #include "intel_ring.h"
>> #include "shmem_utils.h"
>> -#include "intel_engine_heartbeat.h"
>> -#include "intel_engine_pm.h"
>> -#include "intel_gt_print.h"
>>
>> /* Rough estimate of the typical request size, performing a flush,
>> * set-context and then emitting the batch.
>> diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
>> index 006042e0b229..4da94098bd3e 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_rps.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_rps.c
>> @@ -10,9 +10,11 @@
>> #include "display/intel_display.h"
>> #include "display/intel_display_rps.h"
>> #include "soc/intel_dram.h"
>> +
>> #include "i915_drv.h"
>> #include "i915_irq.h"
>> #include "i915_reg.h"
>> +#include "i915_wait_util.h"
>> #include "intel_breadcrumbs.h"
>> #include "intel_gt.h"
>> #include "intel_gt_clock_utils.h"
>> diff --git a/drivers/gpu/drm/i915/gt/selftest_tlb.c b/drivers/gpu/drm/i915/gt/selftest_tlb.c
>> index 69ed946a39e5..a5184f09d1de 100644
>> --- a/drivers/gpu/drm/i915/gt/selftest_tlb.c
>> +++ b/drivers/gpu/drm/i915/gt/selftest_tlb.c
>> @@ -3,17 +3,17 @@
>> * Copyright © 2022 Intel Corporation
>> */
>>
>> -#include "i915_selftest.h"
>> -
>> #include "gem/i915_gem_internal.h"
>> #include "gem/i915_gem_lmem.h"
>> #include "gem/i915_gem_region.h"
>>
>> #include "gen8_engine_cs.h"
>> #include "i915_gem_ww.h"
>> +#include "i915_selftest.h"
>> +#include "i915_wait_util.h"
>> +#include "intel_context.h"
>> #include "intel_engine_regs.h"
>> #include "intel_gpu_commands.h"
>> -#include "intel_context.h"
>> #include "intel_gt.h"
>> #include "intel_ring.h"
>>
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
>> index d8edd7c054c8..e7444ebc373e 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
>> @@ -10,11 +10,13 @@
>>
>> #include "gt/intel_gt.h"
>> #include "gt/intel_gt_print.h"
>> +
>> +#include "i915_drv.h"
>> +#include "i915_reg.h"
>> +#include "i915_wait_util.h"
>> #include "intel_gsc_proxy.h"
>> #include "intel_gsc_uc.h"
>> #include "intel_gsc_uc_heci_cmd_submit.h"
>> -#include "i915_drv.h"
>> -#include "i915_reg.h"
>>
>> /*
>> * GSC proxy:
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
>> index 2fde5c360cff..9bd29be7656f 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
>> @@ -8,6 +8,8 @@
>> #include "gt/intel_gpu_commands.h"
>> #include "gt/intel_gt.h"
>> #include "gt/intel_ring.h"
>> +
>> +#include "i915_wait_util.h"
>> #include "intel_gsc_uc_heci_cmd_submit.h"
>>
>> struct gsc_heci_pkt {
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> index f360f020d8f1..52ec4421a211 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> @@ -8,15 +8,17 @@
>> #include "gt/intel_gt_irq.h"
>> #include "gt/intel_gt_pm_irq.h"
>> #include "gt/intel_gt_regs.h"
>> +
>> +#include "i915_drv.h"
>> +#include "i915_irq.h"
>> +#include "i915_reg.h"
>> +#include "i915_wait_util.h"
>> #include "intel_guc.h"
>> #include "intel_guc_ads.h"
>> #include "intel_guc_capture.h"
>> #include "intel_guc_print.h"
>> #include "intel_guc_slpc.h"
>> #include "intel_guc_submission.h"
>> -#include "i915_drv.h"
>> -#include "i915_irq.h"
>> -#include "i915_reg.h"
>>
>> /**
>> * DOC: GuC
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
>> index 380a11c92d63..3e7e5badcc2b 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
>> @@ -5,11 +5,12 @@
>>
>> #include <linux/circ_buf.h>
>> #include <linux/ktime.h>
>> -#include <linux/time64.h>
>> #include <linux/string_helpers.h>
>> +#include <linux/time64.h>
>> #include <linux/timekeeping.h>
>>
>> #include "i915_drv.h"
>> +#include "i915_wait_util.h"
>> #include "intel_guc_ct.h"
>> #include "intel_guc_print.h"
>>
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
>> index e7ccfa520df3..1bb1491f90fc 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
>> @@ -13,9 +13,11 @@
>> #include "gt/intel_gt_mcr.h"
>> #include "gt/intel_gt_regs.h"
>> #include "gt/intel_rps.h"
>> +
>> +#include "i915_drv.h"
>> +#include "i915_wait_util.h"
>> #include "intel_guc_fw.h"
>> #include "intel_guc_print.h"
>> -#include "i915_drv.h"
>>
>> static void guc_prepare_xfer(struct intel_gt *gt)
>> {
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
>> index d5ee6e5e1443..fa9af08f9708 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
>> @@ -3,17 +3,20 @@
>> * Copyright © 2021 Intel Corporation
>> */
>>
>> -#include <drm/drm_cache.h>
>> #include <linux/string_helpers.h>
>>
>> +#include <drm/drm_cache.h>
>> +
>> +#include "gt/intel_gt.h"
>> +#include "gt/intel_gt_regs.h"
>> +#include "gt/intel_rps.h"
>> +
>> #include "i915_drv.h"
>> #include "i915_reg.h"
>> -#include "intel_guc_slpc.h"
>> +#include "i915_wait_util.h"
>> #include "intel_guc_print.h"
>> +#include "intel_guc_slpc.h"
>> #include "intel_mchbar_regs.h"
>> -#include "gt/intel_gt.h"
>> -#include "gt/intel_gt_regs.h"
>> -#include "gt/intel_rps.h"
>>
>> /**
>> * DOC: SLPC - Dynamic Frequency management
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>> index 127316d2c8aa..68f2b8d363ac 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>> @@ -25,16 +25,16 @@
>> #include "gt/intel_mocs.h"
>> #include "gt/intel_ring.h"
>>
>> +#include "i915_drv.h"
>> +#include "i915_irq.h"
>> +#include "i915_reg.h"
>> +#include "i915_trace.h"
>> +#include "i915_wait_util.h"
>> #include "intel_guc_ads.h"
>> #include "intel_guc_capture.h"
>> #include "intel_guc_print.h"
>> #include "intel_guc_submission.h"
>>
>> -#include "i915_drv.h"
>> -#include "i915_reg.h"
>> -#include "i915_irq.h"
>> -#include "i915_trace.h"
>> -
>> /**
>> * DOC: GuC-based command submission
>> *
>> diff --git a/drivers/gpu/drm/i915/gvt/mmio_context.c b/drivers/gpu/drm/i915/gvt/mmio_context.c
>> index 2f7208843367..0b810baad20a 100644
>> --- a/drivers/gpu/drm/i915/gvt/mmio_context.c
>> +++ b/drivers/gpu/drm/i915/gvt/mmio_context.c
>> @@ -33,14 +33,16 @@
>> *
>> */
>>
>> -#include "i915_drv.h"
>> -#include "i915_reg.h"
>> #include "gt/intel_context.h"
>> #include "gt/intel_engine_regs.h"
>> #include "gt/intel_gpu_commands.h"
>> #include "gt/intel_gt_regs.h"
>> #include "gt/intel_ring.h"
>> +
>> #include "gvt.h"
>> +#include "i915_drv.h"
>> +#include "i915_reg.h"
>> +#include "i915_wait_util.h"
>> #include "trace.h"
>>
>> #define GEN9_MOCS_SIZE 64
>> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
>> index 23fa098c4479..c2e38d4bcd01 100644
>> --- a/drivers/gpu/drm/i915/i915_debugfs.c
>> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
>> @@ -26,11 +26,11 @@
>> *
>> */
>>
>> +#include <linux/debugfs.h>
>> #include <linux/sched/mm.h>
>> #include <linux/sort.h>
>> #include <linux/string_helpers.h>
>>
>> -#include <linux/debugfs.h>
>> #include <drm/drm_debugfs.h>
>>
>> #include "gem/i915_gem_context.h"
>> @@ -54,6 +54,7 @@
>> #include "i915_irq.h"
>> #include "i915_reg.h"
>> #include "i915_scheduler.h"
>> +#include "i915_wait_util.h"
>> #include "intel_mchbar_regs.h"
>>
>> static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
>> diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
>> index 4a6437d6e00e..a0c892e4c40d 100644
>> --- a/drivers/gpu/drm/i915/i915_utils.h
>> +++ b/drivers/gpu/drm/i915/i915_utils.h
>> @@ -134,112 +134,6 @@ wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms)
>> }
>> }
>>
>> -/*
>> - * __wait_for - magic wait macro
>> - *
>> - * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
>> - * important that we check the condition again after having timed out, since the
>> - * timeout could be due to preemption or similar and we've never had a chance to
>> - * check the condition before the timeout.
>> - */
>> -#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
>> - const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
>> - long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
>> - int ret__; \
>> - might_sleep(); \
>> - for (;;) { \
>> - const bool expired__ = ktime_after(ktime_get_raw(), end__); \
>> - OP; \
>> - /* Guarantee COND check prior to timeout */ \
>> - barrier(); \
>> - if (COND) { \
>> - ret__ = 0; \
>> - break; \
>> - } \
>> - if (expired__) { \
>> - ret__ = -ETIMEDOUT; \
>> - break; \
>> - } \
>> - usleep_range(wait__, wait__ * 2); \
>> - if (wait__ < (Wmax)) \
>> - wait__ <<= 1; \
>> - } \
>> - ret__; \
>> -})
>> -
>> -#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
>> - (Wmax))
>> -#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
>> -
>> -/*
>> - * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
>> - * On PREEMPT_RT the context isn't becoming atomic because it is used in an
>> - * interrupt handler or because a spinlock_t is acquired. This leads to
>> - * warnings which don't occur otherwise and therefore the check is disabled.
>> - */
>> -#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
>> -# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
>> -#else
>> -# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
>> -#endif
>> -
>> -#define _wait_for_atomic(COND, US, ATOMIC) \
>> -({ \
>> - int cpu, ret, timeout = (US) * 1000; \
>> - u64 base; \
>> - _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
>> - if (!(ATOMIC)) { \
>> - preempt_disable(); \
>> - cpu = smp_processor_id(); \
>> - } \
>> - base = local_clock(); \
>> - for (;;) { \
>> - u64 now = local_clock(); \
>> - if (!(ATOMIC)) \
>> - preempt_enable(); \
>> - /* Guarantee COND check prior to timeout */ \
>> - barrier(); \
>> - if (COND) { \
>> - ret = 0; \
>> - break; \
>> - } \
>> - if (now - base >= timeout) { \
>> - ret = -ETIMEDOUT; \
>> - break; \
>> - } \
>> - cpu_relax(); \
>> - if (!(ATOMIC)) { \
>> - preempt_disable(); \
>> - if (unlikely(cpu != smp_processor_id())) { \
>> - timeout -= now - base; \
>> - cpu = smp_processor_id(); \
>> - base = local_clock(); \
>> - } \
>> - } \
>> - } \
>> - ret; \
>> -})
>> -
>> -#define wait_for_us(COND, US) \
>> -({ \
>> - int ret__; \
>> - BUILD_BUG_ON(!__builtin_constant_p(US)); \
>> - if ((US) > 10) \
>> - ret__ = _wait_for((COND), (US), 10, 10); \
>> - else \
>> - ret__ = _wait_for_atomic((COND), (US), 0); \
>> - ret__; \
>> -})
>> -
>> -#define wait_for_atomic_us(COND, US) \
>> -({ \
>> - BUILD_BUG_ON(!__builtin_constant_p(US)); \
>> - BUILD_BUG_ON((US) > 50000); \
>> - _wait_for_atomic((COND), (US), 1); \
>> -})
>> -
>> -#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
>> -
>> #define KHz(x) (1000 * (x))
>> #define MHz(x) KHz(1000 * (x))
>>
>> diff --git a/drivers/gpu/drm/i915/i915_wait_util.h b/drivers/gpu/drm/i915/i915_wait_util.h
>> new file mode 100644
>> index 000000000000..7376898e3bf8
>> --- /dev/null
>> +++ b/drivers/gpu/drm/i915/i915_wait_util.h
>> @@ -0,0 +1,119 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/* Copyright © 2025 Intel Corporation */
>> +
>> +#ifndef __I915_WAIT_UTIL_H__
>> +#define __I915_WAIT_UTIL_H__
>> +
>> +#include <linux/compiler.h>
>> +#include <linux/delay.h>
>> +#include <linux/ktime.h>
>> +#include <linux/sched/clock.h>
>> +#include <linux/smp.h>
>> +
>> +/*
>> + * __wait_for - magic wait macro
>> + *
>> + * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
>> + * important that we check the condition again after having timed out, since the
>> + * timeout could be due to preemption or similar and we've never had a chance to
>> + * check the condition before the timeout.
>> + */
>> +#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
>> + const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
>> + long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
>> + int ret__; \
>> + might_sleep(); \
>> + for (;;) { \
>> + const bool expired__ = ktime_after(ktime_get_raw(), end__); \
>> + OP; \
>> + /* Guarantee COND check prior to timeout */ \
>> + barrier(); \
>> + if (COND) { \
>> + ret__ = 0; \
>> + break; \
>> + } \
>> + if (expired__) { \
>> + ret__ = -ETIMEDOUT; \
>> + break; \
>> + } \
>> + usleep_range(wait__, wait__ * 2); \
>> + if (wait__ < (Wmax)) \
>> + wait__ <<= 1; \
>> + } \
>> + ret__; \
>> +})
>> +
>> +#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
>> + (Wmax))
>> +#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
>> +
>> +/*
>> + * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
>> + * On PREEMPT_RT the context isn't becoming atomic because it is used in an
>> + * interrupt handler or because a spinlock_t is acquired. This leads to
>> + * warnings which don't occur otherwise and therefore the check is disabled.
>> + */
>> +#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
>> +# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
>> +#else
>> +# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
>> +#endif
>> +
>> +#define _wait_for_atomic(COND, US, ATOMIC) \
>> +({ \
>> + int cpu, ret, timeout = (US) * 1000; \
>> + u64 base; \
>> + _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
>> + if (!(ATOMIC)) { \
>> + preempt_disable(); \
>> + cpu = smp_processor_id(); \
>> + } \
>> + base = local_clock(); \
>> + for (;;) { \
>> + u64 now = local_clock(); \
>> + if (!(ATOMIC)) \
>> + preempt_enable(); \
>> + /* Guarantee COND check prior to timeout */ \
>> + barrier(); \
>> + if (COND) { \
>> + ret = 0; \
>> + break; \
>> + } \
>> + if (now - base >= timeout) { \
>> + ret = -ETIMEDOUT; \
>> + break; \
>> + } \
>> + cpu_relax(); \
>> + if (!(ATOMIC)) { \
>> + preempt_disable(); \
>> + if (unlikely(cpu != smp_processor_id())) { \
>> + timeout -= now - base; \
>> + cpu = smp_processor_id(); \
>> + base = local_clock(); \
>> + } \
>> + } \
>> + } \
>> + ret; \
>> +})
>> +
>> +#define wait_for_us(COND, US) \
>> +({ \
>> + int ret__; \
>> + BUILD_BUG_ON(!__builtin_constant_p(US)); \
>> + if ((US) > 10) \
>> + ret__ = _wait_for((COND), (US), 10, 10); \
>> + else \
>> + ret__ = _wait_for_atomic((COND), (US), 0); \
>> + ret__; \
>> +})
>> +
>> +#define wait_for_atomic_us(COND, US) \
>> +({ \
>> + BUILD_BUG_ON(!__builtin_constant_p(US)); \
>> + BUILD_BUG_ON((US) > 50000); \
>> + _wait_for_atomic((COND), (US), 1); \
>> +})
>> +
>> +#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
>> +
>> +#endif /* __I915_WAIT_UTIL_H__ */
>> diff --git a/drivers/gpu/drm/i915/intel_pcode.c b/drivers/gpu/drm/i915/intel_pcode.c
>> index 81da75108c60..55ffedad2490 100644
>> --- a/drivers/gpu/drm/i915/intel_pcode.c
>> +++ b/drivers/gpu/drm/i915/intel_pcode.c
>> @@ -5,6 +5,7 @@
>>
>> #include "i915_drv.h"
>> #include "i915_reg.h"
>> +#include "i915_wait_util.h"
>> #include "intel_pcode.h"
>>
>> static int gen6_check_mailbox_status(u32 mbox)
>> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
>> index 4ccba7c8ffb3..8cb59f8d1f4c 100644
>> --- a/drivers/gpu/drm/i915/intel_uncore.c
>> +++ b/drivers/gpu/drm/i915/intel_uncore.c
>> @@ -21,19 +21,20 @@
>> * IN THE SOFTWARE.
>> */
>>
>> -#include <drm/drm_managed.h>
>> #include <linux/pm_runtime.h>
>>
>> -#include "display/intel_display_core.h"
>> +#include <drm/drm_managed.h>
>>
>> -#include "gt/intel_gt.h"
>> +#include "display/intel_display_core.h"
>> #include "gt/intel_engine_regs.h"
>> +#include "gt/intel_gt.h"
>> #include "gt/intel_gt_regs.h"
>>
>> #include "i915_drv.h"
>> #include "i915_iosf_mbi.h"
>> #include "i915_reg.h"
>> #include "i915_vgpu.h"
>> +#include "i915_wait_util.h"
>> #include "intel_uncore_trace.h"
>>
>> #define FORCEWAKE_ACK_TIMEOUT_MS 50
>> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp.c b/drivers/gpu/drm/i915/pxp/intel_pxp.c
>> index f8da693ad3ce..27d545c4e6a5 100644
>> --- a/drivers/gpu/drm/i915/pxp/intel_pxp.c
>> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp.c
>> @@ -2,15 +2,15 @@
>> /*
>> * Copyright(c) 2020 Intel Corporation.
>> */
>> +
>> #include <linux/workqueue.h>
>>
>> #include "gem/i915_gem_context.h"
>> -
>> #include "gt/intel_context.h"
>> #include "gt/intel_gt.h"
>>
>> #include "i915_drv.h"
>> -
>> +#include "i915_wait_util.h"
>> #include "intel_pxp.h"
>> #include "intel_pxp_gsccs.h"
>> #include "intel_pxp_irq.h"
>> diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
>> index 2fb7a9e7efec..48cd617247d1 100644
>> --- a/drivers/gpu/drm/i915/selftests/i915_request.c
>> +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
>> @@ -22,14 +22,13 @@
>> *
>> */
>>
>> -#include <linux/prime_numbers.h>
>> #include <linux/pm_qos.h>
>> +#include <linux/prime_numbers.h>
>> #include <linux/sort.h>
>>
>> #include "gem/i915_gem_internal.h"
>> #include "gem/i915_gem_pm.h"
>> #include "gem/selftests/mock_context.h"
>> -
>> #include "gt/intel_engine_heartbeat.h"
>> #include "gt/intel_engine_pm.h"
>> #include "gt/intel_engine_user.h"
>> @@ -40,11 +39,11 @@
>>
>> #include "i915_random.h"
>> #include "i915_selftest.h"
>> +#include "i915_wait_util.h"
>> #include "igt_flush_test.h"
>> #include "igt_live_test.h"
>> #include "igt_spinner.h"
>> #include "lib_sw_fence.h"
>> -
>> #include "mock_drm.h"
>> #include "mock_gem_device.h"
>>
>> diff --git a/drivers/gpu/drm/i915/selftests/i915_selftest.c b/drivers/gpu/drm/i915/selftests/i915_selftest.c
>> index 889281819c5b..9c276c9d0a75 100644
>> --- a/drivers/gpu/drm/i915/selftests/i915_selftest.c
>> +++ b/drivers/gpu/drm/i915/selftests/i915_selftest.c
>> @@ -31,7 +31,7 @@
>> #include "i915_driver.h"
>> #include "i915_drv.h"
>> #include "i915_selftest.h"
>> -
>> +#include "i915_wait_util.h"
>> #include "igt_flush_test.h"
>>
>> struct i915_selftest i915_selftest __read_mostly = {
>> diff --git a/drivers/gpu/drm/i915/selftests/igt_spinner.c b/drivers/gpu/drm/i915/selftests/igt_spinner.c
>> index 8c3e1f20e5a1..820364171ebe 100644
>> --- a/drivers/gpu/drm/i915/selftests/igt_spinner.c
>> +++ b/drivers/gpu/drm/i915/selftests/igt_spinner.c
>> @@ -3,12 +3,13 @@
>> *
>> * Copyright © 2018 Intel Corporation
>> */
>> -#include "gt/intel_gpu_commands.h"
>> -#include "gt/intel_gt.h"
>>
>> #include "gem/i915_gem_internal.h"
>> #include "gem/selftests/igt_gem_utils.h"
>> +#include "gt/intel_gpu_commands.h"
>> +#include "gt/intel_gt.h"
>>
>> +#include "i915_wait_util.h"
>> #include "igt_spinner.h"
>>
>> int igt_spinner_init(struct igt_spinner *spin, struct intel_gt *gt)
>> diff --git a/drivers/gpu/drm/i915/vlv_suspend.c b/drivers/gpu/drm/i915/vlv_suspend.c
>> index fc9f311ea1db..221e4c0b2c58 100644
>> --- a/drivers/gpu/drm/i915/vlv_suspend.c
>> +++ b/drivers/gpu/drm/i915/vlv_suspend.c
>> @@ -8,16 +8,17 @@
>>
>> #include <drm/drm_print.h>
>>
>> +#include "gt/intel_gt_regs.h"
>> +
>> #include "i915_drv.h"
>> #include "i915_reg.h"
>> #include "i915_trace.h"
>> #include "i915_utils.h"
>> +#include "i915_wait_util.h"
>> #include "intel_clock_gating.h"
>> #include "intel_uncore_trace.h"
>> #include "vlv_suspend.h"
>>
>> -#include "gt/intel_gt_regs.h"
>> -
>> struct vlv_s0ix_state {
>> /* GAM */
>> u32 wr_watermark;
>> --
>> 2.47.3
>>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] drm/i915: split out i915_wait_util.h
2025-09-10 12:06 ` Jani Nikula
@ 2025-09-10 16:45 ` Rodrigo Vivi
0 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Vivi @ 2025-09-10 16:45 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Wed, Sep 10, 2025 at 03:06:56PM +0300, Jani Nikula wrote:
> On Tue, 09 Sep 2025, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> > On Mon, Sep 08, 2025 at 05:11:49PM +0300, Jani Nikula wrote:
> >> Move waiting related utilities from i915_utils.h to separate new file
> >> i915_wait_util.h. Clean up related includes.
> >>
> >> Note: Many of the various wait macro usages could likely be refactored
> >> to use poll_timeout_us().
> >
> > I hope so! :)
> >
> > nice clean up overall, although my dream is that we
> > could get rid entirely of these utils that pretend
> > they are core kernel.
> >
> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>
> Thanks, but no dice. :(
>
> I didn't realize GEM_BUG_ON() uses GEM_TRACE_DUMP() uses
sorry for missing that too
> __add_taint_for_CI(), i.e.
> roughly everything requires i915_utils.h.
>
(facepalm)...
> Maybe I'll post just some of these and drop patch 1.
already a good start anyway ;)
>
> BR,
> Jani.
>
>
>
>
> >
> >
> >>
> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >> ---
> >> .../drm/i915/gt/intel_execlists_submission.c | 1 +
> >> drivers/gpu/drm/i915/gt/intel_gt_mcr.c | 1 +
> >> drivers/gpu/drm/i915/gt/intel_reset.c | 7 +-
> >> .../gpu/drm/i915/gt/intel_ring_submission.c | 7 +-
> >> drivers/gpu/drm/i915/gt/intel_rps.c | 2 +
> >> drivers/gpu/drm/i915/gt/selftest_tlb.c | 6 +-
> >> drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c | 6 +-
> >> .../i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c | 2 +
> >> drivers/gpu/drm/i915/gt/uc/intel_guc.c | 8 +-
> >> drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c | 3 +-
> >> drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c | 4 +-
> >> drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c | 13 +-
> >> .../gpu/drm/i915/gt/uc/intel_guc_submission.c | 10 +-
> >> drivers/gpu/drm/i915/gvt/mmio_context.c | 6 +-
> >> drivers/gpu/drm/i915/i915_debugfs.c | 3 +-
> >> drivers/gpu/drm/i915/i915_utils.h | 106 ----------------
> >> drivers/gpu/drm/i915/i915_wait_util.h | 119 ++++++++++++++++++
> >> drivers/gpu/drm/i915/intel_pcode.c | 1 +
> >> drivers/gpu/drm/i915/intel_uncore.c | 7 +-
> >> drivers/gpu/drm/i915/pxp/intel_pxp.c | 4 +-
> >> drivers/gpu/drm/i915/selftests/i915_request.c | 5 +-
> >> .../gpu/drm/i915/selftests/i915_selftest.c | 2 +-
> >> drivers/gpu/drm/i915/selftests/igt_spinner.c | 5 +-
> >> drivers/gpu/drm/i915/vlv_suspend.c | 5 +-
> >> 24 files changed, 183 insertions(+), 150 deletions(-)
> >> create mode 100644 drivers/gpu/drm/i915/i915_wait_util.h
> >>
> >> diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> >> index 0c1b2df02d26..7f389cb0bde4 100644
> >> --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> >> +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c
> >> @@ -117,6 +117,7 @@
> >> #include "i915_timer_util.h"
> >> #include "i915_trace.h"
> >> #include "i915_vgpu.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_breadcrumbs.h"
> >> #include "intel_context.h"
> >> #include "intel_engine_heartbeat.h"
> >> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> >> index a60822e2b5d4..c3afa321fe30 100644
> >> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> >> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> >> @@ -4,6 +4,7 @@
> >> */
> >>
> >> #include "i915_drv.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_gt.h"
> >> #include "intel_gt_mcr.h"
> >> #include "intel_gt_print.h"
> >> diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c
> >> index 4a1675dea1c7..41b5036dc538 100644
> >> --- a/drivers/gpu/drm/i915/gt/intel_reset.c
> >> +++ b/drivers/gpu/drm/i915/gt/intel_reset.c
> >> @@ -9,18 +9,17 @@
> >>
> >> #include "display/intel_display_reset.h"
> >> #include "display/intel_overlay.h"
> >> -
> >> #include "gem/i915_gem_context.h"
> >> -
> >> #include "gt/intel_gt_regs.h"
> >> -
> >> #include "gt/uc/intel_gsc_fw.h"
> >> +#include "uc/intel_guc.h"
> >>
> >> #include "i915_drv.h"
> >> #include "i915_file_private.h"
> >> #include "i915_gpu_error.h"
> >> #include "i915_irq.h"
> >> #include "i915_reg.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_breadcrumbs.h"
> >> #include "intel_engine_pm.h"
> >> #include "intel_engine_regs.h"
> >> @@ -32,8 +31,6 @@
> >> #include "intel_pci_config.h"
> >> #include "intel_reset.h"
> >>
> >> -#include "uc/intel_guc.h"
> >> -
> >> #define RESET_MAX_RETRIES 3
> >>
> >> static void client_mark_guilty(struct i915_gem_context *ctx, bool banned)
> >> diff --git a/drivers/gpu/drm/i915/gt/intel_ring_submission.c b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
> >> index 2a6d79abf25b..8314a4b0505e 100644
> >> --- a/drivers/gpu/drm/i915/gt/intel_ring_submission.c
> >> +++ b/drivers/gpu/drm/i915/gt/intel_ring_submission.c
> >> @@ -15,18 +15,19 @@
> >> #include "i915_irq.h"
> >> #include "i915_mitigations.h"
> >> #include "i915_reg.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_breadcrumbs.h"
> >> #include "intel_context.h"
> >> +#include "intel_engine_heartbeat.h"
> >> +#include "intel_engine_pm.h"
> >> #include "intel_engine_regs.h"
> >> #include "intel_gt.h"
> >> #include "intel_gt_irq.h"
> >> +#include "intel_gt_print.h"
> >> #include "intel_gt_regs.h"
> >> #include "intel_reset.h"
> >> #include "intel_ring.h"
> >> #include "shmem_utils.h"
> >> -#include "intel_engine_heartbeat.h"
> >> -#include "intel_engine_pm.h"
> >> -#include "intel_gt_print.h"
> >>
> >> /* Rough estimate of the typical request size, performing a flush,
> >> * set-context and then emitting the batch.
> >> diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c
> >> index 006042e0b229..4da94098bd3e 100644
> >> --- a/drivers/gpu/drm/i915/gt/intel_rps.c
> >> +++ b/drivers/gpu/drm/i915/gt/intel_rps.c
> >> @@ -10,9 +10,11 @@
> >> #include "display/intel_display.h"
> >> #include "display/intel_display_rps.h"
> >> #include "soc/intel_dram.h"
> >> +
> >> #include "i915_drv.h"
> >> #include "i915_irq.h"
> >> #include "i915_reg.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_breadcrumbs.h"
> >> #include "intel_gt.h"
> >> #include "intel_gt_clock_utils.h"
> >> diff --git a/drivers/gpu/drm/i915/gt/selftest_tlb.c b/drivers/gpu/drm/i915/gt/selftest_tlb.c
> >> index 69ed946a39e5..a5184f09d1de 100644
> >> --- a/drivers/gpu/drm/i915/gt/selftest_tlb.c
> >> +++ b/drivers/gpu/drm/i915/gt/selftest_tlb.c
> >> @@ -3,17 +3,17 @@
> >> * Copyright © 2022 Intel Corporation
> >> */
> >>
> >> -#include "i915_selftest.h"
> >> -
> >> #include "gem/i915_gem_internal.h"
> >> #include "gem/i915_gem_lmem.h"
> >> #include "gem/i915_gem_region.h"
> >>
> >> #include "gen8_engine_cs.h"
> >> #include "i915_gem_ww.h"
> >> +#include "i915_selftest.h"
> >> +#include "i915_wait_util.h"
> >> +#include "intel_context.h"
> >> #include "intel_engine_regs.h"
> >> #include "intel_gpu_commands.h"
> >> -#include "intel_context.h"
> >> #include "intel_gt.h"
> >> #include "intel_ring.h"
> >>
> >> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
> >> index d8edd7c054c8..e7444ebc373e 100644
> >> --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
> >> +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.c
> >> @@ -10,11 +10,13 @@
> >>
> >> #include "gt/intel_gt.h"
> >> #include "gt/intel_gt_print.h"
> >> +
> >> +#include "i915_drv.h"
> >> +#include "i915_reg.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_gsc_proxy.h"
> >> #include "intel_gsc_uc.h"
> >> #include "intel_gsc_uc_heci_cmd_submit.h"
> >> -#include "i915_drv.h"
> >> -#include "i915_reg.h"
> >>
> >> /*
> >> * GSC proxy:
> >> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
> >> index 2fde5c360cff..9bd29be7656f 100644
> >> --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
> >> +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.c
> >> @@ -8,6 +8,8 @@
> >> #include "gt/intel_gpu_commands.h"
> >> #include "gt/intel_gt.h"
> >> #include "gt/intel_ring.h"
> >> +
> >> +#include "i915_wait_util.h"
> >> #include "intel_gsc_uc_heci_cmd_submit.h"
> >>
> >> struct gsc_heci_pkt {
> >> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> >> index f360f020d8f1..52ec4421a211 100644
> >> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> >> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> >> @@ -8,15 +8,17 @@
> >> #include "gt/intel_gt_irq.h"
> >> #include "gt/intel_gt_pm_irq.h"
> >> #include "gt/intel_gt_regs.h"
> >> +
> >> +#include "i915_drv.h"
> >> +#include "i915_irq.h"
> >> +#include "i915_reg.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_guc.h"
> >> #include "intel_guc_ads.h"
> >> #include "intel_guc_capture.h"
> >> #include "intel_guc_print.h"
> >> #include "intel_guc_slpc.h"
> >> #include "intel_guc_submission.h"
> >> -#include "i915_drv.h"
> >> -#include "i915_irq.h"
> >> -#include "i915_reg.h"
> >>
> >> /**
> >> * DOC: GuC
> >> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> >> index 380a11c92d63..3e7e5badcc2b 100644
> >> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> >> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> >> @@ -5,11 +5,12 @@
> >>
> >> #include <linux/circ_buf.h>
> >> #include <linux/ktime.h>
> >> -#include <linux/time64.h>
> >> #include <linux/string_helpers.h>
> >> +#include <linux/time64.h>
> >> #include <linux/timekeeping.h>
> >>
> >> #include "i915_drv.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_guc_ct.h"
> >> #include "intel_guc_print.h"
> >>
> >> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> >> index e7ccfa520df3..1bb1491f90fc 100644
> >> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> >> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c
> >> @@ -13,9 +13,11 @@
> >> #include "gt/intel_gt_mcr.h"
> >> #include "gt/intel_gt_regs.h"
> >> #include "gt/intel_rps.h"
> >> +
> >> +#include "i915_drv.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_guc_fw.h"
> >> #include "intel_guc_print.h"
> >> -#include "i915_drv.h"
> >>
> >> static void guc_prepare_xfer(struct intel_gt *gt)
> >> {
> >> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
> >> index d5ee6e5e1443..fa9af08f9708 100644
> >> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
> >> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c
> >> @@ -3,17 +3,20 @@
> >> * Copyright © 2021 Intel Corporation
> >> */
> >>
> >> -#include <drm/drm_cache.h>
> >> #include <linux/string_helpers.h>
> >>
> >> +#include <drm/drm_cache.h>
> >> +
> >> +#include "gt/intel_gt.h"
> >> +#include "gt/intel_gt_regs.h"
> >> +#include "gt/intel_rps.h"
> >> +
> >> #include "i915_drv.h"
> >> #include "i915_reg.h"
> >> -#include "intel_guc_slpc.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_guc_print.h"
> >> +#include "intel_guc_slpc.h"
> >> #include "intel_mchbar_regs.h"
> >> -#include "gt/intel_gt.h"
> >> -#include "gt/intel_gt_regs.h"
> >> -#include "gt/intel_rps.h"
> >>
> >> /**
> >> * DOC: SLPC - Dynamic Frequency management
> >> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> >> index 127316d2c8aa..68f2b8d363ac 100644
> >> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> >> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> >> @@ -25,16 +25,16 @@
> >> #include "gt/intel_mocs.h"
> >> #include "gt/intel_ring.h"
> >>
> >> +#include "i915_drv.h"
> >> +#include "i915_irq.h"
> >> +#include "i915_reg.h"
> >> +#include "i915_trace.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_guc_ads.h"
> >> #include "intel_guc_capture.h"
> >> #include "intel_guc_print.h"
> >> #include "intel_guc_submission.h"
> >>
> >> -#include "i915_drv.h"
> >> -#include "i915_reg.h"
> >> -#include "i915_irq.h"
> >> -#include "i915_trace.h"
> >> -
> >> /**
> >> * DOC: GuC-based command submission
> >> *
> >> diff --git a/drivers/gpu/drm/i915/gvt/mmio_context.c b/drivers/gpu/drm/i915/gvt/mmio_context.c
> >> index 2f7208843367..0b810baad20a 100644
> >> --- a/drivers/gpu/drm/i915/gvt/mmio_context.c
> >> +++ b/drivers/gpu/drm/i915/gvt/mmio_context.c
> >> @@ -33,14 +33,16 @@
> >> *
> >> */
> >>
> >> -#include "i915_drv.h"
> >> -#include "i915_reg.h"
> >> #include "gt/intel_context.h"
> >> #include "gt/intel_engine_regs.h"
> >> #include "gt/intel_gpu_commands.h"
> >> #include "gt/intel_gt_regs.h"
> >> #include "gt/intel_ring.h"
> >> +
> >> #include "gvt.h"
> >> +#include "i915_drv.h"
> >> +#include "i915_reg.h"
> >> +#include "i915_wait_util.h"
> >> #include "trace.h"
> >>
> >> #define GEN9_MOCS_SIZE 64
> >> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> >> index 23fa098c4479..c2e38d4bcd01 100644
> >> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> >> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> >> @@ -26,11 +26,11 @@
> >> *
> >> */
> >>
> >> +#include <linux/debugfs.h>
> >> #include <linux/sched/mm.h>
> >> #include <linux/sort.h>
> >> #include <linux/string_helpers.h>
> >>
> >> -#include <linux/debugfs.h>
> >> #include <drm/drm_debugfs.h>
> >>
> >> #include "gem/i915_gem_context.h"
> >> @@ -54,6 +54,7 @@
> >> #include "i915_irq.h"
> >> #include "i915_reg.h"
> >> #include "i915_scheduler.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_mchbar_regs.h"
> >>
> >> static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
> >> diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h
> >> index 4a6437d6e00e..a0c892e4c40d 100644
> >> --- a/drivers/gpu/drm/i915/i915_utils.h
> >> +++ b/drivers/gpu/drm/i915/i915_utils.h
> >> @@ -134,112 +134,6 @@ wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms)
> >> }
> >> }
> >>
> >> -/*
> >> - * __wait_for - magic wait macro
> >> - *
> >> - * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
> >> - * important that we check the condition again after having timed out, since the
> >> - * timeout could be due to preemption or similar and we've never had a chance to
> >> - * check the condition before the timeout.
> >> - */
> >> -#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
> >> - const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
> >> - long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
> >> - int ret__; \
> >> - might_sleep(); \
> >> - for (;;) { \
> >> - const bool expired__ = ktime_after(ktime_get_raw(), end__); \
> >> - OP; \
> >> - /* Guarantee COND check prior to timeout */ \
> >> - barrier(); \
> >> - if (COND) { \
> >> - ret__ = 0; \
> >> - break; \
> >> - } \
> >> - if (expired__) { \
> >> - ret__ = -ETIMEDOUT; \
> >> - break; \
> >> - } \
> >> - usleep_range(wait__, wait__ * 2); \
> >> - if (wait__ < (Wmax)) \
> >> - wait__ <<= 1; \
> >> - } \
> >> - ret__; \
> >> -})
> >> -
> >> -#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
> >> - (Wmax))
> >> -#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
> >> -
> >> -/*
> >> - * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
> >> - * On PREEMPT_RT the context isn't becoming atomic because it is used in an
> >> - * interrupt handler or because a spinlock_t is acquired. This leads to
> >> - * warnings which don't occur otherwise and therefore the check is disabled.
> >> - */
> >> -#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
> >> -# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
> >> -#else
> >> -# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
> >> -#endif
> >> -
> >> -#define _wait_for_atomic(COND, US, ATOMIC) \
> >> -({ \
> >> - int cpu, ret, timeout = (US) * 1000; \
> >> - u64 base; \
> >> - _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
> >> - if (!(ATOMIC)) { \
> >> - preempt_disable(); \
> >> - cpu = smp_processor_id(); \
> >> - } \
> >> - base = local_clock(); \
> >> - for (;;) { \
> >> - u64 now = local_clock(); \
> >> - if (!(ATOMIC)) \
> >> - preempt_enable(); \
> >> - /* Guarantee COND check prior to timeout */ \
> >> - barrier(); \
> >> - if (COND) { \
> >> - ret = 0; \
> >> - break; \
> >> - } \
> >> - if (now - base >= timeout) { \
> >> - ret = -ETIMEDOUT; \
> >> - break; \
> >> - } \
> >> - cpu_relax(); \
> >> - if (!(ATOMIC)) { \
> >> - preempt_disable(); \
> >> - if (unlikely(cpu != smp_processor_id())) { \
> >> - timeout -= now - base; \
> >> - cpu = smp_processor_id(); \
> >> - base = local_clock(); \
> >> - } \
> >> - } \
> >> - } \
> >> - ret; \
> >> -})
> >> -
> >> -#define wait_for_us(COND, US) \
> >> -({ \
> >> - int ret__; \
> >> - BUILD_BUG_ON(!__builtin_constant_p(US)); \
> >> - if ((US) > 10) \
> >> - ret__ = _wait_for((COND), (US), 10, 10); \
> >> - else \
> >> - ret__ = _wait_for_atomic((COND), (US), 0); \
> >> - ret__; \
> >> -})
> >> -
> >> -#define wait_for_atomic_us(COND, US) \
> >> -({ \
> >> - BUILD_BUG_ON(!__builtin_constant_p(US)); \
> >> - BUILD_BUG_ON((US) > 50000); \
> >> - _wait_for_atomic((COND), (US), 1); \
> >> -})
> >> -
> >> -#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
> >> -
> >> #define KHz(x) (1000 * (x))
> >> #define MHz(x) KHz(1000 * (x))
> >>
> >> diff --git a/drivers/gpu/drm/i915/i915_wait_util.h b/drivers/gpu/drm/i915/i915_wait_util.h
> >> new file mode 100644
> >> index 000000000000..7376898e3bf8
> >> --- /dev/null
> >> +++ b/drivers/gpu/drm/i915/i915_wait_util.h
> >> @@ -0,0 +1,119 @@
> >> +/* SPDX-License-Identifier: MIT */
> >> +/* Copyright © 2025 Intel Corporation */
> >> +
> >> +#ifndef __I915_WAIT_UTIL_H__
> >> +#define __I915_WAIT_UTIL_H__
> >> +
> >> +#include <linux/compiler.h>
> >> +#include <linux/delay.h>
> >> +#include <linux/ktime.h>
> >> +#include <linux/sched/clock.h>
> >> +#include <linux/smp.h>
> >> +
> >> +/*
> >> + * __wait_for - magic wait macro
> >> + *
> >> + * Macro to help avoid open coding check/wait/timeout patterns. Note that it's
> >> + * important that we check the condition again after having timed out, since the
> >> + * timeout could be due to preemption or similar and we've never had a chance to
> >> + * check the condition before the timeout.
> >> + */
> >> +#define __wait_for(OP, COND, US, Wmin, Wmax) ({ \
> >> + const ktime_t end__ = ktime_add_ns(ktime_get_raw(), 1000ll * (US)); \
> >> + long wait__ = (Wmin); /* recommended min for usleep is 10 us */ \
> >> + int ret__; \
> >> + might_sleep(); \
> >> + for (;;) { \
> >> + const bool expired__ = ktime_after(ktime_get_raw(), end__); \
> >> + OP; \
> >> + /* Guarantee COND check prior to timeout */ \
> >> + barrier(); \
> >> + if (COND) { \
> >> + ret__ = 0; \
> >> + break; \
> >> + } \
> >> + if (expired__) { \
> >> + ret__ = -ETIMEDOUT; \
> >> + break; \
> >> + } \
> >> + usleep_range(wait__, wait__ * 2); \
> >> + if (wait__ < (Wmax)) \
> >> + wait__ <<= 1; \
> >> + } \
> >> + ret__; \
> >> +})
> >> +
> >> +#define _wait_for(COND, US, Wmin, Wmax) __wait_for(, (COND), (US), (Wmin), \
> >> + (Wmax))
> >> +#define wait_for(COND, MS) _wait_for((COND), (MS) * 1000, 10, 1000)
> >> +
> >> +/*
> >> + * If CONFIG_PREEMPT_COUNT is disabled, in_atomic() always reports false.
> >> + * On PREEMPT_RT the context isn't becoming atomic because it is used in an
> >> + * interrupt handler or because a spinlock_t is acquired. This leads to
> >> + * warnings which don't occur otherwise and therefore the check is disabled.
> >> + */
> >> +#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) && IS_ENABLED(CONFIG_PREEMPT_COUNT) && !defined(CONFIG_PREEMPT_RT)
> >> +# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) WARN_ON_ONCE((ATOMIC) && !in_atomic())
> >> +#else
> >> +# define _WAIT_FOR_ATOMIC_CHECK(ATOMIC) do { } while (0)
> >> +#endif
> >> +
> >> +#define _wait_for_atomic(COND, US, ATOMIC) \
> >> +({ \
> >> + int cpu, ret, timeout = (US) * 1000; \
> >> + u64 base; \
> >> + _WAIT_FOR_ATOMIC_CHECK(ATOMIC); \
> >> + if (!(ATOMIC)) { \
> >> + preempt_disable(); \
> >> + cpu = smp_processor_id(); \
> >> + } \
> >> + base = local_clock(); \
> >> + for (;;) { \
> >> + u64 now = local_clock(); \
> >> + if (!(ATOMIC)) \
> >> + preempt_enable(); \
> >> + /* Guarantee COND check prior to timeout */ \
> >> + barrier(); \
> >> + if (COND) { \
> >> + ret = 0; \
> >> + break; \
> >> + } \
> >> + if (now - base >= timeout) { \
> >> + ret = -ETIMEDOUT; \
> >> + break; \
> >> + } \
> >> + cpu_relax(); \
> >> + if (!(ATOMIC)) { \
> >> + preempt_disable(); \
> >> + if (unlikely(cpu != smp_processor_id())) { \
> >> + timeout -= now - base; \
> >> + cpu = smp_processor_id(); \
> >> + base = local_clock(); \
> >> + } \
> >> + } \
> >> + } \
> >> + ret; \
> >> +})
> >> +
> >> +#define wait_for_us(COND, US) \
> >> +({ \
> >> + int ret__; \
> >> + BUILD_BUG_ON(!__builtin_constant_p(US)); \
> >> + if ((US) > 10) \
> >> + ret__ = _wait_for((COND), (US), 10, 10); \
> >> + else \
> >> + ret__ = _wait_for_atomic((COND), (US), 0); \
> >> + ret__; \
> >> +})
> >> +
> >> +#define wait_for_atomic_us(COND, US) \
> >> +({ \
> >> + BUILD_BUG_ON(!__builtin_constant_p(US)); \
> >> + BUILD_BUG_ON((US) > 50000); \
> >> + _wait_for_atomic((COND), (US), 1); \
> >> +})
> >> +
> >> +#define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
> >> +
> >> +#endif /* __I915_WAIT_UTIL_H__ */
> >> diff --git a/drivers/gpu/drm/i915/intel_pcode.c b/drivers/gpu/drm/i915/intel_pcode.c
> >> index 81da75108c60..55ffedad2490 100644
> >> --- a/drivers/gpu/drm/i915/intel_pcode.c
> >> +++ b/drivers/gpu/drm/i915/intel_pcode.c
> >> @@ -5,6 +5,7 @@
> >>
> >> #include "i915_drv.h"
> >> #include "i915_reg.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_pcode.h"
> >>
> >> static int gen6_check_mailbox_status(u32 mbox)
> >> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> >> index 4ccba7c8ffb3..8cb59f8d1f4c 100644
> >> --- a/drivers/gpu/drm/i915/intel_uncore.c
> >> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> >> @@ -21,19 +21,20 @@
> >> * IN THE SOFTWARE.
> >> */
> >>
> >> -#include <drm/drm_managed.h>
> >> #include <linux/pm_runtime.h>
> >>
> >> -#include "display/intel_display_core.h"
> >> +#include <drm/drm_managed.h>
> >>
> >> -#include "gt/intel_gt.h"
> >> +#include "display/intel_display_core.h"
> >> #include "gt/intel_engine_regs.h"
> >> +#include "gt/intel_gt.h"
> >> #include "gt/intel_gt_regs.h"
> >>
> >> #include "i915_drv.h"
> >> #include "i915_iosf_mbi.h"
> >> #include "i915_reg.h"
> >> #include "i915_vgpu.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_uncore_trace.h"
> >>
> >> #define FORCEWAKE_ACK_TIMEOUT_MS 50
> >> diff --git a/drivers/gpu/drm/i915/pxp/intel_pxp.c b/drivers/gpu/drm/i915/pxp/intel_pxp.c
> >> index f8da693ad3ce..27d545c4e6a5 100644
> >> --- a/drivers/gpu/drm/i915/pxp/intel_pxp.c
> >> +++ b/drivers/gpu/drm/i915/pxp/intel_pxp.c
> >> @@ -2,15 +2,15 @@
> >> /*
> >> * Copyright(c) 2020 Intel Corporation.
> >> */
> >> +
> >> #include <linux/workqueue.h>
> >>
> >> #include "gem/i915_gem_context.h"
> >> -
> >> #include "gt/intel_context.h"
> >> #include "gt/intel_gt.h"
> >>
> >> #include "i915_drv.h"
> >> -
> >> +#include "i915_wait_util.h"
> >> #include "intel_pxp.h"
> >> #include "intel_pxp_gsccs.h"
> >> #include "intel_pxp_irq.h"
> >> diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> >> index 2fb7a9e7efec..48cd617247d1 100644
> >> --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> >> +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> >> @@ -22,14 +22,13 @@
> >> *
> >> */
> >>
> >> -#include <linux/prime_numbers.h>
> >> #include <linux/pm_qos.h>
> >> +#include <linux/prime_numbers.h>
> >> #include <linux/sort.h>
> >>
> >> #include "gem/i915_gem_internal.h"
> >> #include "gem/i915_gem_pm.h"
> >> #include "gem/selftests/mock_context.h"
> >> -
> >> #include "gt/intel_engine_heartbeat.h"
> >> #include "gt/intel_engine_pm.h"
> >> #include "gt/intel_engine_user.h"
> >> @@ -40,11 +39,11 @@
> >>
> >> #include "i915_random.h"
> >> #include "i915_selftest.h"
> >> +#include "i915_wait_util.h"
> >> #include "igt_flush_test.h"
> >> #include "igt_live_test.h"
> >> #include "igt_spinner.h"
> >> #include "lib_sw_fence.h"
> >> -
> >> #include "mock_drm.h"
> >> #include "mock_gem_device.h"
> >>
> >> diff --git a/drivers/gpu/drm/i915/selftests/i915_selftest.c b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> >> index 889281819c5b..9c276c9d0a75 100644
> >> --- a/drivers/gpu/drm/i915/selftests/i915_selftest.c
> >> +++ b/drivers/gpu/drm/i915/selftests/i915_selftest.c
> >> @@ -31,7 +31,7 @@
> >> #include "i915_driver.h"
> >> #include "i915_drv.h"
> >> #include "i915_selftest.h"
> >> -
> >> +#include "i915_wait_util.h"
> >> #include "igt_flush_test.h"
> >>
> >> struct i915_selftest i915_selftest __read_mostly = {
> >> diff --git a/drivers/gpu/drm/i915/selftests/igt_spinner.c b/drivers/gpu/drm/i915/selftests/igt_spinner.c
> >> index 8c3e1f20e5a1..820364171ebe 100644
> >> --- a/drivers/gpu/drm/i915/selftests/igt_spinner.c
> >> +++ b/drivers/gpu/drm/i915/selftests/igt_spinner.c
> >> @@ -3,12 +3,13 @@
> >> *
> >> * Copyright © 2018 Intel Corporation
> >> */
> >> -#include "gt/intel_gpu_commands.h"
> >> -#include "gt/intel_gt.h"
> >>
> >> #include "gem/i915_gem_internal.h"
> >> #include "gem/selftests/igt_gem_utils.h"
> >> +#include "gt/intel_gpu_commands.h"
> >> +#include "gt/intel_gt.h"
> >>
> >> +#include "i915_wait_util.h"
> >> #include "igt_spinner.h"
> >>
> >> int igt_spinner_init(struct igt_spinner *spin, struct intel_gt *gt)
> >> diff --git a/drivers/gpu/drm/i915/vlv_suspend.c b/drivers/gpu/drm/i915/vlv_suspend.c
> >> index fc9f311ea1db..221e4c0b2c58 100644
> >> --- a/drivers/gpu/drm/i915/vlv_suspend.c
> >> +++ b/drivers/gpu/drm/i915/vlv_suspend.c
> >> @@ -8,16 +8,17 @@
> >>
> >> #include <drm/drm_print.h>
> >>
> >> +#include "gt/intel_gt_regs.h"
> >> +
> >> #include "i915_drv.h"
> >> #include "i915_reg.h"
> >> #include "i915_trace.h"
> >> #include "i915_utils.h"
> >> +#include "i915_wait_util.h"
> >> #include "intel_clock_gating.h"
> >> #include "intel_uncore_trace.h"
> >> #include "vlv_suspend.h"
> >>
> >> -#include "gt/intel_gt_regs.h"
> >> -
> >> struct vlv_s0ix_state {
> >> /* GAM */
> >> u32 wr_watermark;
> >> --
> >> 2.47.3
> >>
>
> --
> Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-09-10 16:45 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-08 14:11 [PATCH 0/5] drm/i915: clean up i915_utils.h Jani Nikula
2025-09-08 14:11 ` [PATCH 1/5] drm/i915: redundant i915_utils.h includes Jani Nikula
2025-09-09 13:36 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 2/5] drm/i915: split out i915_ptr_util.h Jani Nikula
2025-09-09 13:37 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 3/5] drm/i915: split out i915_timer_util.[ch] Jani Nikula
2025-09-09 13:38 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 4/5] drm/i915: split out i915_list_util.h Jani Nikula
2025-09-09 13:39 ` Rodrigo Vivi
2025-09-08 14:11 ` [PATCH 5/5] drm/i915: split out i915_wait_util.h Jani Nikula
2025-09-09 13:40 ` Rodrigo Vivi
2025-09-10 12:06 ` Jani Nikula
2025-09-10 16:45 ` Rodrigo Vivi
2025-09-08 19:07 ` ✗ Fi.CI.BUILD: failure for drm/i915: clean up i915_utils.h Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).