* [PATCH v2 00/25] drm/vblank: refactoring and cleanups
@ 2025-12-04 10:57 Jani Nikula
2025-12-04 10:57 ` [PATCH v2 01/25] drm/vblank: Unexport drm_wait_one_vblank() Jani Nikula
` (27 more replies)
0 siblings, 28 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
v2 of [1], hopefully addressing all review comments.
BR,
Jani.
[1] https://lore.kernel.org/r/cover.1762791343.git.jani.nikula@intel.com
Jani Nikula (24):
drm/vblank: remove drm_wait_one_vblank() completely
drm/vblank: remove superfluous pipe check
drm/vblank: add return value to drm_crtc_wait_one_vblank()
drm/vblank: limit vblank variable scope to atomic
drm/vblank: use the drm_vblank_crtc() and drm_crtc_vblank_crtc()
helpers more
drm/vblank: prefer drm_crtc_vblank_crtc() over drm_vblank_crtc()
drm/vblank: pass vlank to drm_vblank_get()/_put()/_count()
drm/vblank: pass vblank to drm_update_vblank_count()
drm/vblank: pass vblank to drm_handle_vblank_events()
drm/vblank: use the vblank based interfaces more
drm/vblank: pass vblank to drm_queue_vblank_event()
drm/vblank: pass vblank to drm_wait_vblank_reply()
drm/vblank: pass vblank to drm_vblank_count_and_time()
drm/vblank: pass vblank to drm_reset_vblank_timestamp()
drm/vblank: pass vblank to store_vblank()
drm/vblank: pass vblank to drm_vblank_enable()
drm/vblank: merge drm_vblank_restore() into drm_crtc_vblank_restore()
drm/vblank: add drm_crtc_from_vblank() helper
drm/vblank: pass vblank to __get_vblank_counter() and
drm_max_vblank_count()
drm/vblank: pass vblank to __{enable,disable}_vblank()
drm/vblank: pass vblank to drm_get_last_vbltimestamp()
drm/vblank: pass vblank to drm_vblank_disable_and_save(), make static
drm/vblank: reduce pipe checks
drm/vblank: clean up debug logging
Thomas Zimmermann (1):
drm/vblank: Unexport drm_wait_one_vblank()
drivers/gpu/drm/drm_internal.h | 7 +-
drivers/gpu/drm/drm_vblank.c | 533 ++++++++++++++----------------
drivers/gpu/drm/drm_vblank_work.c | 12 +-
include/drm/drm_vblank.h | 3 +-
4 files changed, 257 insertions(+), 298 deletions(-)
--
2.47.3
^ permalink raw reply [flat|nested] 35+ messages in thread
* [PATCH v2 01/25] drm/vblank: Unexport drm_wait_one_vblank()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 02/25] drm/vblank: remove drm_wait_one_vblank() completely Jani Nikula
` (26 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
From: Thomas Zimmermann <tzimmermann@suse.de>
Make drm_wait_on_vblank() static. The function is an internal interface
and not invoked directly by drivers.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 14 +-------------
include/drm/drm_vblank.h | 1 -
2 files changed, 1 insertion(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 32d013c5c8fc..c15d6d9d0082 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1286,18 +1286,7 @@ void drm_crtc_vblank_put(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_vblank_put);
-/**
- * drm_wait_one_vblank - wait for one vblank
- * @dev: DRM device
- * @pipe: CRTC index
- *
- * This waits for one vblank to pass on @pipe, using the irq driver interfaces.
- * It is a failure to call this when the vblank irq for @pipe is disabled, e.g.
- * due to lack of driver support or because the crtc is off.
- *
- * This is the legacy version of drm_crtc_wait_one_vblank().
- */
-void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe)
+static void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe)
{
struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
int ret;
@@ -1321,7 +1310,6 @@ void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe)
drm_vblank_put(dev, pipe);
}
-EXPORT_SYMBOL(drm_wait_one_vblank);
/**
* drm_crtc_wait_one_vblank - wait for one vblank
diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h
index ffa564d79638..94ee09b48895 100644
--- a/include/drm/drm_vblank.h
+++ b/include/drm/drm_vblank.h
@@ -302,7 +302,6 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe);
bool drm_crtc_handle_vblank(struct drm_crtc *crtc);
int drm_crtc_vblank_get(struct drm_crtc *crtc);
void drm_crtc_vblank_put(struct drm_crtc *crtc);
-void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe);
void drm_crtc_wait_one_vblank(struct drm_crtc *crtc);
void drm_crtc_vblank_off(struct drm_crtc *crtc);
void drm_crtc_vblank_reset(struct drm_crtc *crtc);
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 02/25] drm/vblank: remove drm_wait_one_vblank() completely
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
2025-12-04 10:57 ` [PATCH v2 01/25] drm/vblank: Unexport drm_wait_one_vblank() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 03/25] drm/vblank: remove superfluous pipe check Jani Nikula
` (25 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
There's really no need for the extra static function at all.
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 25 +++++++++++--------------
1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index c15d6d9d0082..1d12836e3d80 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1286,8 +1286,18 @@ void drm_crtc_vblank_put(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_vblank_put);
-static void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe)
+/**
+ * drm_crtc_wait_one_vblank - wait for one vblank
+ * @crtc: DRM crtc
+ *
+ * This waits for one vblank to pass on @crtc, using the irq driver interfaces.
+ * It is a failure to call this when the vblank irq for @crtc is disabled, e.g.
+ * due to lack of driver support or because the crtc is off.
+ */
+void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
{
+ struct drm_device *dev = crtc->dev;
+ int pipe = drm_crtc_index(crtc);
struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
int ret;
u64 last;
@@ -1310,19 +1320,6 @@ static void drm_wait_one_vblank(struct drm_device *dev, unsigned int pipe)
drm_vblank_put(dev, pipe);
}
-
-/**
- * drm_crtc_wait_one_vblank - wait for one vblank
- * @crtc: DRM crtc
- *
- * This waits for one vblank to pass on @crtc, using the irq driver interfaces.
- * It is a failure to call this when the vblank irq for @crtc is disabled, e.g.
- * due to lack of driver support or because the crtc is off.
- */
-void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
-{
- drm_wait_one_vblank(crtc->dev, drm_crtc_index(crtc));
-}
EXPORT_SYMBOL(drm_crtc_wait_one_vblank);
/**
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 03/25] drm/vblank: remove superfluous pipe check
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
2025-12-04 10:57 ` [PATCH v2 01/25] drm/vblank: Unexport drm_wait_one_vblank() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 02/25] drm/vblank: remove drm_wait_one_vblank() completely Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 04/25] drm/vblank: add return value to drm_crtc_wait_one_vblank() Jani Nikula
` (24 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Now that the pipe is crtc->pipe, there's no need to check it's within
range.
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 1d12836e3d80..f4d1fe182a4d 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1302,9 +1302,6 @@ void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
int ret;
u64 last;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return;
-
ret = drm_vblank_get(dev, pipe);
if (drm_WARN(dev, ret, "vblank not available on crtc %i, ret=%i\n",
pipe, ret))
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 04/25] drm/vblank: add return value to drm_crtc_wait_one_vblank()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (2 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 03/25] drm/vblank: remove superfluous pipe check Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 05/25] drm/vblank: limit vblank variable scope to atomic Jani Nikula
` (23 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Let drivers deal with the vblank wait failures if they so desire. If the
current warning backtrace gets toned down to a simple warning message,
the drivers may wish to add the backtrace themselves.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 8 ++++++--
include/drm/drm_vblank.h | 2 +-
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index f4d1fe182a4d..503eb23d38d2 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1293,8 +1293,10 @@ EXPORT_SYMBOL(drm_crtc_vblank_put);
* This waits for one vblank to pass on @crtc, using the irq driver interfaces.
* It is a failure to call this when the vblank irq for @crtc is disabled, e.g.
* due to lack of driver support or because the crtc is off.
+ *
+ * Returns: 0 on success, negative error on failures.
*/
-void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
+int drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
int pipe = drm_crtc_index(crtc);
@@ -1305,7 +1307,7 @@ void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
ret = drm_vblank_get(dev, pipe);
if (drm_WARN(dev, ret, "vblank not available on crtc %i, ret=%i\n",
pipe, ret))
- return;
+ return ret;
last = drm_vblank_count(dev, pipe);
@@ -1316,6 +1318,8 @@ void drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
drm_WARN(dev, ret == 0, "vblank wait timed out on crtc %i\n", pipe);
drm_vblank_put(dev, pipe);
+
+ return ret ? 0 : -ETIMEDOUT;
}
EXPORT_SYMBOL(drm_crtc_wait_one_vblank);
diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h
index 94ee09b48895..2fcef9c0f5b1 100644
--- a/include/drm/drm_vblank.h
+++ b/include/drm/drm_vblank.h
@@ -302,7 +302,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe);
bool drm_crtc_handle_vblank(struct drm_crtc *crtc);
int drm_crtc_vblank_get(struct drm_crtc *crtc);
void drm_crtc_vblank_put(struct drm_crtc *crtc);
-void drm_crtc_wait_one_vblank(struct drm_crtc *crtc);
+int drm_crtc_wait_one_vblank(struct drm_crtc *crtc);
void drm_crtc_vblank_off(struct drm_crtc *crtc);
void drm_crtc_vblank_reset(struct drm_crtc *crtc);
void drm_crtc_vblank_on_config(struct drm_crtc *crtc,
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 05/25] drm/vblank: limit vblank variable scope to atomic
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (3 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 04/25] drm/vblank: add return value to drm_crtc_wait_one_vblank() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 06/25] drm/vblank: use the drm_vblank_crtc() and drm_crtc_vblank_crtc() helpers more Jani Nikula
` (22 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
In drm_crtc_vblank_helper_get_vblank_timestamp_internal(), we only need
the vblank variable for atomic modesetting. Limit the scope to make
upcoming changes easier.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 503eb23d38d2..91e63177daaf 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -710,7 +710,6 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
{
struct drm_device *dev = crtc->dev;
unsigned int pipe = crtc->index;
- struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
struct timespec64 ts_etime, ts_vblank_time;
ktime_t stime, etime;
bool vbl_status;
@@ -729,10 +728,13 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
return false;
}
- if (drm_drv_uses_atomic_modeset(dev))
+ if (drm_drv_uses_atomic_modeset(dev)) {
+ struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
+
mode = &vblank->hwmode;
- else
+ } else {
mode = &crtc->hwmode;
+ }
/* If mode timing undefined, just return as no-op:
* Happens during initial modesetting of a crtc.
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 06/25] drm/vblank: use the drm_vblank_crtc() and drm_crtc_vblank_crtc() helpers more
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (4 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 05/25] drm/vblank: limit vblank variable scope to atomic Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 07/25] drm/vblank: prefer drm_crtc_vblank_crtc() over drm_vblank_crtc() Jani Nikula
` (21 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
We have the helpers to avoid open coding dev->vblank[pipe] access.
v2: Rebase
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 91e63177daaf..a86561c4b999 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -551,7 +551,7 @@ int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
dev->num_crtcs = num_crtcs;
for (i = 0; i < num_crtcs; i++) {
- struct drm_vblank_crtc *vblank = &dev->vblank[i];
+ struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, i);
vblank->dev = dev;
vblank->pipe = i;
@@ -605,7 +605,9 @@ EXPORT_SYMBOL(drm_dev_has_vblank);
*/
wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc)
{
- return &crtc->dev->vblank[drm_crtc_index(crtc)].queue;
+ struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
+
+ return &vblank->queue;
}
EXPORT_SYMBOL(drm_crtc_vblank_waitqueue);
@@ -729,7 +731,7 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
}
if (drm_drv_uses_atomic_modeset(dev)) {
- struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
+ struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
mode = &vblank->hwmode;
} else {
@@ -1784,7 +1786,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
if (pipe >= dev->num_crtcs)
return -EINVAL;
- vblank = &dev->vblank[pipe];
+ vblank = drm_vblank_crtc(dev, pipe);
/* If the counter is currently enabled and accurate, short-circuit
* queries to return the cached timestamp of the last vblank.
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 07/25] drm/vblank: prefer drm_crtc_vblank_crtc() over drm_vblank_crtc()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (5 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 06/25] drm/vblank: use the drm_vblank_crtc() and drm_crtc_vblank_crtc() helpers more Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 08/25] drm/vblank: pass vlank to drm_vblank_get()/_put()/_count() Jani Nikula
` (20 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the higher level function where crtc is available.
v2: Rebase
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index a86561c4b999..498fc91450e6 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -731,7 +731,7 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
}
if (drm_drv_uses_atomic_modeset(dev)) {
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
mode = &vblank->hwmode;
} else {
@@ -1304,7 +1304,7 @@ int drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
int pipe = drm_crtc_index(crtc);
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
int ret;
u64 last;
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 08/25] drm/vblank: pass vlank to drm_vblank_get()/_put()/_count()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (6 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 07/25] drm/vblank: prefer drm_crtc_vblank_crtc() over drm_vblank_crtc() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 09/25] drm/vblank: pass vblank to drm_update_vblank_count() Jani Nikula
` (19 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Pass struct drm_vblank_crtc * to drm_vblank_get(), drm_vblank_put(), and
drm_vblank_count(). They'll figure out the vblank pointer as the first
thing anyway, so it's handy to pass it when available. We can also rely
on vblank having a valid pipe, and can reduce the number of checks we
do.
Rename the functions to drm_vblank_crtc_*() naming. Directly convert the
call sites that already have the vblank pointer available.
v2: Use drm_vblank_crtc_* naming (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_internal.h | 6 +--
drivers/gpu/drm/drm_vblank.c | 69 +++++++++++++++++++------------
drivers/gpu/drm/drm_vblank_work.c | 12 +++---
3 files changed, 51 insertions(+), 36 deletions(-)
diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
index f893b1e3a596..6e7ac5b16d92 100644
--- a/drivers/gpu/drm/drm_internal.h
+++ b/drivers/gpu/drm/drm_internal.h
@@ -112,9 +112,9 @@ static inline bool drm_vblank_passed(u64 seq, u64 ref)
}
void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe);
-int drm_vblank_get(struct drm_device *dev, unsigned int pipe);
-void drm_vblank_put(struct drm_device *dev, unsigned int pipe);
-u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe);
+int drm_vblank_crtc_get(struct drm_vblank_crtc *vblank);
+void drm_vblank_crtc_put(struct drm_vblank_crtc *vblank);
+u64 drm_vblank_crtc_count(struct drm_vblank_crtc *vblank);
/* drm_vblank_work.c */
static inline void drm_vblank_flush_worker(struct drm_vblank_crtc *vblank)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 498fc91450e6..aeb931c825ca 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -384,14 +384,10 @@ static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe,
store_vblank(dev, pipe, diff, t_vblank, cur_vblank);
}
-u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
+u64 drm_vblank_crtc_count(struct drm_vblank_crtc *vblank)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
u64 count;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return 0;
-
count = atomic64_read(&vblank->count);
/*
@@ -406,6 +402,14 @@ u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
return count;
}
+static u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
+{
+ if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
+ return 0;
+
+ return drm_vblank_crtc_count(drm_vblank_crtc(dev, pipe));
+}
+
/**
* drm_crtc_accurate_vblank_count - retrieve the master vblank counter
* @crtc: which counter to retrieve
@@ -1210,18 +1214,16 @@ static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe)
return ret;
}
-int drm_vblank_get(struct drm_device *dev, unsigned int pipe)
+int drm_vblank_crtc_get(struct drm_vblank_crtc *vblank)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_device *dev = vblank->dev;
+ int pipe = vblank->pipe;
unsigned long irqflags;
int ret = 0;
if (!drm_dev_has_vblank(dev))
return -EINVAL;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return -EINVAL;
-
spin_lock_irqsave(&dev->vbl_lock, irqflags);
/* Going from 0->1 means we have to enable interrupts again */
if (atomic_add_return(1, &vblank->refcount) == 1) {
@@ -1237,6 +1239,14 @@ int drm_vblank_get(struct drm_device *dev, unsigned int pipe)
return ret;
}
+static int drm_vblank_get(struct drm_device *dev, unsigned int pipe)
+{
+ if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
+ return -EINVAL;
+
+ return drm_vblank_crtc_get(drm_vblank_crtc(dev, pipe));
+}
+
/**
* drm_crtc_vblank_get - get a reference count on vblank events
* @crtc: which CRTC to own
@@ -1253,14 +1263,11 @@ int drm_crtc_vblank_get(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_vblank_get);
-void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
+void drm_vblank_crtc_put(struct drm_vblank_crtc *vblank)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_device *dev = vblank->dev;
int vblank_offdelay = vblank->config.offdelay_ms;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return;
-
if (drm_WARN_ON(dev, atomic_read(&vblank->refcount) == 0))
return;
@@ -1276,6 +1283,14 @@ void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
}
}
+static void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
+{
+ if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
+ return;
+
+ drm_vblank_crtc_put(drm_vblank_crtc(dev, pipe));
+}
+
/**
* drm_crtc_vblank_put - give up ownership of vblank events
* @crtc: which counter to give up
@@ -1308,20 +1323,20 @@ int drm_crtc_wait_one_vblank(struct drm_crtc *crtc)
int ret;
u64 last;
- ret = drm_vblank_get(dev, pipe);
+ ret = drm_vblank_crtc_get(vblank);
if (drm_WARN(dev, ret, "vblank not available on crtc %i, ret=%i\n",
pipe, ret))
return ret;
- last = drm_vblank_count(dev, pipe);
+ last = drm_vblank_crtc_count(vblank);
ret = wait_event_timeout(vblank->queue,
- last != drm_vblank_count(dev, pipe),
+ last != drm_vblank_crtc_count(vblank),
msecs_to_jiffies(1000));
drm_WARN(dev, ret == 0, "vblank wait timed out on crtc %i\n", pipe);
- drm_vblank_put(dev, pipe);
+ drm_vblank_crtc_put(vblank);
return ret ? 0 : -ETIMEDOUT;
}
@@ -1368,7 +1383,7 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
wake_up(&vblank->queue);
/*
- * Prevent subsequent drm_vblank_get() from re-enabling
+ * Prevent subsequent drm_vblank_crtc_get() from re-enabling
* the vblank interrupt by bumping the refcount.
*/
if (!vblank->inmodeset) {
@@ -1424,7 +1439,7 @@ void drm_crtc_vblank_reset(struct drm_crtc *crtc)
spin_lock_irq(&dev->vbl_lock);
/*
- * Prevent subsequent drm_vblank_get() from enabling the vblank
+ * Prevent subsequent drm_vblank_crtc_get() from enabling the vblank
* interrupt by bumping the refcount.
*/
if (!vblank->inmodeset) {
@@ -1497,7 +1512,7 @@ void drm_crtc_vblank_on_config(struct drm_crtc *crtc,
vblank->config = *config;
- /* Drop our private "prevent drm_vblank_get" refcount */
+ /* Drop our private "prevent drm_vblank_crtc_get" refcount */
if (vblank->inmodeset) {
atomic_dec(&vblank->refcount);
vblank->inmodeset = 0;
@@ -1639,9 +1654,9 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
/*
* drm_crtc_vblank_off() might have been called after we called
- * drm_vblank_get(). drm_crtc_vblank_off() holds event_lock around the
+ * drm_vblank_crtc_get(). drm_crtc_vblank_off() holds event_lock around the
* vblank disable, so no need for further locking. The reference from
- * drm_vblank_get() protects against vblank disable from another source.
+ * drm_vblank_crtc_get() protects against vblank disable from another source.
*/
if (!READ_ONCE(vblank->enabled)) {
ret = -EINVAL;
@@ -1667,7 +1682,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
send_vblank_event(dev, e, seq, now);
vblwait->reply.sequence = seq;
} else {
- /* drm_handle_vblank_events will call drm_vblank_put */
+ /* drm_handle_vblank_events will call drm_vblank_crtc_put */
list_add_tail(&e->base.link, &dev->vblank_event_list);
vblwait->reply.sequence = req_seq;
}
@@ -1830,7 +1845,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
if (flags & _DRM_VBLANK_EVENT) {
/* must hold on to the vblank ref until the event fires
- * drm_vblank_put will be called asynchronously
+ * drm_vblank_crtc_put will be called asynchronously
*/
return drm_queue_vblank_event(dev, pipe, req_seq, vblwait, file_priv);
}
@@ -2148,7 +2163,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
send_vblank_event(dev, e, seq, now);
queue_seq->sequence = seq;
} else {
- /* drm_handle_vblank_events will call drm_vblank_put */
+ /* drm_handle_vblank_events will call drm_vblank_crtc_put */
list_add_tail(&e->base.link, &dev->vblank_event_list);
queue_seq->sequence = req_seq;
}
diff --git a/drivers/gpu/drm/drm_vblank_work.c b/drivers/gpu/drm/drm_vblank_work.c
index 70f0199251ea..52158f85c855 100644
--- a/drivers/gpu/drm/drm_vblank_work.c
+++ b/drivers/gpu/drm/drm_vblank_work.c
@@ -58,7 +58,7 @@ void drm_handle_vblank_works(struct drm_vblank_crtc *vblank)
continue;
list_del_init(&work->node);
- drm_vblank_put(vblank->dev, vblank->pipe);
+ drm_vblank_crtc_put(vblank);
kthread_queue_work(vblank->worker, &work->base);
wake = true;
}
@@ -80,7 +80,7 @@ void drm_vblank_cancel_pending_works(struct drm_vblank_crtc *vblank)
list_for_each_entry_safe(work, next, &vblank->pending_work, node) {
list_del_init(&work->node);
- drm_vblank_put(vblank->dev, vblank->pipe);
+ drm_vblank_crtc_put(vblank);
}
wake_up_all(&vblank->work_wait_queue);
@@ -129,7 +129,7 @@ int drm_vblank_work_schedule(struct drm_vblank_work *work,
goto out;
if (list_empty(&work->node)) {
- ret = drm_vblank_get(dev, vblank->pipe);
+ ret = drm_vblank_crtc_get(vblank);
if (ret < 0)
goto out;
} else if (work->count == count) {
@@ -140,7 +140,7 @@ int drm_vblank_work_schedule(struct drm_vblank_work *work,
}
work->count = count;
- cur_vbl = drm_vblank_count(dev, vblank->pipe);
+ cur_vbl = drm_vblank_crtc_count(vblank);
passed = drm_vblank_passed(cur_vbl, count);
if (passed)
drm_dbg_core(dev,
@@ -148,7 +148,7 @@ int drm_vblank_work_schedule(struct drm_vblank_work *work,
vblank->pipe, count, cur_vbl);
if (!nextonmiss && passed) {
- drm_vblank_put(dev, vblank->pipe);
+ drm_vblank_crtc_put(vblank);
ret = kthread_queue_work(vblank->worker, &work->base);
if (rescheduling) {
@@ -193,7 +193,7 @@ bool drm_vblank_work_cancel_sync(struct drm_vblank_work *work)
spin_lock_irq(&dev->event_lock);
if (!list_empty(&work->node)) {
list_del_init(&work->node);
- drm_vblank_put(vblank->dev, vblank->pipe);
+ drm_vblank_crtc_put(vblank);
ret = true;
}
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 09/25] drm/vblank: pass vblank to drm_update_vblank_count()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (7 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 08/25] drm/vblank: pass vlank to drm_vblank_get()/_put()/_count() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 10/25] drm/vblank: pass vblank to drm_handle_vblank_events() Jani Nikula
` (18 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_update_count().
v2: Rename the function (Thomas)
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> # v1
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 32 +++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index aeb931c825ca..da8ca8928232 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -292,10 +292,11 @@ static void drm_reset_vblank_timestamp(struct drm_device *dev, unsigned int pipe
* Note: caller must hold &drm_device.vbl_lock since this reads & writes
* device vblank fields.
*/
-static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe,
- bool in_vblank_irq)
+static void drm_vblank_crtc_update_count(struct drm_vblank_crtc *vblank,
+ bool in_vblank_irq)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_device *dev = vblank->dev;
+ unsigned int pipe = vblank->pipe;
u32 cur_vblank, diff;
bool rc;
ktime_t t_vblank;
@@ -424,8 +425,8 @@ static u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
u64 drm_crtc_accurate_vblank_count(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
- unsigned int pipe = drm_crtc_index(crtc);
- u64 vblank;
+ struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
+ u64 vblank_count;
unsigned long flags;
drm_WARN_ONCE(dev, drm_debug_enabled(DRM_UT_VBL) &&
@@ -434,12 +435,12 @@ u64 drm_crtc_accurate_vblank_count(struct drm_crtc *crtc)
spin_lock_irqsave(&dev->vblank_time_lock, flags);
- drm_update_vblank_count(dev, pipe, false);
- vblank = drm_vblank_count(dev, pipe);
+ drm_vblank_crtc_update_count(vblank, false);
+ vblank_count = drm_vblank_crtc_count(vblank);
spin_unlock_irqrestore(&dev->vblank_time_lock, flags);
- return vblank;
+ return vblank_count;
}
EXPORT_SYMBOL(drm_crtc_accurate_vblank_count);
@@ -490,7 +491,7 @@ void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
* this time. This makes the count account for the entire time
* between drm_crtc_vblank_on() and drm_crtc_vblank_off().
*/
- drm_update_vblank_count(dev, pipe, false);
+ drm_vblank_crtc_update_count(vblank, false);
__disable_vblank(dev, pipe);
vblank->enabled = false;
@@ -1199,11 +1200,12 @@ static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe)
if (ret) {
atomic_dec(&vblank->refcount);
} else {
- drm_update_vblank_count(dev, pipe, 0);
- /* drm_update_vblank_count() includes a wmb so we just
- * need to ensure that the compiler emits the write
- * to mark the vblank as enabled after the call
- * to drm_update_vblank_count().
+ drm_vblank_crtc_update_count(vblank, 0);
+ /*
+ * drm_vblank_crtc_update_count() includes a wmb so we
+ * just need to ensure that the compiler emits the write
+ * to mark the vblank as enabled after the call to
+ * drm_vblank_crtc_update_count().
*/
WRITE_ONCE(vblank->enabled, true);
}
@@ -1959,7 +1961,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
return false;
}
- drm_update_vblank_count(dev, pipe, true);
+ drm_vblank_crtc_update_count(vblank, true);
spin_unlock(&dev->vblank_time_lock);
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 10/25] drm/vblank: pass vblank to drm_handle_vblank_events()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (8 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 09/25] drm/vblank: pass vblank to drm_update_vblank_count() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 11/25] drm/vblank: use the vblank based interfaces more Jani Nikula
` (17 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_handle_events().
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index da8ca8928232..49b59af1512e 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1684,7 +1684,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
send_vblank_event(dev, e, seq, now);
vblwait->reply.sequence = seq;
} else {
- /* drm_handle_vblank_events will call drm_vblank_crtc_put */
+ /* drm_vblank_crtc_handle_events will call drm_vblank_crtc_put */
list_add_tail(&e->base.link, &dev->vblank_event_list);
vblwait->reply.sequence = req_seq;
}
@@ -1892,8 +1892,10 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
return ret;
}
-static void drm_handle_vblank_events(struct drm_device *dev, unsigned int pipe)
+static void drm_vblank_crtc_handle_events(struct drm_vblank_crtc *vblank)
{
+ struct drm_device *dev = vblank->dev;
+ unsigned int pipe = vblank->pipe;
struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
bool high_prec = false;
struct drm_pending_vblank_event *e, *t;
@@ -1914,7 +1916,7 @@ static void drm_handle_vblank_events(struct drm_device *dev, unsigned int pipe)
e->sequence, seq);
list_del(&e->base.link);
- drm_vblank_put(dev, pipe);
+ drm_vblank_crtc_put(vblank);
send_vblank_event(dev, e, seq, now);
}
@@ -1970,13 +1972,13 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
/* With instant-off, we defer disabling the interrupt until after
* we finish processing the following vblank after all events have
* been signaled. The disable has to be last (after
- * drm_handle_vblank_events) so that the timestamp is always accurate.
+ * drm_vblank_crtc_handle_events) so that the timestamp is always accurate.
*/
disable_irq = (vblank->config.disable_immediate &&
vblank->config.offdelay_ms > 0 &&
!atomic_read(&vblank->refcount));
- drm_handle_vblank_events(dev, pipe);
+ drm_vblank_crtc_handle_events(vblank);
drm_handle_vblank_works(vblank);
spin_unlock_irqrestore(&dev->event_lock, irqflags);
@@ -2165,7 +2167,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
send_vblank_event(dev, e, seq, now);
queue_seq->sequence = seq;
} else {
- /* drm_handle_vblank_events will call drm_vblank_crtc_put */
+ /* drm_vblank_crtc_handle_events will call drm_vblank_crtc_put */
list_add_tail(&e->base.link, &dev->vblank_event_list);
queue_seq->sequence = req_seq;
}
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 11/25] drm/vblank: use the vblank based interfaces more
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (9 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 10/25] drm/vblank: pass vblank to drm_handle_vblank_events() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 12/25] drm/vblank: pass vblank to drm_queue_vblank_event() Jani Nikula
` (16 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
With the prep work in place, we can get rid of _drm_vblank_get(),
_drm_vblank_put(), and _drm_vblank_count().
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 44 ++++++++----------------------------
1 file changed, 10 insertions(+), 34 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 49b59af1512e..d0460cd5d345 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -403,14 +403,6 @@ u64 drm_vblank_crtc_count(struct drm_vblank_crtc *vblank)
return count;
}
-static u64 drm_vblank_count(struct drm_device *dev, unsigned int pipe)
-{
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return 0;
-
- return drm_vblank_crtc_count(drm_vblank_crtc(dev, pipe));
-}
-
/**
* drm_crtc_accurate_vblank_count - retrieve the master vblank counter
* @crtc: which counter to retrieve
@@ -942,7 +934,7 @@ drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
*/
u64 drm_crtc_vblank_count(struct drm_crtc *crtc)
{
- return drm_vblank_count(crtc->dev, drm_crtc_index(crtc));
+ return drm_vblank_crtc_count(drm_crtc_vblank_crtc(crtc));
}
EXPORT_SYMBOL(drm_crtc_vblank_count);
@@ -1241,14 +1233,6 @@ int drm_vblank_crtc_get(struct drm_vblank_crtc *vblank)
return ret;
}
-static int drm_vblank_get(struct drm_device *dev, unsigned int pipe)
-{
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return -EINVAL;
-
- return drm_vblank_crtc_get(drm_vblank_crtc(dev, pipe));
-}
-
/**
* drm_crtc_vblank_get - get a reference count on vblank events
* @crtc: which CRTC to own
@@ -1261,7 +1245,7 @@ static int drm_vblank_get(struct drm_device *dev, unsigned int pipe)
*/
int drm_crtc_vblank_get(struct drm_crtc *crtc)
{
- return drm_vblank_get(crtc->dev, drm_crtc_index(crtc));
+ return drm_vblank_crtc_get(drm_crtc_vblank_crtc(crtc));
}
EXPORT_SYMBOL(drm_crtc_vblank_get);
@@ -1285,14 +1269,6 @@ void drm_vblank_crtc_put(struct drm_vblank_crtc *vblank)
}
}
-static void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
-{
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return;
-
- drm_vblank_crtc_put(drm_vblank_crtc(dev, pipe));
-}
-
/**
* drm_crtc_vblank_put - give up ownership of vblank events
* @crtc: which counter to give up
@@ -1303,7 +1279,7 @@ static void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
*/
void drm_crtc_vblank_put(struct drm_crtc *crtc)
{
- drm_vblank_put(crtc->dev, drm_crtc_index(crtc));
+ drm_vblank_crtc_put(drm_crtc_vblank_crtc(crtc));
}
EXPORT_SYMBOL(drm_crtc_vblank_put);
@@ -1404,7 +1380,7 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
"wanted %llu, current %llu\n",
e->sequence, seq);
list_del(&e->base.link);
- drm_vblank_put(dev, pipe);
+ drm_vblank_crtc_put(vblank);
send_vblank_event(dev, e, seq, now);
}
@@ -1680,7 +1656,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
e->sequence = req_seq;
if (drm_vblank_passed(seq, req_seq)) {
- drm_vblank_put(dev, pipe);
+ drm_vblank_crtc_put(vblank);
send_vblank_event(dev, e, seq, now);
vblwait->reply.sequence = seq;
} else {
@@ -1697,7 +1673,7 @@ static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
spin_unlock_irq(&dev->event_lock);
kfree(e);
err_put:
- drm_vblank_put(dev, pipe);
+ drm_vblank_crtc_put(vblank);
return ret;
}
@@ -1815,14 +1791,14 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
return 0;
}
- ret = drm_vblank_get(dev, pipe);
+ ret = drm_vblank_crtc_get(vblank);
if (ret) {
drm_dbg_core(dev,
"crtc %d failed to acquire vblank counter, %d\n",
pipe, ret);
return ret;
}
- seq = drm_vblank_count(dev, pipe);
+ seq = drm_vblank_crtc_count(vblank);
switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) {
case _DRM_VBLANK_RELATIVE:
@@ -1858,7 +1834,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
drm_dbg_core(dev, "waiting on vblank count %llu, crtc %u\n",
req_seq, pipe);
wait = wait_event_interruptible_timeout(vblank->queue,
- drm_vblank_passed(drm_vblank_count(dev, pipe), req_seq) ||
+ drm_vblank_passed(drm_vblank_crtc_count(vblank), req_seq) ||
!READ_ONCE(vblank->enabled),
msecs_to_jiffies(3000));
@@ -1888,7 +1864,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
}
done:
- drm_vblank_put(dev, pipe);
+ drm_vblank_crtc_put(vblank);
return ret;
}
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 12/25] drm/vblank: pass vblank to drm_queue_vblank_event()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (10 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 11/25] drm/vblank: use the vblank based interfaces more Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 13/25] drm/vblank: pass vblank to drm_wait_vblank_reply() Jani Nikula
` (15 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_queue_event().
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index d0460cd5d345..6be354415529 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1599,12 +1599,13 @@ void drm_crtc_vblank_restore(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_vblank_restore);
-static int drm_queue_vblank_event(struct drm_device *dev, unsigned int pipe,
- u64 req_seq,
- union drm_wait_vblank *vblwait,
- struct drm_file *file_priv)
+static int drm_vblank_crtc_queue_event(struct drm_vblank_crtc *vblank,
+ u64 req_seq,
+ union drm_wait_vblank *vblwait,
+ struct drm_file *file_priv)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_device *dev = vblank->dev;
+ unsigned int pipe = vblank->pipe;
struct drm_pending_vblank_event *e;
ktime_t now;
u64 seq;
@@ -1825,7 +1826,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
/* must hold on to the vblank ref until the event fires
* drm_vblank_crtc_put will be called asynchronously
*/
- return drm_queue_vblank_event(dev, pipe, req_seq, vblwait, file_priv);
+ return drm_vblank_crtc_queue_event(vblank, req_seq, vblwait, file_priv);
}
if (req_seq != seq) {
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 13/25] drm/vblank: pass vblank to drm_wait_vblank_reply()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (11 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 12/25] drm/vblank: pass vblank to drm_queue_vblank_event() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 14/25] drm/vblank: pass vblank to drm_vblank_count_and_time() Jani Nikula
` (14 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_wait_reply().
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 6be354415529..233c60860c78 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1705,18 +1705,18 @@ static u64 widen_32_to_64(u32 narrow, u64 near)
return near + (s32) (narrow - near);
}
-static void drm_wait_vblank_reply(struct drm_device *dev, unsigned int pipe,
- struct drm_wait_vblank_reply *reply)
+static void drm_vblank_crtc_wait_reply(struct drm_vblank_crtc *vblank,
+ struct drm_wait_vblank_reply *reply)
{
ktime_t now;
struct timespec64 ts;
/*
- * drm_wait_vblank_reply is a UAPI structure that uses 'long'
+ * drm_vblank_crtc_wait_reply is a UAPI structure that uses 'long'
* to store the seconds. This is safe as we always use monotonic
* timestamps since linux-4.15.
*/
- reply->sequence = drm_vblank_count_and_time(dev, pipe, &now);
+ reply->sequence = drm_vblank_count_and_time(vblank->dev, vblank->pipe, &now);
ts = ktime_to_timespec64(now);
reply->tval_sec = (u32)ts.tv_sec;
reply->tval_usec = ts.tv_nsec / 1000;
@@ -1788,7 +1788,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
if (vblank->config.disable_immediate &&
drm_wait_vblank_is_query(vblwait) &&
READ_ONCE(vblank->enabled)) {
- drm_wait_vblank_reply(dev, pipe, &vblwait->reply);
+ drm_vblank_crtc_wait_reply(vblank, &vblwait->reply);
return 0;
}
@@ -1855,7 +1855,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
}
if (ret != -EINTR) {
- drm_wait_vblank_reply(dev, pipe, &vblwait->reply);
+ drm_vblank_crtc_wait_reply(vblank, &vblwait->reply);
drm_dbg_core(dev, "crtc %d returning %u to client\n",
pipe, vblwait->reply.sequence);
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 14/25] drm/vblank: pass vblank to drm_vblank_count_and_time()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (12 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 13/25] drm/vblank: pass vblank to drm_wait_vblank_reply() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-05 5:18 ` kernel test robot
2025-12-04 10:57 ` [PATCH v2 15/25] drm/vblank: pass vblank to drm_reset_vblank_timestamp() Jani Nikula
` (13 subsequent siblings)
27 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_count_and_time().
Drop the pipe check warning, as we can be sure vblank->pipe is within
limits.
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 38 +++++++++++++++---------------------
1 file changed, 16 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 233c60860c78..5182dfc7b930 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -395,8 +395,8 @@ u64 drm_vblank_crtc_count(struct drm_vblank_crtc *vblank)
* This read barrier corresponds to the implicit write barrier of the
* write seqlock in store_vblank(). Note that this is the only place
* where we need an explicit barrier, since all other access goes
- * through drm_vblank_count_and_time(), which already has the required
- * read barrier curtesy of the read seqlock.
+ * through drm_vblank_crtc_count_and_time(), which already has the
+ * required read barrier curtesy of the read seqlock.
*/
smp_rmb();
@@ -939,7 +939,7 @@ u64 drm_crtc_vblank_count(struct drm_crtc *crtc)
EXPORT_SYMBOL(drm_crtc_vblank_count);
/**
- * drm_vblank_count_and_time - retrieve "cooked" vblank counter value and the
+ * drm_vblank_crtc_count_and_time - retrieve "cooked" vblank counter value and the
* system timestamp corresponding to that vblank counter value.
* @dev: DRM device
* @pipe: index of CRTC whose counter to retrieve
@@ -952,18 +952,12 @@ EXPORT_SYMBOL(drm_crtc_vblank_count);
*
* This is the legacy version of drm_crtc_vblank_count_and_time().
*/
-static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
- ktime_t *vblanktime)
+static u64 drm_vblank_crtc_count_and_time(struct drm_vblank_crtc *vblank,
+ ktime_t *vblanktime)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
u64 vblank_count;
unsigned int seq;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs)) {
- *vblanktime = 0;
- return 0;
- }
-
do {
seq = read_seqbegin(&vblank->seqlock);
vblank_count = atomic64_read(&vblank->count);
@@ -995,8 +989,8 @@ static u64 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe,
u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc,
ktime_t *vblanktime)
{
- return drm_vblank_count_and_time(crtc->dev, drm_crtc_index(crtc),
- vblanktime);
+ return drm_vblank_crtc_count_and_time(drm_crtc_vblank_crtc(crtc),
+ vblanktime);
}
EXPORT_SYMBOL(drm_crtc_vblank_count_and_time);
@@ -1138,18 +1132,18 @@ void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
struct drm_pending_vblank_event *e)
{
struct drm_device *dev = crtc->dev;
+ struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
u64 seq;
- unsigned int pipe = drm_crtc_index(crtc);
ktime_t now;
if (drm_dev_has_vblank(dev)) {
- seq = drm_vblank_count_and_time(dev, pipe, &now);
+ seq = drm_vblank_crtc_count_and_time(vblank, &now);
} else {
seq = 0;
now = ktime_get();
}
- e->pipe = pipe;
+ e->pipe = vblank->pipe;
send_vblank_event(dev, e, seq, now);
}
EXPORT_SYMBOL(drm_crtc_send_vblank_event);
@@ -1371,7 +1365,7 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
spin_unlock(&dev->vbl_lock);
/* Send any queued vblank events, lest the natives grow disquiet */
- seq = drm_vblank_count_and_time(dev, pipe, &now);
+ seq = drm_vblank_crtc_count_and_time(vblank, &now);
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
if (e->pipe != pipe)
@@ -1648,7 +1642,7 @@ static int drm_vblank_crtc_queue_event(struct drm_vblank_crtc *vblank,
if (ret)
goto err_unlock;
- seq = drm_vblank_count_and_time(dev, pipe, &now);
+ seq = drm_vblank_crtc_count_and_time(vblank, &now);
drm_dbg_core(dev, "event on vblank count %llu, current %llu, crtc %u\n",
req_seq, seq, pipe);
@@ -1716,7 +1710,7 @@ static void drm_vblank_crtc_wait_reply(struct drm_vblank_crtc *vblank,
* to store the seconds. This is safe as we always use monotonic
* timestamps since linux-4.15.
*/
- reply->sequence = drm_vblank_count_and_time(vblank->dev, vblank->pipe, &now);
+ reply->sequence = drm_vblank_crtc_count_and_time(vblank, &now);
ts = ktime_to_timespec64(now);
reply->tval_sec = (u32)ts.tv_sec;
reply->tval_usec = ts.tv_nsec / 1000;
@@ -1881,7 +1875,7 @@ static void drm_vblank_crtc_handle_events(struct drm_vblank_crtc *vblank)
assert_spin_locked(&dev->event_lock);
- seq = drm_vblank_count_and_time(dev, pipe, &now);
+ seq = drm_vblank_crtc_count_and_time(vblank, &now);
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
if (e->pipe != pipe)
@@ -2043,7 +2037,7 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
else
get_seq->active = crtc->enabled;
drm_modeset_unlock(&crtc->mutex);
- get_seq->sequence = drm_vblank_count_and_time(dev, pipe, &now);
+ get_seq->sequence = drm_vblank_crtc_count_and_time(vblank, &now);
get_seq->sequence_ns = ktime_to_ns(now);
if (!vblank_enabled)
drm_crtc_vblank_put(crtc);
@@ -2104,7 +2098,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
goto err_free;
}
- seq = drm_vblank_count_and_time(dev, pipe, &now);
+ seq = drm_vblank_crtc_count_and_time(vblank, &now);
req_seq = queue_seq->sequence;
if (flags & DRM_CRTC_SEQUENCE_RELATIVE)
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 15/25] drm/vblank: pass vblank to drm_reset_vblank_timestamp()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (13 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 14/25] drm/vblank: pass vblank to drm_vblank_count_and_time() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 16/25] drm/vblank: pass vblank to store_vblank() Jani Nikula
` (12 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_reset_timestamp().
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 5182dfc7b930..ed4a589c408f 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -245,8 +245,10 @@ static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe)
* Note: caller must hold &drm_device.vbl_lock since this reads & writes
* device vblank fields.
*/
-static void drm_reset_vblank_timestamp(struct drm_device *dev, unsigned int pipe)
+static void drm_vblank_crtc_reset_timestamp(struct drm_vblank_crtc *vblank)
{
+ struct drm_device *dev = vblank->dev;
+ unsigned int pipe = vblank->pipe;
u32 cur_vblank;
bool rc;
ktime_t t_vblank;
@@ -1490,7 +1492,7 @@ void drm_crtc_vblank_on_config(struct drm_crtc *crtc,
vblank->inmodeset = 0;
}
- drm_reset_vblank_timestamp(dev, pipe);
+ drm_vblank_crtc_reset_timestamp(vblank);
/*
* re-enable interrupts if there are users left, or the
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 16/25] drm/vblank: pass vblank to store_vblank()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (14 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 15/25] drm/vblank: pass vblank to drm_reset_vblank_timestamp() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 17/25] drm/vblank: pass vblank to drm_vblank_enable() Jani Nikula
` (11 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_store().
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index ed4a589c408f..81224946df9d 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -188,11 +188,11 @@ drm_crtc_vblank_crtc(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_vblank_crtc);
-static void store_vblank(struct drm_device *dev, unsigned int pipe,
- u32 vblank_count_inc,
- ktime_t t_vblank, u32 last)
+static void drm_vblank_crtc_store(struct drm_vblank_crtc *vblank,
+ u32 vblank_count_inc,
+ ktime_t t_vblank, u32 last)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_device *dev = vblank->dev;
assert_spin_locked(&dev->vblank_time_lock);
@@ -277,7 +277,7 @@ static void drm_vblank_crtc_reset_timestamp(struct drm_vblank_crtc *vblank)
* +1 to make sure user will never see the same
* vblank counter value before and after a modeset
*/
- store_vblank(dev, pipe, 1, t_vblank, cur_vblank);
+ drm_vblank_crtc_store(vblank, 1, t_vblank, cur_vblank);
spin_unlock(&dev->vblank_time_lock);
}
@@ -384,7 +384,7 @@ static void drm_vblank_crtc_update_count(struct drm_vblank_crtc *vblank,
if (!rc && !in_vblank_irq)
t_vblank = 0;
- store_vblank(dev, pipe, diff, t_vblank, cur_vblank);
+ drm_vblank_crtc_store(vblank, diff, t_vblank, cur_vblank);
}
u64 drm_vblank_crtc_count(struct drm_vblank_crtc *vblank)
@@ -395,8 +395,8 @@ u64 drm_vblank_crtc_count(struct drm_vblank_crtc *vblank)
/*
* This read barrier corresponds to the implicit write barrier of the
- * write seqlock in store_vblank(). Note that this is the only place
- * where we need an explicit barrier, since all other access goes
+ * write seqlock in drm_vblank_crtc_store(). Note that this is the only
+ * place where we need an explicit barrier, since all other access goes
* through drm_vblank_crtc_count_and_time(), which already has the
* required read barrier curtesy of the read seqlock.
*/
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 17/25] drm/vblank: pass vblank to drm_vblank_enable()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (15 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 16/25] drm/vblank: pass vblank to store_vblank() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 18/25] drm/vblank: merge drm_vblank_restore() into drm_crtc_vblank_restore() Jani Nikula
` (10 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify code.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 81224946df9d..e4c8af7fb5db 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1165,9 +1165,10 @@ static int __enable_vblank(struct drm_device *dev, unsigned int pipe)
return -EINVAL;
}
-static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe)
+static int drm_vblank_enable(struct drm_vblank_crtc *vblank)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_device *dev = vblank->dev;
+ unsigned int pipe = vblank->pipe;
int ret = 0;
assert_spin_locked(&dev->vbl_lock);
@@ -1207,7 +1208,6 @@ static int drm_vblank_enable(struct drm_device *dev, unsigned int pipe)
int drm_vblank_crtc_get(struct drm_vblank_crtc *vblank)
{
struct drm_device *dev = vblank->dev;
- int pipe = vblank->pipe;
unsigned long irqflags;
int ret = 0;
@@ -1217,7 +1217,7 @@ int drm_vblank_crtc_get(struct drm_vblank_crtc *vblank)
spin_lock_irqsave(&dev->vbl_lock, irqflags);
/* Going from 0->1 means we have to enable interrupts again */
if (atomic_add_return(1, &vblank->refcount) == 1) {
- ret = drm_vblank_enable(dev, pipe);
+ ret = drm_vblank_enable(vblank);
} else {
if (!vblank->enabled) {
atomic_dec(&vblank->refcount);
@@ -1499,7 +1499,7 @@ void drm_crtc_vblank_on_config(struct drm_crtc *crtc,
* user wishes vblank interrupts to be enabled all the time.
*/
if (atomic_read(&vblank->refcount) != 0 || !vblank->config.offdelay_ms)
- drm_WARN_ON(dev, drm_vblank_enable(dev, pipe));
+ drm_WARN_ON(dev, drm_vblank_enable(vblank));
spin_unlock_irq(&dev->vbl_lock);
}
EXPORT_SYMBOL(drm_crtc_vblank_on_config);
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 18/25] drm/vblank: merge drm_vblank_restore() into drm_crtc_vblank_restore()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (16 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 17/25] drm/vblank: pass vblank to drm_vblank_enable() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 19/25] drm/vblank: add drm_crtc_from_vblank() helper Jani Nikula
` (9 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
The extra function serves no useful purpose.
This allows us to drop another superfluous pipe check warning.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 57 +++++++++++++++---------------------
1 file changed, 23 insertions(+), 34 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index e4c8af7fb5db..ad44fea4ff67 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -1527,23 +1527,41 @@ void drm_crtc_vblank_on(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_vblank_on);
-static void drm_vblank_restore(struct drm_device *dev, unsigned int pipe)
+/**
+ * drm_crtc_vblank_restore - estimate missed vblanks and update vblank count.
+ * @crtc: CRTC in question
+ *
+ * Power manamement features can cause frame counter resets between vblank
+ * disable and enable. Drivers can use this function in their
+ * &drm_crtc_funcs.enable_vblank implementation to estimate missed vblanks since
+ * the last &drm_crtc_funcs.disable_vblank using timestamps and update the
+ * vblank counter.
+ *
+ * Note that drivers must have race-free high-precision timestamping support,
+ * i.e. &drm_crtc_funcs.get_vblank_timestamp must be hooked up and
+ * &drm_vblank_crtc_config.disable_immediate must be set to indicate the
+ * time-stamping functions are race-free against vblank hardware counter
+ * increments.
+ */
+void drm_crtc_vblank_restore(struct drm_crtc *crtc)
{
+ struct drm_device *dev = crtc->dev;
+ unsigned int pipe = drm_crtc_index(crtc);
+ struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
ktime_t t_vblank;
- struct drm_vblank_crtc *vblank;
int framedur_ns;
u64 diff_ns;
u32 cur_vblank, diff = 1;
int count = DRM_TIMESTAMP_MAXRETRIES;
u32 max_vblank_count = drm_max_vblank_count(dev, pipe);
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return;
+ drm_WARN_ON_ONCE(dev, !crtc->funcs->get_vblank_timestamp);
+ drm_WARN_ON_ONCE(dev, vblank->inmodeset);
+ drm_WARN_ON_ONCE(dev, !vblank->config.disable_immediate);
assert_spin_locked(&dev->vbl_lock);
assert_spin_locked(&dev->vblank_time_lock);
- vblank = drm_vblank_crtc(dev, pipe);
drm_WARN_ONCE(dev,
drm_debug_enabled(DRM_UT_VBL) && !vblank->framedur_ns,
"Cannot compute missed vblanks without frame duration\n");
@@ -1564,35 +1582,6 @@ static void drm_vblank_restore(struct drm_device *dev, unsigned int pipe)
diff, diff_ns, framedur_ns, cur_vblank - vblank->last);
vblank->last = (cur_vblank - diff) & max_vblank_count;
}
-
-/**
- * drm_crtc_vblank_restore - estimate missed vblanks and update vblank count.
- * @crtc: CRTC in question
- *
- * Power manamement features can cause frame counter resets between vblank
- * disable and enable. Drivers can use this function in their
- * &drm_crtc_funcs.enable_vblank implementation to estimate missed vblanks since
- * the last &drm_crtc_funcs.disable_vblank using timestamps and update the
- * vblank counter.
- *
- * Note that drivers must have race-free high-precision timestamping support,
- * i.e. &drm_crtc_funcs.get_vblank_timestamp must be hooked up and
- * &drm_vblank_crtc_config.disable_immediate must be set to indicate the
- * time-stamping functions are race-free against vblank hardware counter
- * increments.
- */
-void drm_crtc_vblank_restore(struct drm_crtc *crtc)
-{
- struct drm_device *dev = crtc->dev;
- unsigned int pipe = drm_crtc_index(crtc);
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
-
- drm_WARN_ON_ONCE(dev, !crtc->funcs->get_vblank_timestamp);
- drm_WARN_ON_ONCE(dev, vblank->inmodeset);
- drm_WARN_ON_ONCE(dev, !vblank->config.disable_immediate);
-
- drm_vblank_restore(dev, pipe);
-}
EXPORT_SYMBOL(drm_crtc_vblank_restore);
static int drm_vblank_crtc_queue_event(struct drm_vblank_crtc *vblank,
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 19/25] drm/vblank: add drm_crtc_from_vblank() helper
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (17 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 18/25] drm/vblank: merge drm_vblank_restore() into drm_crtc_vblank_restore() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 20/25] drm/vblank: pass vblank to __get_vblank_counter() and drm_max_vblank_count() Jani Nikula
` (8 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
We have a handful of places where we need to get the crtc from the
vblank. Add a small helper for it.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index ad44fea4ff67..d43165ee594a 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -188,6 +188,11 @@ drm_crtc_vblank_crtc(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_vblank_crtc);
+static struct drm_crtc *drm_crtc_from_vblank(struct drm_vblank_crtc *vblank)
+{
+ return drm_crtc_from_index(vblank->dev, vblank->pipe);
+}
+
static void drm_vblank_crtc_store(struct drm_vblank_crtc *vblank,
u32 vblank_count_inc,
ktime_t t_vblank, u32 last)
@@ -1608,7 +1613,7 @@ static int drm_vblank_crtc_queue_event(struct drm_vblank_crtc *vblank,
e->event.vbl.user_data = vblwait->request.signal;
e->event.vbl.crtc_id = 0;
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
- struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
+ struct drm_crtc *crtc = drm_crtc_from_vblank(vblank);
if (crtc)
e->event.vbl.crtc_id = crtc->base.id;
@@ -1858,7 +1863,7 @@ static void drm_vblank_crtc_handle_events(struct drm_vblank_crtc *vblank)
{
struct drm_device *dev = vblank->dev;
unsigned int pipe = vblank->pipe;
- struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
+ struct drm_crtc *crtc = drm_crtc_from_vblank(vblank);
bool high_prec = false;
struct drm_pending_vblank_event *e, *t;
ktime_t now;
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 20/25] drm/vblank: pass vblank to __get_vblank_counter() and drm_max_vblank_count()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (18 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 19/25] drm/vblank: add drm_crtc_from_vblank() helper Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 21/25] drm/vblank: pass vblank to __{enable, disable}_vblank() Jani Nikula
` (7 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename the functions to drm_vblank_crtc_get_counter() and
drm_vblank_crtc_max_count().
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index d43165ee594a..04c75cdbb916 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -209,27 +209,27 @@ static void drm_vblank_crtc_store(struct drm_vblank_crtc *vblank,
write_sequnlock(&vblank->seqlock);
}
-static u32 drm_max_vblank_count(struct drm_device *dev, unsigned int pipe)
+static u32 drm_vblank_crtc_max_count(struct drm_vblank_crtc *vblank)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
-
- return vblank->max_vblank_count ?: dev->max_vblank_count;
+ return vblank->max_vblank_count ?: vblank->dev->max_vblank_count;
}
/*
* "No hw counter" fallback implementation of .get_vblank_counter() hook,
* if there is no usable hardware frame counter available.
*/
-static u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe)
+static u32 drm_vblank_crtc_no_hw_counter(struct drm_vblank_crtc *vblank)
{
- drm_WARN_ON_ONCE(dev, drm_max_vblank_count(dev, pipe) != 0);
+ drm_WARN_ON_ONCE(vblank->dev, drm_vblank_crtc_max_count(vblank) != 0);
return 0;
}
-static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe)
+static u32 drm_vblank_crtc_get_counter(struct drm_vblank_crtc *vblank)
{
+ struct drm_device *dev = vblank->dev;
+
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
- struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
+ struct drm_crtc *crtc = drm_crtc_from_vblank(vblank);
if (drm_WARN_ON(dev, !crtc))
return 0;
@@ -238,7 +238,7 @@ static u32 __get_vblank_counter(struct drm_device *dev, unsigned int pipe)
return crtc->funcs->get_vblank_counter(crtc);
}
- return drm_vblank_no_hw_counter(dev, pipe);
+ return drm_vblank_crtc_no_hw_counter(vblank);
}
/*
@@ -266,9 +266,9 @@ static void drm_vblank_crtc_reset_timestamp(struct drm_vblank_crtc *vblank)
* when drm_vblank_enable() applies the diff
*/
do {
- cur_vblank = __get_vblank_counter(dev, pipe);
+ cur_vblank = drm_vblank_crtc_get_counter(vblank);
rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false);
- } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0);
+ } while (cur_vblank != drm_vblank_crtc_get_counter(vblank) && --count > 0);
/*
* Only reinitialize corresponding vblank timestamp if high-precision query
@@ -309,7 +309,7 @@ static void drm_vblank_crtc_update_count(struct drm_vblank_crtc *vblank,
ktime_t t_vblank;
int count = DRM_TIMESTAMP_MAXRETRIES;
int framedur_ns = vblank->framedur_ns;
- u32 max_vblank_count = drm_max_vblank_count(dev, pipe);
+ u32 max_vblank_count = drm_vblank_crtc_max_count(vblank);
/*
* Interrupts were disabled prior to this call, so deal with counter
@@ -324,9 +324,9 @@ static void drm_vblank_crtc_update_count(struct drm_vblank_crtc *vblank,
* corresponding vblank timestamp.
*/
do {
- cur_vblank = __get_vblank_counter(dev, pipe);
+ cur_vblank = drm_vblank_crtc_get_counter(vblank);
rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, in_vblank_irq);
- } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0);
+ } while (cur_vblank != drm_vblank_crtc_get_counter(vblank) && --count > 0);
if (max_vblank_count) {
/* trust the hw counter when it's around */
@@ -1558,7 +1558,7 @@ void drm_crtc_vblank_restore(struct drm_crtc *crtc)
u64 diff_ns;
u32 cur_vblank, diff = 1;
int count = DRM_TIMESTAMP_MAXRETRIES;
- u32 max_vblank_count = drm_max_vblank_count(dev, pipe);
+ u32 max_vblank_count = drm_vblank_crtc_max_count(vblank);
drm_WARN_ON_ONCE(dev, !crtc->funcs->get_vblank_timestamp);
drm_WARN_ON_ONCE(dev, vblank->inmodeset);
@@ -1573,9 +1573,9 @@ void drm_crtc_vblank_restore(struct drm_crtc *crtc)
framedur_ns = vblank->framedur_ns;
do {
- cur_vblank = __get_vblank_counter(dev, pipe);
+ cur_vblank = drm_vblank_crtc_get_counter(vblank);
drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false);
- } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0);
+ } while (cur_vblank != drm_vblank_crtc_get_counter(vblank) && --count > 0);
diff_ns = ktime_to_ns(ktime_sub(t_vblank, vblank->time));
if (framedur_ns)
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 21/25] drm/vblank: pass vblank to __{enable, disable}_vblank()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (19 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 20/25] drm/vblank: pass vblank to __get_vblank_counter() and drm_max_vblank_count() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 22/25] drm/vblank: pass vblank to drm_get_last_vbltimestamp() Jani Nikula
` (6 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify code.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 04c75cdbb916..52fa4ca361e3 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -443,10 +443,12 @@ u64 drm_crtc_accurate_vblank_count(struct drm_crtc *crtc)
}
EXPORT_SYMBOL(drm_crtc_accurate_vblank_count);
-static void __disable_vblank(struct drm_device *dev, unsigned int pipe)
+static void __disable_vblank(struct drm_vblank_crtc *vblank)
{
+ struct drm_device *dev = vblank->dev;
+
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
- struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
+ struct drm_crtc *crtc = drm_crtc_from_vblank(vblank);
if (drm_WARN_ON(dev, !crtc))
return;
@@ -491,7 +493,7 @@ void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
* between drm_crtc_vblank_on() and drm_crtc_vblank_off().
*/
drm_vblank_crtc_update_count(vblank, false);
- __disable_vblank(dev, pipe);
+ __disable_vblank(vblank);
vblank->enabled = false;
out:
@@ -1155,10 +1157,12 @@ void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
}
EXPORT_SYMBOL(drm_crtc_send_vblank_event);
-static int __enable_vblank(struct drm_device *dev, unsigned int pipe)
+static int __enable_vblank(struct drm_vblank_crtc *vblank)
{
+ struct drm_device *dev = vblank->dev;
+
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
- struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
+ struct drm_crtc *crtc = drm_crtc_from_vblank(vblank);
if (drm_WARN_ON(dev, !crtc))
return 0;
@@ -1188,7 +1192,7 @@ static int drm_vblank_enable(struct drm_vblank_crtc *vblank)
* timestamps. Filtercode in drm_handle_vblank() will
* prevent double-accounting of same vblank interval.
*/
- ret = __enable_vblank(dev, pipe);
+ ret = __enable_vblank(vblank);
drm_dbg_core(dev, "enabling vblank on crtc %u, ret: %d\n",
pipe, ret);
if (ret) {
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 22/25] drm/vblank: pass vblank to drm_get_last_vbltimestamp()
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (20 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 21/25] drm/vblank: pass vblank to __{enable, disable}_vblank() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 23/25] drm/vblank: pass vblank to drm_vblank_disable_and_save(), make static Jani Nikula
` (5 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_get_last_timestamp().
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 52fa4ca361e3..4a88cdea086d 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -162,9 +162,8 @@
*/
#define DRM_REDUNDANT_VBLIRQ_THRESH_NS 1000000
-static bool
-drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
- ktime_t *tvblank, bool in_vblank_irq);
+static bool drm_vblank_crtc_get_last_timestamp(struct drm_vblank_crtc *vblank,
+ ktime_t *tvblank, bool in_vblank_irq);
static unsigned int drm_timestamp_precision = 20; /* Default to 20 usecs. */
@@ -253,7 +252,6 @@ static u32 drm_vblank_crtc_get_counter(struct drm_vblank_crtc *vblank)
static void drm_vblank_crtc_reset_timestamp(struct drm_vblank_crtc *vblank)
{
struct drm_device *dev = vblank->dev;
- unsigned int pipe = vblank->pipe;
u32 cur_vblank;
bool rc;
ktime_t t_vblank;
@@ -267,7 +265,7 @@ static void drm_vblank_crtc_reset_timestamp(struct drm_vblank_crtc *vblank)
*/
do {
cur_vblank = drm_vblank_crtc_get_counter(vblank);
- rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false);
+ rc = drm_vblank_crtc_get_last_timestamp(vblank, &t_vblank, false);
} while (cur_vblank != drm_vblank_crtc_get_counter(vblank) && --count > 0);
/*
@@ -325,7 +323,7 @@ static void drm_vblank_crtc_update_count(struct drm_vblank_crtc *vblank,
*/
do {
cur_vblank = drm_vblank_crtc_get_counter(vblank);
- rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, in_vblank_irq);
+ rc = drm_vblank_crtc_get_last_timestamp(vblank, &t_vblank, in_vblank_irq);
} while (cur_vblank != drm_vblank_crtc_get_counter(vblank) && --count > 0);
if (max_vblank_count) {
@@ -911,11 +909,10 @@ drm_crtc_get_last_vbltimestamp(struct drm_crtc *crtc, ktime_t *tvblank,
return ret;
}
-static bool
-drm_get_last_vbltimestamp(struct drm_device *dev, unsigned int pipe,
- ktime_t *tvblank, bool in_vblank_irq)
+static bool drm_vblank_crtc_get_last_timestamp(struct drm_vblank_crtc *vblank,
+ ktime_t *tvblank, bool in_vblank_irq)
{
- struct drm_crtc *crtc = drm_crtc_from_index(dev, pipe);
+ struct drm_crtc *crtc = drm_crtc_from_vblank(vblank);
return drm_crtc_get_last_vbltimestamp(crtc, tvblank, in_vblank_irq);
}
@@ -1555,7 +1552,6 @@ EXPORT_SYMBOL(drm_crtc_vblank_on);
void drm_crtc_vblank_restore(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
- unsigned int pipe = drm_crtc_index(crtc);
struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
ktime_t t_vblank;
int framedur_ns;
@@ -1578,7 +1574,7 @@ void drm_crtc_vblank_restore(struct drm_crtc *crtc)
do {
cur_vblank = drm_vblank_crtc_get_counter(vblank);
- drm_get_last_vbltimestamp(dev, pipe, &t_vblank, false);
+ drm_vblank_crtc_get_last_timestamp(vblank, &t_vblank, false);
} while (cur_vblank != drm_vblank_crtc_get_counter(vblank) && --count > 0);
diff_ns = ktime_to_ns(ktime_sub(t_vblank, vblank->time));
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 23/25] drm/vblank: pass vblank to drm_vblank_disable_and_save(), make static
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (21 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 22/25] drm/vblank: pass vblank to drm_get_last_vbltimestamp() Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 24/25] drm/vblank: reduce pipe checks Jani Nikula
` (4 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the vblank pointer instead of a dev, pipe pair to simplify
code. Rename to drm_vblank_crtc_disable_and_save().
drm_vblank_disable_and_save() is also no longer used outside of
drm_vblank.c; make it static while at it.
v2: Rename (Thomas)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_internal.h | 1 -
drivers/gpu/drm/drm_vblank.c | 8 ++++----
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
index 6e7ac5b16d92..4458221685f7 100644
--- a/drivers/gpu/drm/drm_internal.h
+++ b/drivers/gpu/drm/drm_internal.h
@@ -111,7 +111,6 @@ static inline bool drm_vblank_passed(u64 seq, u64 ref)
return (seq - ref) <= (1 << 23);
}
-void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe);
int drm_vblank_crtc_get(struct drm_vblank_crtc *vblank);
void drm_vblank_crtc_put(struct drm_vblank_crtc *vblank);
u64 drm_vblank_crtc_count(struct drm_vblank_crtc *vblank);
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 4a88cdea086d..445b62b8b661 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -462,9 +462,9 @@ static void __disable_vblank(struct drm_vblank_crtc *vblank)
* are preserved, even if there are any spurious vblank irq's after
* disable.
*/
-void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
+static void drm_vblank_crtc_disable_and_save(struct drm_vblank_crtc *vblank)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_device *dev = vblank->dev;
unsigned long irqflags;
assert_spin_locked(&dev->vbl_lock);
@@ -509,7 +509,7 @@ static void vblank_disable_fn(struct timer_list *t)
spin_lock_irqsave(&dev->vbl_lock, irqflags);
if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
drm_dbg_core(dev, "disabling vblank on crtc %u\n", pipe);
- drm_vblank_disable_and_save(dev, pipe);
+ drm_vblank_crtc_disable_and_save(vblank);
}
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
}
@@ -1358,7 +1358,7 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
/* Avoid redundant vblank disables without previous
* drm_crtc_vblank_on(). */
if (drm_core_check_feature(dev, DRIVER_ATOMIC) || !vblank->inmodeset)
- drm_vblank_disable_and_save(dev, pipe);
+ drm_vblank_crtc_disable_and_save(vblank);
wake_up(&vblank->queue);
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 24/25] drm/vblank: reduce pipe checks
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (22 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 23/25] drm/vblank: pass vblank to drm_vblank_disable_and_save(), make static Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 10:57 ` [PATCH v2 25/25] drm/vblank: clean up debug logging Jani Nikula
` (3 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Now that drm_vblank_crtc() is the only place that indexes dev->vblank[],
and its usage has reduced considerably, add the primary pipe
out-of-bounds check there, and return NULL. Expect callers to check it
and act accordingly.
In drm_crtc_vblank_crtc(), warn and return NULL, and let it go boom. If
the crtc->pipe is out of bounds, it's a driver error that needs to be
fixed.
Remove superfluous pipe checks all around.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 36 +++++++++++++++---------------------
1 file changed, 15 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index 445b62b8b661..ba16981a5b1e 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -177,13 +177,22 @@ MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]");
static struct drm_vblank_crtc *
drm_vblank_crtc(struct drm_device *dev, unsigned int pipe)
{
+ if (pipe >= dev->num_crtcs)
+ return NULL;
+
return &dev->vblank[pipe];
}
struct drm_vblank_crtc *
drm_crtc_vblank_crtc(struct drm_crtc *crtc)
{
- return drm_vblank_crtc(crtc->dev, drm_crtc_index(crtc));
+ struct drm_vblank_crtc *vblank;
+
+ vblank = drm_vblank_crtc(crtc->dev, drm_crtc_index(crtc));
+ if (drm_WARN_ON(crtc->dev, !vblank))
+ return NULL;
+
+ return vblank;
}
EXPORT_SYMBOL(drm_crtc_vblank_crtc);
@@ -631,7 +640,6 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc,
const struct drm_display_mode *mode)
{
struct drm_device *dev = crtc->dev;
- unsigned int pipe = drm_crtc_index(crtc);
struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
int linedur_ns = 0, framedur_ns = 0;
int dotclock = mode->crtc_clock;
@@ -639,9 +647,6 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc,
if (!drm_dev_has_vblank(dev))
return;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return;
-
/* Valid dotclock? */
if (dotclock > 0) {
int frame_size = mode->crtc_htotal * mode->crtc_vtotal;
@@ -723,11 +728,6 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
int vpos, hpos, i;
int delta_ns, duration_ns;
- if (pipe >= dev->num_crtcs) {
- drm_err(dev, "Invalid crtc %u\n", pipe);
- return false;
- }
-
/* Scanout position query not supported? Should not happen. */
if (!get_scanout_position) {
drm_err(dev, "Called from CRTC w/o get_scanout_position()!?\n");
@@ -1342,9 +1342,6 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
ktime_t now;
u64 seq;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return;
-
/*
* Grab event_lock early to prevent vblank work from being scheduled
* while we're in the middle of shutting down vblank interrupts
@@ -1483,9 +1480,6 @@ void drm_crtc_vblank_on_config(struct drm_crtc *crtc,
unsigned int pipe = drm_crtc_index(crtc);
struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
- return;
-
spin_lock_irq(&dev->vbl_lock);
drm_dbg_vbl(dev, "crtc %d, vblank enabled %d, inmodeset %d\n",
pipe, vblank->enabled, vblank->inmodeset);
@@ -1767,10 +1761,9 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
pipe = pipe_index;
}
- if (pipe >= dev->num_crtcs)
- return -EINVAL;
-
vblank = drm_vblank_crtc(dev, pipe);
+ if (!vblank)
+ return -EINVAL;
/* If the counter is currently enabled and accurate, short-circuit
* queries to return the cached timestamp of the last vblank.
@@ -1905,14 +1898,15 @@ static void drm_vblank_crtc_handle_events(struct drm_vblank_crtc *vblank)
*/
bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
{
- struct drm_vblank_crtc *vblank = drm_vblank_crtc(dev, pipe);
+ struct drm_vblank_crtc *vblank;
unsigned long irqflags;
bool disable_irq;
if (drm_WARN_ON_ONCE(dev, !drm_dev_has_vblank(dev)))
return false;
- if (drm_WARN_ON(dev, pipe >= dev->num_crtcs))
+ vblank = drm_vblank_crtc(dev, pipe);
+ if (drm_WARN_ON(dev, !vblank))
return false;
spin_lock_irqsave(&dev->event_lock, irqflags);
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* [PATCH v2 25/25] drm/vblank: clean up debug logging
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (23 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 24/25] drm/vblank: reduce pipe checks Jani Nikula
@ 2025-12-04 10:57 ` Jani Nikula
2025-12-04 12:21 ` ✓ i915.CI.BAT: success for drm/vblank: refactoring and cleanups (rev2) Patchwork
` (2 subsequent siblings)
27 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 10:57 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: tzimmermann, ville.syrjala, Jani Nikula
Use the usual [CRTC:%d:%s] when crtc is available. Start using a new
uniform [VBLANK:%u] prefix with the pipe when crtc is not
available. Remove extra line breaks. Use string choice helpers here and
there. Use %pe to decode error returns.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/drm_vblank.c | 109 ++++++++++++++++-------------------
1 file changed, 50 insertions(+), 59 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c
index ba16981a5b1e..653ee422e697 100644
--- a/drivers/gpu/drm/drm_vblank.c
+++ b/drivers/gpu/drm/drm_vblank.c
@@ -27,6 +27,7 @@
#include <linux/export.h>
#include <linux/kthread.h>
#include <linux/moduleparam.h>
+#include <linux/string_choices.h>
#include <drm/drm_crtc.h>
#include <drm/drm_drv.h>
@@ -347,14 +348,13 @@ static void drm_vblank_crtc_update_count(struct drm_vblank_crtc *vblank,
* frame/field duration.
*/
- drm_dbg_vbl(dev, "crtc %u: Calculating number of vblanks."
- " diff_ns = %lld, framedur_ns = %d)\n",
+ drm_dbg_vbl(dev, "[VBLANK:%u] Calculating number of vblanks. diff_ns = %lld, framedur_ns = %d)\n",
pipe, (long long)diff_ns, framedur_ns);
diff = DIV_ROUND_CLOSEST_ULL(diff_ns, framedur_ns);
if (diff == 0 && in_vblank_irq)
- drm_dbg_vbl(dev, "crtc %u: Redundant vblirq ignored\n",
+ drm_dbg_vbl(dev, "[VBLANK:%u] Redundant vblirq ignored\n",
pipe);
} else {
/* some kind of default for drivers w/o accurate vbl timestamping */
@@ -372,13 +372,12 @@ static void drm_vblank_crtc_update_count(struct drm_vblank_crtc *vblank,
*/
if (diff > 1 && (vblank->inmodeset & 0x2)) {
drm_dbg_vbl(dev,
- "clamping vblank bump to 1 on crtc %u: diffr=%u"
- " due to pre-modeset.\n", pipe, diff);
+ "[VBLANK:%u] clamping vblank bump to 1: diffr=%u due to pre-modeset.\n",
+ pipe, diff);
diff = 1;
}
- drm_dbg_vbl(dev, "updating vblank count on crtc %u:"
- " current=%llu, diff=%u, hw=%u hw_last=%u\n",
+ drm_dbg_vbl(dev, "[VBLANK:%u] updating vblank count: current=%llu, diff=%u, hw=%u hw_last=%u\n",
pipe, (unsigned long long)atomic64_read(&vblank->count),
diff, cur_vblank, vblank->last);
@@ -517,7 +516,7 @@ static void vblank_disable_fn(struct timer_list *t)
spin_lock_irqsave(&dev->vbl_lock, irqflags);
if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) {
- drm_dbg_core(dev, "disabling vblank on crtc %u\n", pipe);
+ drm_dbg_core(dev, "[VBLANK:%u] disabling vblank\n", pipe);
drm_vblank_crtc_disable_and_save(vblank);
}
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
@@ -665,8 +664,8 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc,
if (mode->flags & DRM_MODE_FLAG_INTERLACE)
framedur_ns /= 2;
} else {
- drm_err(dev, "crtc %u: Can't calculate constants, dotclock = 0!\n",
- crtc->base.id);
+ drm_err(dev, "[CRTC:%d:%s] Can't calculate constants, dotclock = 0!\n",
+ crtc->base.id, crtc->name);
}
vblank->linedur_ns = linedur_ns;
@@ -674,11 +673,11 @@ void drm_calc_timestamping_constants(struct drm_crtc *crtc,
drm_mode_copy(&vblank->hwmode, mode);
drm_dbg_core(dev,
- "crtc %u: hwmode: htotal %d, vtotal %d, vdisplay %d\n",
- crtc->base.id, mode->crtc_htotal,
+ "[CRTC:%d:%s] hwmode: htotal %d, vtotal %d, vdisplay %d\n",
+ crtc->base.id, crtc->name, mode->crtc_htotal,
mode->crtc_vtotal, mode->crtc_vdisplay);
- drm_dbg_core(dev, "crtc %u: clock %d kHz framedur %d linedur %d\n",
- crtc->base.id, dotclock, framedur_ns, linedur_ns);
+ drm_dbg_core(dev, "[CRTC:%d:%s] clock %d kHz framedur %d linedur %d\n",
+ crtc->base.id, crtc->name, dotclock, framedur_ns, linedur_ns);
}
EXPORT_SYMBOL(drm_calc_timestamping_constants);
@@ -730,7 +729,8 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
/* Scanout position query not supported? Should not happen. */
if (!get_scanout_position) {
- drm_err(dev, "Called from CRTC w/o get_scanout_position()!?\n");
+ drm_err(dev, "[CRTC:%d:%s] Called from CRTC w/o get_scanout_position()!?\n",
+ crtc->base.id, crtc->name);
return false;
}
@@ -746,7 +746,7 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
* Happens during initial modesetting of a crtc.
*/
if (mode->crtc_clock == 0) {
- drm_dbg_core(dev, "crtc %u: Noop due to uninitialized mode.\n",
+ drm_dbg_core(dev, "[VBLANK:%u] Noop due to uninitialized mode.\n",
pipe);
drm_WARN_ON_ONCE(dev, drm_drv_uses_atomic_modeset(dev));
return false;
@@ -771,9 +771,8 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
/* Return as no-op if scanout query unsupported or failed. */
if (!vbl_status) {
- drm_dbg_core(dev,
- "crtc %u : scanoutpos query failed.\n",
- pipe);
+ drm_dbg_core(dev, "[CRTC:%d:%s] scanoutpos query failed.\n",
+ crtc->base.id, crtc->name);
return false;
}
@@ -787,9 +786,8 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
/* Noisy system timing? */
if (i == DRM_TIMESTAMP_MAXRETRIES) {
- drm_dbg_core(dev,
- "crtc %u: Noisy timestamp %d us > %d us [%d reps].\n",
- pipe, duration_ns / 1000, *max_error / 1000, i);
+ drm_dbg_core(dev, "[CRTC:%d:%s] Noisy timestamp %d us > %d us [%d reps].\n",
+ crtc->base.id, crtc->name, duration_ns / 1000, *max_error / 1000, i);
}
/* Return upper bound of timestamp precision error. */
@@ -813,9 +811,8 @@ drm_crtc_vblank_helper_get_vblank_timestamp_internal(
ts_etime = ktime_to_timespec64(etime);
ts_vblank_time = ktime_to_timespec64(*vblank_time);
- drm_dbg_vbl(dev,
- "crtc %u : v p(%d,%d)@ %lld.%06ld -> %lld.%06ld [e %d us, %d rep]\n",
- pipe, hpos, vpos,
+ drm_dbg_vbl(dev, "[CRTC:%d:%s] v p(%d,%d)@ %lld.%06ld -> %lld.%06ld [e %d us, %d rep]\n",
+ crtc->base.id, crtc->name, hpos, vpos,
(u64)ts_etime.tv_sec, ts_etime.tv_nsec / 1000,
(u64)ts_vblank_time.tv_sec, ts_vblank_time.tv_nsec / 1000,
duration_ns / 1000, i);
@@ -1190,7 +1187,7 @@ static int drm_vblank_enable(struct drm_vblank_crtc *vblank)
* prevent double-accounting of same vblank interval.
*/
ret = __enable_vblank(vblank);
- drm_dbg_core(dev, "enabling vblank on crtc %u, ret: %d\n",
+ drm_dbg_core(dev, "[VBLANK:%u] enabling vblank, ret: %d\n",
pipe, ret);
if (ret) {
atomic_dec(&vblank->refcount);
@@ -1349,8 +1346,9 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
spin_lock_irq(&dev->event_lock);
spin_lock(&dev->vbl_lock);
- drm_dbg_vbl(dev, "crtc %d, vblank enabled %d, inmodeset %d\n",
- pipe, vblank->enabled, vblank->inmodeset);
+ drm_dbg_vbl(dev, "[CRTC:%d:%s] vblank %s, inmodeset: %s\n",
+ crtc->base.id, crtc->name, str_enabled_disabled(vblank->enabled),
+ str_yes_no(vblank->inmodeset));
/* Avoid redundant vblank disables without previous
* drm_crtc_vblank_on(). */
@@ -1375,9 +1373,8 @@ void drm_crtc_vblank_off(struct drm_crtc *crtc)
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
if (e->pipe != pipe)
continue;
- drm_dbg_core(dev, "Sending premature vblank event on disable: "
- "wanted %llu, current %llu\n",
- e->sequence, seq);
+ drm_dbg_core(dev, "[CRTC:%d:%s] Sending premature vblank event on disable: wanted %llu, current %llu\n",
+ crtc->base.id, crtc->name, e->sequence, seq);
list_del(&e->base.link);
drm_vblank_crtc_put(vblank);
send_vblank_event(dev, e, seq, now);
@@ -1477,12 +1474,12 @@ void drm_crtc_vblank_on_config(struct drm_crtc *crtc,
const struct drm_vblank_crtc_config *config)
{
struct drm_device *dev = crtc->dev;
- unsigned int pipe = drm_crtc_index(crtc);
struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
spin_lock_irq(&dev->vbl_lock);
- drm_dbg_vbl(dev, "crtc %d, vblank enabled %d, inmodeset %d\n",
- pipe, vblank->enabled, vblank->inmodeset);
+ drm_dbg_vbl(dev, "[CRTC:%d:%s] vblank %s, inmodeset: %s\n",
+ crtc->base.id, crtc->name, str_enabled_disabled(vblank->enabled),
+ str_yes_no(vblank->inmodeset));
vblank->config = *config;
@@ -1576,8 +1573,8 @@ void drm_crtc_vblank_restore(struct drm_crtc *crtc)
diff = DIV_ROUND_CLOSEST_ULL(diff_ns, framedur_ns);
- drm_dbg_vbl(dev,
- "missed %d vblanks in %lld ns, frame duration=%d ns, hw_diff=%d\n",
+ drm_dbg_vbl(dev, "[CRTC:%d:%s] missed %d vblanks in %lld ns, frame duration=%d ns, hw_diff=%d\n",
+ crtc->base.id, crtc->name,
diff, diff_ns, framedur_ns, cur_vblank - vblank->last);
vblank->last = (cur_vblank - diff) & max_vblank_count;
}
@@ -1634,8 +1631,8 @@ static int drm_vblank_crtc_queue_event(struct drm_vblank_crtc *vblank,
seq = drm_vblank_crtc_count_and_time(vblank, &now);
- drm_dbg_core(dev, "event on vblank count %llu, current %llu, crtc %u\n",
- req_seq, seq, pipe);
+ drm_dbg_core(dev, "[VBLANK:%u] event on vblank count %llu, current %llu\n",
+ pipe, req_seq, seq);
trace_drm_vblank_event_queued(file_priv, pipe, req_seq);
@@ -1731,8 +1728,7 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
if (vblwait->request.type &
~(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
_DRM_VBLANK_HIGH_CRTC_MASK)) {
- drm_dbg_core(dev,
- "Unsupported type value 0x%x, supported mask 0x%x\n",
+ drm_dbg_core(dev, "Unsupported type value 0x%x, supported mask 0x%x\n",
vblwait->request.type,
(_DRM_VBLANK_TYPES_MASK | _DRM_VBLANK_FLAGS_MASK |
_DRM_VBLANK_HIGH_CRTC_MASK));
@@ -1777,9 +1773,8 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
ret = drm_vblank_crtc_get(vblank);
if (ret) {
- drm_dbg_core(dev,
- "crtc %d failed to acquire vblank counter, %d\n",
- pipe, ret);
+ drm_dbg_core(dev, "[VBLANK:%u] failed to acquire vblank counter %pe\n",
+ pipe, ERR_PTR(ret));
return ret;
}
seq = drm_vblank_crtc_count(vblank);
@@ -1815,8 +1810,8 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
if (req_seq != seq) {
int wait;
- drm_dbg_core(dev, "waiting on vblank count %llu, crtc %u\n",
- req_seq, pipe);
+ drm_dbg_core(dev, "[VBLANK:%d] waiting on vblank count %llu\n",
+ pipe, req_seq);
wait = wait_event_interruptible_timeout(vblank->queue,
drm_vblank_passed(drm_vblank_crtc_count(vblank), req_seq) ||
!READ_ONCE(vblank->enabled),
@@ -1840,10 +1835,10 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data,
if (ret != -EINTR) {
drm_vblank_crtc_wait_reply(vblank, &vblwait->reply);
- drm_dbg_core(dev, "crtc %d returning %u to client\n",
+ drm_dbg_core(dev, "[VBLANK:%u] returning %u to client\n",
pipe, vblwait->reply.sequence);
} else {
- drm_dbg_core(dev, "crtc %d vblank wait interrupted by signal\n",
+ drm_dbg_core(dev, "[VBLANK:%u] vblank wait interrupted by signal\n",
pipe);
}
@@ -1872,8 +1867,8 @@ static void drm_vblank_crtc_handle_events(struct drm_vblank_crtc *vblank)
if (!drm_vblank_passed(seq, e->sequence))
continue;
- drm_dbg_core(dev, "vblank event on %llu, current %llu\n",
- e->sequence, seq);
+ drm_dbg_core(dev, "[VBLANK:%u] vblank event on %llu, current %llu\n",
+ pipe, e->sequence, seq);
list_del(&e->base.link);
drm_vblank_crtc_put(vblank);
@@ -1990,7 +1985,6 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
{
struct drm_crtc *crtc;
struct drm_vblank_crtc *vblank;
- int pipe;
struct drm_crtc_get_sequence *get_seq = data;
ktime_t now;
bool vblank_enabled;
@@ -2006,8 +2000,6 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
if (!crtc)
return -ENOENT;
- pipe = drm_crtc_index(crtc);
-
vblank = drm_crtc_vblank_crtc(crtc);
vblank_enabled = READ_ONCE(vblank->config.disable_immediate) &&
READ_ONCE(vblank->enabled);
@@ -2015,9 +2007,8 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
if (!vblank_enabled) {
ret = drm_crtc_vblank_get(crtc);
if (ret) {
- drm_dbg_core(dev,
- "crtc %d failed to acquire vblank counter, %d\n",
- pipe, ret);
+ drm_dbg_core(dev, "[CRTC:%d:%s] failed to acquire vblank counter %pe\n",
+ crtc->base.id, crtc->name, ERR_PTR(ret));
return ret;
}
}
@@ -2082,9 +2073,8 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
ret = drm_crtc_vblank_get(crtc);
if (ret) {
- drm_dbg_core(dev,
- "crtc %d failed to acquire vblank counter, %d\n",
- pipe, ret);
+ drm_dbg_core(dev, "[CRTC:%d:%s] failed to acquire vblank counter %pe\n",
+ crtc->base.id, crtc->name, ERR_PTR(ret));
goto err_free;
}
@@ -2169,7 +2159,8 @@ static enum hrtimer_restart drm_vblank_timer_function(struct hrtimer *timer)
ret_overrun = hrtimer_forward_now(&vtimer->timer, interval);
if (ret_overrun != 1)
- drm_dbg_vbl(dev, "vblank timer overrun\n");
+ drm_dbg_vbl(dev, "[CRTC:%d:%s] vblank timer overrun\n",
+ crtc->base.id, crtc->name);
if (crtc_funcs->handle_vblank_timeout)
succ = crtc_funcs->handle_vblank_timeout(crtc);
--
2.47.3
^ permalink raw reply related [flat|nested] 35+ messages in thread
* ✓ i915.CI.BAT: success for drm/vblank: refactoring and cleanups (rev2)
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (24 preceding siblings ...)
2025-12-04 10:57 ` [PATCH v2 25/25] drm/vblank: clean up debug logging Jani Nikula
@ 2025-12-04 12:21 ` Patchwork
2025-12-04 12:46 ` [PATCH v2 00/25] drm/vblank: refactoring and cleanups Thomas Zimmermann
2025-12-04 13:55 ` ✗ CI.KUnit: failure for drm/vblank: refactoring and cleanups (rev2) Patchwork
27 siblings, 0 replies; 35+ messages in thread
From: Patchwork @ 2025-12-04 12:21 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 4611 bytes --]
== Series Details ==
Series: drm/vblank: refactoring and cleanups (rev2)
URL : https://patchwork.freedesktop.org/series/157331/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_17633 -> Patchwork_157331v2
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/index.html
Participating hosts (45 -> 44)
------------------------------
Missing (1): fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_157331v2 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live@workarounds:
- bat-mtlp-6: [PASS][1] -> [DMESG-FAIL][2] ([i915#12061]) +1 other test dmesg-fail
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
- bat-dg2-14: [PASS][3] -> [DMESG-FAIL][4] ([i915#12061]) +1 other test dmesg-fail
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-dg2-14/igt@i915_selftest@live@workarounds.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-dg2-14/igt@i915_selftest@live@workarounds.html
#### Possible fixes ####
* igt@i915_selftest@live:
- bat-arlh-2: [INCOMPLETE][5] ([i915#14837]) -> [PASS][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-arlh-2/igt@i915_selftest@live.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-arlh-2/igt@i915_selftest@live.html
* igt@i915_selftest@live@gt_engines:
- bat-arlh-2: [INCOMPLETE][7] -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-arlh-2/igt@i915_selftest@live@gt_engines.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-arlh-2/igt@i915_selftest@live@gt_engines.html
* igt@i915_selftest@live@workarounds:
- bat-arlh-3: [DMESG-FAIL][9] ([i915#12061]) -> [PASS][10] +1 other test pass
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-arlh-3/igt@i915_selftest@live@workarounds.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-arlh-3/igt@i915_selftest@live@workarounds.html
- bat-dg2-9: [DMESG-FAIL][11] ([i915#12061]) -> [PASS][12] +1 other test pass
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-dg2-9/igt@i915_selftest@live@workarounds.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-dg2-9/igt@i915_selftest@live@workarounds.html
- bat-mtlp-9: [DMESG-FAIL][13] ([i915#12061]) -> [PASS][14] +1 other test pass
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
#### Warnings ####
* igt@i915_selftest@live:
- bat-atsm-1: [DMESG-FAIL][15] ([i915#12061] / [i915#13929]) -> [DMESG-FAIL][16] ([i915#12061] / [i915#14204])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-atsm-1/igt@i915_selftest@live.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-atsm-1/igt@i915_selftest@live.html
* igt@i915_selftest@live@mman:
- bat-atsm-1: [DMESG-FAIL][17] ([i915#13929]) -> [DMESG-FAIL][18] ([i915#14204])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17633/bat-atsm-1/igt@i915_selftest@live@mman.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/bat-atsm-1/igt@i915_selftest@live@mman.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#13929]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13929
[i915#14204]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14204
[i915#14837]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14837
Build changes
-------------
* Linux: CI_DRM_17633 -> Patchwork_157331v2
CI-20190529: 20190529
CI_DRM_17633: 4eb27c4b4b45606c79769918ab8736249f94035a @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8654: 38d9fde0432aa6f2bf6add062f1d4334ad467fbc @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_157331v2: 4eb27c4b4b45606c79769918ab8736249f94035a @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_157331v2/index.html
[-- Attachment #2: Type: text/html, Size: 5954 bytes --]
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH v2 00/25] drm/vblank: refactoring and cleanups
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (25 preceding siblings ...)
2025-12-04 12:21 ` ✓ i915.CI.BAT: success for drm/vblank: refactoring and cleanups (rev2) Patchwork
@ 2025-12-04 12:46 ` Thomas Zimmermann
2025-12-04 12:57 ` Jani Nikula
2025-12-04 13:55 ` ✗ CI.KUnit: failure for drm/vblank: refactoring and cleanups (rev2) Patchwork
27 siblings, 1 reply; 35+ messages in thread
From: Thomas Zimmermann @ 2025-12-04 12:46 UTC (permalink / raw)
To: Jani Nikula, intel-gfx, intel-xe; +Cc: ville.syrjala
Hi
Am 04.12.25 um 11:57 schrieb Jani Nikula:
> v2 of [1], hopefully addressing all review comments.
I gave an r-b to most of the patches in v1 of this series. Why didn't
you keep those?
Best regards
Thomas
>
> BR,
> Jani.
>
>
> [1] https://lore.kernel.org/r/cover.1762791343.git.jani.nikula@intel.com
>
>
> Jani Nikula (24):
> drm/vblank: remove drm_wait_one_vblank() completely
> drm/vblank: remove superfluous pipe check
> drm/vblank: add return value to drm_crtc_wait_one_vblank()
> drm/vblank: limit vblank variable scope to atomic
> drm/vblank: use the drm_vblank_crtc() and drm_crtc_vblank_crtc()
> helpers more
> drm/vblank: prefer drm_crtc_vblank_crtc() over drm_vblank_crtc()
> drm/vblank: pass vlank to drm_vblank_get()/_put()/_count()
> drm/vblank: pass vblank to drm_update_vblank_count()
> drm/vblank: pass vblank to drm_handle_vblank_events()
> drm/vblank: use the vblank based interfaces more
> drm/vblank: pass vblank to drm_queue_vblank_event()
> drm/vblank: pass vblank to drm_wait_vblank_reply()
> drm/vblank: pass vblank to drm_vblank_count_and_time()
> drm/vblank: pass vblank to drm_reset_vblank_timestamp()
> drm/vblank: pass vblank to store_vblank()
> drm/vblank: pass vblank to drm_vblank_enable()
> drm/vblank: merge drm_vblank_restore() into drm_crtc_vblank_restore()
> drm/vblank: add drm_crtc_from_vblank() helper
> drm/vblank: pass vblank to __get_vblank_counter() and
> drm_max_vblank_count()
> drm/vblank: pass vblank to __{enable,disable}_vblank()
> drm/vblank: pass vblank to drm_get_last_vbltimestamp()
> drm/vblank: pass vblank to drm_vblank_disable_and_save(), make static
> drm/vblank: reduce pipe checks
> drm/vblank: clean up debug logging
>
> Thomas Zimmermann (1):
> drm/vblank: Unexport drm_wait_one_vblank()
>
> drivers/gpu/drm/drm_internal.h | 7 +-
> drivers/gpu/drm/drm_vblank.c | 533 ++++++++++++++----------------
> drivers/gpu/drm/drm_vblank_work.c | 12 +-
> include/drm/drm_vblank.h | 3 +-
> 4 files changed, 257 insertions(+), 298 deletions(-)
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH v2 00/25] drm/vblank: refactoring and cleanups
2025-12-04 12:46 ` [PATCH v2 00/25] drm/vblank: refactoring and cleanups Thomas Zimmermann
@ 2025-12-04 12:57 ` Jani Nikula
2025-12-04 13:06 ` Thomas Zimmermann
0 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 12:57 UTC (permalink / raw)
To: Thomas Zimmermann, intel-gfx, intel-xe; +Cc: ville.syrjala
On Thu, 04 Dec 2025, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> Hi
>
> Am 04.12.25 um 11:57 schrieb Jani Nikula:
>> v2 of [1], hopefully addressing all review comments.
>
> I gave an r-b to most of the patches in v1 of this series. Why didn't
> you keep those?
Aww crap, sorry, I meant to, but forgot. :(
BR,
Jani.
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH v2 00/25] drm/vblank: refactoring and cleanups
2025-12-04 12:57 ` Jani Nikula
@ 2025-12-04 13:06 ` Thomas Zimmermann
2025-12-04 13:07 ` Thomas Zimmermann
0 siblings, 1 reply; 35+ messages in thread
From: Thomas Zimmermann @ 2025-12-04 13:06 UTC (permalink / raw)
To: Jani Nikula, intel-gfx, intel-xe; +Cc: ville.syrjala
Hi
Am 04.12.25 um 13:57 schrieb Jani Nikula:
> On Thu, 04 Dec 2025, Thomas Zimmermann <tzimmermann@suse.de> wrote:
>> Hi
>>
>> Am 04.12.25 um 11:57 schrieb Jani Nikula:
>>> v2 of [1], hopefully addressing all review comments.
>> I gave an r-b to most of the patches in v1 of this series. Why didn't
>> you keep those?
> Aww crap, sorry, I meant to, but forgot. :(
I see. I looked through the rename changes. Seems good. For the whole series
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Thanks for this cleanup.
Best regards
Thomas
>
> BR,
> Jani.
>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH v2 00/25] drm/vblank: refactoring and cleanups
2025-12-04 13:06 ` Thomas Zimmermann
@ 2025-12-04 13:07 ` Thomas Zimmermann
2025-12-04 13:12 ` Jani Nikula
0 siblings, 1 reply; 35+ messages in thread
From: Thomas Zimmermann @ 2025-12-04 13:07 UTC (permalink / raw)
To: Jani Nikula, intel-gfx, intel-xe; +Cc: ville.syrjala
And another thing I noticed is that this series didn't go to dri-devel.
Am 04.12.25 um 14:06 schrieb Thomas Zimmermann:
> Hi
>
> Am 04.12.25 um 13:57 schrieb Jani Nikula:
>> On Thu, 04 Dec 2025, Thomas Zimmermann <tzimmermann@suse.de> wrote:
>>> Hi
>>>
>>> Am 04.12.25 um 11:57 schrieb Jani Nikula:
>>>> v2 of [1], hopefully addressing all review comments.
>>> I gave an r-b to most of the patches in v1 of this series. Why didn't
>>> you keep those?
>> Aww crap, sorry, I meant to, but forgot. :(
>
> I see. I looked through the rename changes. Seems good. For the whole
> series
>
> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
>
> Thanks for this cleanup.
>
> Best regards
> Thomas
>
>>
>> BR,
>> Jani.
>>
>>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH v2 00/25] drm/vblank: refactoring and cleanups
2025-12-04 13:07 ` Thomas Zimmermann
@ 2025-12-04 13:12 ` Jani Nikula
2025-12-04 13:15 ` Thomas Zimmermann
0 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-12-04 13:12 UTC (permalink / raw)
To: Thomas Zimmermann, intel-gfx, intel-xe; +Cc: ville.syrjala
On Thu, 04 Dec 2025, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> And another thing I noticed is that this series didn't go to dri-devel.
*facepalm*
Should I just resend the entire series?
>> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Thanks a lot for the reviews, and sorry about the goof-ups.
BR,
Jani.
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH v2 00/25] drm/vblank: refactoring and cleanups
2025-12-04 13:12 ` Jani Nikula
@ 2025-12-04 13:15 ` Thomas Zimmermann
0 siblings, 0 replies; 35+ messages in thread
From: Thomas Zimmermann @ 2025-12-04 13:15 UTC (permalink / raw)
To: Jani Nikula, intel-gfx, intel-xe; +Cc: ville.syrjala
Hi
Am 04.12.25 um 14:12 schrieb Jani Nikula:
> On Thu, 04 Dec 2025, Thomas Zimmermann <tzimmermann@suse.de> wrote:
>> And another thing I noticed is that this series didn't go to dri-devel.
> *facepalm*
Happens :)
>
> Should I just resend the entire series?
I'd include the r-bs and send it as v3 to dri-devel and the others.
Best regards
Thomas
>
>>> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> Thanks a lot for the reviews, and sorry about the goof-ups.
>
> BR,
> Jani.
>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
^ permalink raw reply [flat|nested] 35+ messages in thread
* ✗ CI.KUnit: failure for drm/vblank: refactoring and cleanups (rev2)
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
` (26 preceding siblings ...)
2025-12-04 12:46 ` [PATCH v2 00/25] drm/vblank: refactoring and cleanups Thomas Zimmermann
@ 2025-12-04 13:55 ` Patchwork
27 siblings, 0 replies; 35+ messages in thread
From: Patchwork @ 2025-12-04 13:55 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-xe
== Series Details ==
Series: drm/vblank: refactoring and cleanups (rev2)
URL : https://patchwork.freedesktop.org/series/157332/
State : failure
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[13:53:52] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[13:53:56] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=25
[13:54:33] Starting KUnit Kernel (1/1)...
[13:54:33] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[13:54:33] ================== guc_buf (11 subtests) ===================
[13:54:33] [PASSED] test_smallest
[13:54:33] [PASSED] test_largest
[13:54:34] [PASSED] test_granular
[13:54:34] [PASSED] test_unique
[13:54:34] [PASSED] test_overlap
[13:54:34] [PASSED] test_reusable
[13:54:34] [PASSED] test_too_big
[13:54:34] [PASSED] test_flush
[13:54:34] [PASSED] test_lookup
[13:54:34] [PASSED] test_data
[13:54:34] [PASSED] test_class
[13:54:34] ===================== [PASSED] guc_buf =====================
[13:54:34] =================== guc_dbm (7 subtests) ===================
[13:54:34] [PASSED] test_empty
[13:54:34] [PASSED] test_default
[13:54:34] ======================== test_size ========================
[13:54:34] [PASSED] 4
[13:54:34] [PASSED] 8
[13:54:34] [PASSED] 32
[13:54:34] [PASSED] 256
[13:54:34] ==================== [PASSED] test_size ====================
[13:54:34] ======================= test_reuse ========================
[13:54:34] [PASSED] 4
[13:54:34] [PASSED] 8
[13:54:34] [PASSED] 32
[13:54:34] [PASSED] 256
[13:54:34] =================== [PASSED] test_reuse ====================
[13:54:34] =================== test_range_overlap ====================
[13:54:34] [PASSED] 4
[13:54:34] [PASSED] 8
[13:54:34] [PASSED] 32
[13:54:34] [PASSED] 256
[13:54:34] =============== [PASSED] test_range_overlap ================
[13:54:34] =================== test_range_compact ====================
[13:54:34] [PASSED] 4
[13:54:34] [PASSED] 8
[13:54:34] [PASSED] 32
[13:54:34] [PASSED] 256
[13:54:34] =============== [PASSED] test_range_compact ================
[13:54:34] ==================== test_range_spare =====================
[13:54:34] [PASSED] 4
[13:54:34] [PASSED] 8
[13:54:34] [PASSED] 32
[13:54:34] [PASSED] 256
[13:54:34] ================ [PASSED] test_range_spare =================
[13:54:34] ===================== [PASSED] guc_dbm =====================
[13:54:34] =================== guc_idm (6 subtests) ===================
[13:54:34] [PASSED] bad_init
[13:54:34] [PASSED] no_init
[13:54:34] [PASSED] init_fini
[13:54:34] [PASSED] check_used
[13:54:34] [PASSED] check_quota
[13:54:34] [PASSED] check_all
[13:54:34] ===================== [PASSED] guc_idm =====================
[13:54:34] ================== no_relay (3 subtests) ===================
[13:54:34] [PASSED] xe_drops_guc2pf_if_not_ready
[13:54:34] [PASSED] xe_drops_guc2vf_if_not_ready
[13:54:34] [PASSED] xe_rejects_send_if_not_ready
[13:54:34] ==================== [PASSED] no_relay =====================
[13:54:34] ================== pf_relay (14 subtests) ==================
[13:54:34] [PASSED] pf_rejects_guc2pf_too_short
[13:54:34] [PASSED] pf_rejects_guc2pf_too_long
[13:54:34] [PASSED] pf_rejects_guc2pf_no_payload
[13:54:34] [PASSED] pf_fails_no_payload
[13:54:34] [PASSED] pf_fails_bad_origin
[13:54:34] [PASSED] pf_fails_bad_type
[13:54:34] [PASSED] pf_txn_reports_error
[13:54:34] [PASSED] pf_txn_sends_pf2guc
[13:54:34] [PASSED] pf_sends_pf2guc
[13:54:34] [SKIPPED] pf_loopback_nop
[13:54:34] [SKIPPED] pf_loopback_echo
[13:54:34] [SKIPPED] pf_loopback_fail
[13:54:34] [SKIPPED] pf_loopback_busy
[13:54:34] [SKIPPED] pf_loopback_retry
[13:54:34] ==================== [PASSED] pf_relay =====================
[13:54:34] ================== vf_relay (3 subtests) ===================
[13:54:34] [PASSED] vf_rejects_guc2vf_too_short
[13:54:34] [PASSED] vf_rejects_guc2vf_too_long
[13:54:34] [PASSED] vf_rejects_guc2vf_no_payload
[13:54:34] ==================== [PASSED] vf_relay =====================
[13:54:34] ================ pf_gt_config (6 subtests) =================
[13:54:34] [PASSED] fair_contexts_1vf
[13:54:34] [PASSED] fair_doorbells_1vf
[13:54:34] [PASSED] fair_ggtt_1vf
[13:54:34] ====================== fair_contexts ======================
[13:54:34] [PASSED] 1 VF
[13:54:34] [PASSED] 2 VFs
[13:54:34] [PASSED] 3 VFs
[13:54:34] [PASSED] 4 VFs
[13:54:34] [PASSED] 5 VFs
[13:54:34] [PASSED] 6 VFs
[13:54:34] [PASSED] 7 VFs
[13:54:34] [PASSED] 8 VFs
[13:54:34] [PASSED] 9 VFs
[13:54:34] [PASSED] 10 VFs
[13:54:34] [PASSED] 11 VFs
[13:54:34] [PASSED] 12 VFs
[13:54:34] [PASSED] 13 VFs
[13:54:34] [PASSED] 14 VFs
[13:54:34] [PASSED] 15 VFs
[13:54:34] [PASSED] 16 VFs
[13:54:34] [PASSED] 17 VFs
[13:54:34] [PASSED] 18 VFs
[13:54:34] [PASSED] 19 VFs
[13:54:34] [PASSED] 20 VFs
[13:54:34] [PASSED] 21 VFs
[13:54:34] [PASSED] 22 VFs
[13:54:34] [PASSED] 23 VFs
[13:54:34] [PASSED] 24 VFs
[13:54:34] [PASSED] 25 VFs
[13:54:34] [PASSED] 26 VFs
[13:54:34] [PASSED] 27 VFs
[13:54:34] [PASSED] 28 VFs
[13:54:34] [PASSED] 29 VFs
[13:54:34] [PASSED] 30 VFs
[13:54:34] [PASSED] 31 VFs
[13:54:34] [PASSED] 32 VFs
[13:54:34] [PASSED] 33 VFs
[13:54:34] [PASSED] 34 VFs
[13:54:34] [PASSED] 35 VFs
[13:54:34] [PASSED] 36 VFs
[13:54:34] [PASSED] 37 VFs
[13:54:34] [PASSED] 38 VFs
[13:54:34] [PASSED] 39 VFs
[13:54:34] [PASSED] 40 VFs
[13:54:34] [PASSED] 41 VFs
[13:54:34] [PASSED] 42 VFs
[13:54:34] [PASSED] 43 VFs
[13:54:34] [PASSED] 44 VFs
[13:54:34] [PASSED] 45 VFs
[13:54:34] [PASSED] 46 VFs
[13:54:34] [PASSED] 47 VFs
[13:54:34] [PASSED] 48 VFs
[13:54:34] [PASSED] 49 VFs
[13:54:34] [PASSED] 50 VFs
[13:54:34] [PASSED] 51 VFs
[13:54:34] [PASSED] 52 VFs
[13:54:34] [PASSED] 53 VFs
[13:54:34] [PASSED] 54 VFs
[13:54:34] [PASSED] 55 VFs
[13:54:34] [PASSED] 56 VFs
[13:54:34] [PASSED] 57 VFs
[13:54:34] [PASSED] 58 VFs
[13:54:34] [PASSED] 59 VFs
[13:54:34] [PASSED] 60 VFs
[13:54:34] [PASSED] 61 VFs
[13:54:34] [PASSED] 62 VFs
[13:54:34] [PASSED] 63 VFs
[13:54:34] ================== [PASSED] fair_contexts ==================
[13:54:34] ===================== fair_doorbells ======================
[13:54:34] [PASSED] 1 VF
[13:54:34] [PASSED] 2 VFs
[13:54:34] [PASSED] 3 VFs
[13:54:34] [PASSED] 4 VFs
[13:54:34] [PASSED] 5 VFs
[13:54:34] [PASSED] 6 VFs
[13:54:34] [PASSED] 7 VFs
[13:54:34] [PASSED] 8 VFs
[13:54:34] [PASSED] 9 VFs
[13:54:34] [PASSED] 10 VFs
[13:54:34] [PASSED] 11 VFs
[13:54:34] [PASSED] 12 VFs
[13:54:34] [PASSED] 13 VFs
[13:54:34] [PASSED] 14 VFs
[13:54:34] [PASSED] 15 VFs
[13:54:34] [PASSED] 16 VFs
[13:54:34] [PASSED] 17 VFs
[13:54:34] [PASSED] 18 VFs
[13:54:34] [PASSED] 19 VFs
[13:54:34] [PASSED] 20 VFs
[13:54:34] [PASSED] 21 VFs
[13:54:34] [PASSED] 22 VFs
[13:54:34] [PASSED] 23 VFs
[13:54:34] [PASSED] 24 VFs
[13:54:34] [PASSED] 25 VFs
[13:54:34] [PASSED] 26 VFs
[13:54:34] [PASSED] 27 VFs
[13:54:34] [PASSED] 28 VFs
[13:54:34] [PASSED] 29 VFs
[13:54:34] [PASSED] 30 VFs
[13:54:34] [PASSED] 31 VFs
[13:54:34] [PASSED] 32 VFs
[13:54:34] [PASSED] 33 VFs
[13:54:34] [PASSED] 34 VFs
[13:54:34] [PASSED] 35 VFs
[13:54:34] [PASSED] 36 VFs
[13:54:34] [PASSED] 37 VFs
[13:54:34] [PASSED] 38 VFs
[13:54:34] [PASSED] 39 VFs
[13:54:34] [PASSED] 40 VFs
[13:54:34] [PASSED] 41 VFs
[13:54:34] [PASSED] 42 VFs
[13:54:34] [PASSED] 43 VFs
[13:54:34] [PASSED] 44 VFs
[13:54:34] [PASSED] 45 VFs
[13:54:34] [PASSED] 46 VFs
[13:54:34] [PASSED] 47 VFs
[13:54:34] [PASSED] 48 VFs
[13:54:34] [PASSED] 49 VFs
[13:54:34] [PASSED] 50 VFs
[13:54:34] [PASSED] 51 VFs
[13:54:34] [PASSED] 52 VFs
[13:54:34] [PASSED] 53 VFs
[13:54:34] [PASSED] 54 VFs
[13:54:34] [PASSED] 55 VFs
[13:54:34] [PASSED] 56 VFs
[13:54:34] [PASSED] 57 VFs
[13:54:34] [PASSED] 58 VFs
[13:54:34] [PASSED] 59 VFs
[13:54:34] [PASSED] 60 VFs
[13:54:34] [PASSED] 61 VFs
[13:54:34] [PASSED] 62 VFs
[13:54:34] [PASSED] 63 VFs
[13:54:34] ================= [PASSED] fair_doorbells ==================
[13:54:34] ======================== fair_ggtt ========================
[13:54:34] [PASSED] 1 VF
[13:54:34] [PASSED] 2 VFs
[13:54:34] [PASSED] 3 VFs
[13:54:34] [PASSED] 4 VFs
[13:54:34] [PASSED] 5 VFs
[13:54:34] [PASSED] 6 VFs
[13:54:34] [PASSED] 7 VFs
[13:54:34] [PASSED] 8 VFs
[13:54:34] [PASSED] 9 VFs
[13:54:34] [PASSED] 10 VFs
[13:54:34] [PASSED] 11 VFs
[13:54:34] [PASSED] 12 VFs
[13:54:34] [PASSED] 13 VFs
[13:54:34] [PASSED] 14 VFs
[13:54:34] [PASSED] 15 VFs
[13:54:34] [PASSED] 16 VFs
[13:54:34] [PASSED] 17 VFs
[13:54:34] [PASSED] 18 VFs
[13:54:34] [PASSED] 19 VFs
[13:54:34] [PASSED] 20 VFs
[13:54:34] [PASSED] 21 VFs
[13:54:34] [PASSED] 22 VFs
[13:54:34] [PASSED] 23 VFs
[13:54:34] [PASSED] 24 VFs
[13:54:34] [PASSED] 25 VFs
[13:54:34] [PASSED] 26 VFs
[13:54:34] [PASSED] 27 VFs
[13:54:34] [PASSED] 28 VFs
[13:54:34] [PASSED] 29 VFs
[13:54:34] [PASSED] 30 VFs
[13:54:34] [PASSED] 31 VFs
[13:54:34] [PASSED] 32 VFs
[13:54:34] [PASSED] 33 VFs
[13:54:34] [PASSED] 34 VFs
[13:54:34] [PASSED] 35 VFs
[13:54:34] [PASSED] 36 VFs
[13:54:34] [PASSED] 37 VFs
[13:54:34] [PASSED] 38 VFs
[13:54:34] [PASSED] 39 VFs
[13:54:34] [PASSED] 40 VFs
[13:54:34] [PASSED] 41 VFs
[13:54:34] [PASSED] 42 VFs
[13:54:34] [PASSED] 43 VFs
[13:54:34] [PASSED] 44 VFs
[13:54:34] [PASSED] 45 VFs
[13:54:34] [PASSED] 46 VFs
[13:54:34] [PASSED] 47 VFs
[13:54:34] [PASSED] 48 VFs
[13:54:34] [PASSED] 49 VFs
[13:54:34] [PASSED] 50 VFs
[13:54:34] [PASSED] 51 VFs
[13:54:34] [PASSED] 52 VFs
[13:54:34] [PASSED] 53 VFs
[13:54:34] [PASSED] 54 VFs
[13:54:34] [PASSED] 55 VFs
[13:54:34] [PASSED] 56 VFs
[13:54:34] [PASSED] 57 VFs
[13:54:34] [PASSED] 58 VFs
[13:54:34] [PASSED] 59 VFs
[13:54:34] [PASSED] 60 VFs
[13:54:34] [PASSED] 61 VFs
[13:54:34] [PASSED] 62 VFs
[13:54:34] [PASSED] 63 VFs
[13:54:34] ==================== [PASSED] fair_ggtt ====================
[13:54:34] ================== [PASSED] pf_gt_config ===================
[13:54:34] ===================== lmtt (1 subtest) =====================
[13:54:34] ======================== test_ops =========================
[13:54:34] [PASSED] 2-level
[13:54:34] [PASSED] multi-level
[13:54:34] ==================== [PASSED] test_ops =====================
[13:54:34] ====================== [PASSED] lmtt =======================
[13:54:34] ================= pf_service (11 subtests) =================
[13:54:34] [PASSED] pf_negotiate_any
[13:54:34] [PASSED] pf_negotiate_base_match
[13:54:34] [PASSED] pf_negotiate_base_newer
[13:54:34] [PASSED] pf_negotiate_base_next
[13:54:34] [SKIPPED] pf_negotiate_base_older
[13:54:34] [PASSED] pf_negotiate_base_prev
[13:54:34] [PASSED] pf_negotiate_latest_match
[13:54:34] [PASSED] pf_negotiate_latest_newer
[13:54:34] [PASSED] pf_negotiate_latest_next
[13:54:34] [SKIPPED] pf_negotiate_latest_older
[13:54:34] [SKIPPED] pf_negotiate_latest_prev
[13:54:34] =================== [PASSED] pf_service ====================
[13:54:34] ================= xe_guc_g2g (2 subtests) ==================
[13:54:34] ============== xe_live_guc_g2g_kunit_default ==============
[13:54:34] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[13:54:34] ============== xe_live_guc_g2g_kunit_allmem ===============
[13:54:34] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[13:54:34] =================== [SKIPPED] xe_guc_g2g ===================
[13:54:34] =================== xe_mocs (2 subtests) ===================
[13:54:34] ================ xe_live_mocs_kernel_kunit ================
[13:54:34] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[13:54:34] ================ xe_live_mocs_reset_kunit =================
[13:54:34] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[13:54:34] ==================== [SKIPPED] xe_mocs =====================
[13:54:34] ================= xe_migrate (2 subtests) ==================
[13:54:34] ================= xe_migrate_sanity_kunit =================
[13:54:34] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[13:54:34] ================== xe_validate_ccs_kunit ==================
[13:54:34] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[13:54:34] =================== [SKIPPED] xe_migrate ===================
[13:54:34] ================== xe_dma_buf (1 subtest) ==================
[13:54:34] ==================== xe_dma_buf_kunit =====================
[13:54:34] ================ [SKIPPED] xe_dma_buf_kunit ================
[13:54:34] =================== [SKIPPED] xe_dma_buf ===================
[13:54:34] ================= xe_bo_shrink (1 subtest) =================
[13:54:34] =================== xe_bo_shrink_kunit ====================
[13:54:34] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[13:54:34] ================== [SKIPPED] xe_bo_shrink ==================
[13:54:34] ==================== xe_bo (2 subtests) ====================
[13:54:34] ================== xe_ccs_migrate_kunit ===================
[13:54:34] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[13:54:34] ==================== xe_bo_evict_kunit ====================
[13:54:34] =============== [SKIPPED] xe_bo_evict_kunit ================
[13:54:34] ===================== [SKIPPED] xe_bo ======================
[13:54:34] ==================== args (11 subtests) ====================
[13:54:34] [PASSED] count_args_test
[13:54:34] [PASSED] call_args_example
[13:54:34] [PASSED] call_args_test
[13:54:34] [PASSED] drop_first_arg_example
[13:54:34] [PASSED] drop_first_arg_test
[13:54:34] [PASSED] first_arg_example
[13:54:34] [PASSED] first_arg_test
[13:54:34] [PASSED] last_arg_example
[13:54:34] [PASSED] last_arg_test
[13:54:34] [PASSED] pick_arg_example
[13:54:34] [PASSED] sep_comma_example
[13:54:34] ====================== [PASSED] args =======================
[13:54:34] =================== xe_pci (3 subtests) ====================
[13:54:34] ==================== check_graphics_ip ====================
[13:54:34] [PASSED] 12.00 Xe_LP
[13:54:34] [PASSED] 12.10 Xe_LP+
[13:54:34] [PASSED] 12.55 Xe_HPG
[13:54:34] [PASSED] 12.60 Xe_HPC
[13:54:34] [PASSED] 12.70 Xe_LPG
[13:54:34] [PASSED] 12.71 Xe_LPG
[13:54:34] [PASSED] 12.74 Xe_LPG+
[13:54:34] [PASSED] 20.01 Xe2_HPG
[13:54:34] [PASSED] 20.02 Xe2_HPG
[13:54:34] [PASSED] 20.04 Xe2_LPG
[13:54:34] [PASSED] 30.00 Xe3_LPG
[13:54:34] [PASSED] 30.01 Xe3_LPG
[13:54:34] [PASSED] 30.03 Xe3_LPG
[13:54:34] [PASSED] 30.04 Xe3_LPG
[13:54:34] [PASSED] 30.05 Xe3_LPG
[13:54:34] [PASSED] 35.11 Xe3p_XPC
[13:54:34] ================ [PASSED] check_graphics_ip ================
[13:54:34] ===================== check_media_ip ======================
[13:54:34] [PASSED] 12.00 Xe_M
[13:54:34] [PASSED] 12.55 Xe_HPM
[13:54:34] [PASSED] 13.00 Xe_LPM+
[13:54:34] [PASSED] 13.01 Xe2_HPM
[13:54:34] [PASSED] 20.00 Xe2_LPM
[13:54:34] [PASSED] 30.00 Xe3_LPM
[13:54:34] [PASSED] 30.02 Xe3_LPM
[13:54:34] [PASSED] 35.00 Xe3p_LPM
[13:54:34] [PASSED] 35.03 Xe3p_HPM
[13:54:34] ================= [PASSED] check_media_ip ==================
[13:54:34] =================== check_platform_desc ===================
[13:54:34] [PASSED] 0x9A60 (TIGERLAKE)
[13:54:34] [PASSED] 0x9A68 (TIGERLAKE)
[13:54:34] [PASSED] 0x9A70 (TIGERLAKE)
[13:54:34] [PASSED] 0x9A40 (TIGERLAKE)
[13:54:34] [PASSED] 0x9A49 (TIGERLAKE)
[13:54:34] [PASSED] 0x9A59 (TIGERLAKE)
[13:54:34] [PASSED] 0x9A78 (TIGERLAKE)
[13:54:34] [PASSED] 0x9AC0 (TIGERLAKE)
[13:54:34] [PASSED] 0x9AC9 (TIGERLAKE)
[13:54:34] [PASSED] 0x9AD9 (TIGERLAKE)
[13:54:34] [PASSED] 0x9AF8 (TIGERLAKE)
[13:54:34] [PASSED] 0x4C80 (ROCKETLAKE)
[13:54:34] [PASSED] 0x4C8A (ROCKETLAKE)
[13:54:34] [PASSED] 0x4C8B (ROCKETLAKE)
[13:54:34] [PASSED] 0x4C8C (ROCKETLAKE)
[13:54:34] [PASSED] 0x4C90 (ROCKETLAKE)
[13:54:34] [PASSED] 0x4C9A (ROCKETLAKE)
[13:54:34] [PASSED] 0x4680 (ALDERLAKE_S)
[13:54:34] [PASSED] 0x4682 (ALDERLAKE_S)
[13:54:34] [PASSED] 0x4688 (ALDERLAKE_S)
[13:54:34] [PASSED] 0x468A (ALDERLAKE_S)
[13:54:34] [PASSED] 0x468B (ALDERLAKE_S)
[13:54:34] [PASSED] 0x4690 (ALDERLAKE_S)
[13:54:34] [PASSED] 0x4692 (ALDERLAKE_S)
[13:54:34] [PASSED] 0x4693 (ALDERLAKE_S)
[13:54:34] [PASSED] 0x46A0 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46A1 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46A2 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46A3 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46A6 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46A8 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46AA (ALDERLAKE_P)
[13:54:34] [PASSED] 0x462A (ALDERLAKE_P)
[13:54:34] [PASSED] 0x4626 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x4628 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46B0 (ALDERLAKE_P)
stty: 'standard input': Inappropriate ioctl for device
[13:54:34] [PASSED] 0x46B1 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46B2 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46B3 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46C0 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46C1 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46C2 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46C3 (ALDERLAKE_P)
[13:54:34] [PASSED] 0x46D0 (ALDERLAKE_N)
[13:54:34] [PASSED] 0x46D1 (ALDERLAKE_N)
[13:54:34] [PASSED] 0x46D2 (ALDERLAKE_N)
[13:54:34] [PASSED] 0x46D3 (ALDERLAKE_N)
[13:54:34] [PASSED] 0x46D4 (ALDERLAKE_N)
[13:54:34] [PASSED] 0xA721 (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7A1 (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7A9 (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7AC (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7AD (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA720 (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7A0 (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7A8 (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7AA (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA7AB (ALDERLAKE_P)
[13:54:34] [PASSED] 0xA780 (ALDERLAKE_S)
[13:54:34] [PASSED] 0xA781 (ALDERLAKE_S)
[13:54:34] [PASSED] 0xA782 (ALDERLAKE_S)
[13:54:34] [PASSED] 0xA783 (ALDERLAKE_S)
[13:54:34] [PASSED] 0xA788 (ALDERLAKE_S)
[13:54:34] [PASSED] 0xA789 (ALDERLAKE_S)
[13:54:34] [PASSED] 0xA78A (ALDERLAKE_S)
[13:54:34] [PASSED] 0xA78B (ALDERLAKE_S)
[13:54:34] [PASSED] 0x4905 (DG1)
[13:54:34] [PASSED] 0x4906 (DG1)
[13:54:34] [PASSED] 0x4907 (DG1)
[13:54:34] [PASSED] 0x4908 (DG1)
[13:54:34] [PASSED] 0x4909 (DG1)
[13:54:34] [PASSED] 0x56C0 (DG2)
[13:54:34] [PASSED] 0x56C2 (DG2)
[13:54:34] [PASSED] 0x56C1 (DG2)
[13:54:34] [PASSED] 0x7D51 (METEORLAKE)
[13:54:34] [PASSED] 0x7DD1 (METEORLAKE)
[13:54:34] [PASSED] 0x7D41 (METEORLAKE)
[13:54:34] [PASSED] 0x7D67 (METEORLAKE)
[13:54:34] [PASSED] 0xB640 (METEORLAKE)
[13:54:34] [PASSED] 0x56A0 (DG2)
[13:54:34] [PASSED] 0x56A1 (DG2)
[13:54:34] [PASSED] 0x56A2 (DG2)
[13:54:34] [PASSED] 0x56BE (DG2)
[13:54:34] [PASSED] 0x56BF (DG2)
[13:54:34] [PASSED] 0x5690 (DG2)
[13:54:34] [PASSED] 0x5691 (DG2)
[13:54:34] [PASSED] 0x5692 (DG2)
[13:54:34] [PASSED] 0x56A5 (DG2)
[13:54:34] [PASSED] 0x56A6 (DG2)
[13:54:34] [PASSED] 0x56B0 (DG2)
[13:54:34] [PASSED] 0x56B1 (DG2)
[13:54:34] [PASSED] 0x56BA (DG2)
[13:54:34] [PASSED] 0x56BB (DG2)
[13:54:34] [PASSED] 0x56BC (DG2)
[13:54:34] [PASSED] 0x56BD (DG2)
[13:54:34] [PASSED] 0x5693 (DG2)
[13:54:34] [PASSED] 0x5694 (DG2)
[13:54:34] [PASSED] 0x5695 (DG2)
[13:54:34] [PASSED] 0x56A3 (DG2)
[13:54:34] [PASSED] 0x56A4 (DG2)
[13:54:34] [PASSED] 0x56B2 (DG2)
[13:54:34] [PASSED] 0x56B3 (DG2)
[13:54:34] [PASSED] 0x5696 (DG2)
[13:54:34] [PASSED] 0x5697 (DG2)
[13:54:34] [PASSED] 0xB69 (PVC)
[13:54:34] [PASSED] 0xB6E (PVC)
[13:54:34] [PASSED] 0xBD4 (PVC)
[13:54:34] [PASSED] 0xBD5 (PVC)
[13:54:34] [PASSED] 0xBD6 (PVC)
[13:54:34] [PASSED] 0xBD7 (PVC)
[13:54:34] [PASSED] 0xBD8 (PVC)
[13:54:34] [PASSED] 0xBD9 (PVC)
[13:54:34] [PASSED] 0xBDA (PVC)
[13:54:34] [PASSED] 0xBDB (PVC)
[13:54:34] [PASSED] 0xBE0 (PVC)
[13:54:34] [PASSED] 0xBE1 (PVC)
[13:54:34] [PASSED] 0xBE5 (PVC)
[13:54:34] [PASSED] 0x7D40 (METEORLAKE)
[13:54:34] [PASSED] 0x7D45 (METEORLAKE)
[13:54:34] [PASSED] 0x7D55 (METEORLAKE)
[13:54:34] [PASSED] 0x7D60 (METEORLAKE)
[13:54:34] [PASSED] 0x7DD5 (METEORLAKE)
[13:54:34] [PASSED] 0x6420 (LUNARLAKE)
[13:54:34] [PASSED] 0x64A0 (LUNARLAKE)
[13:54:34] [PASSED] 0x64B0 (LUNARLAKE)
[13:54:34] [PASSED] 0xE202 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE209 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE20B (BATTLEMAGE)
[13:54:34] [PASSED] 0xE20C (BATTLEMAGE)
[13:54:34] [PASSED] 0xE20D (BATTLEMAGE)
[13:54:34] [PASSED] 0xE210 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE211 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE212 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE216 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE220 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE221 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE222 (BATTLEMAGE)
[13:54:34] [PASSED] 0xE223 (BATTLEMAGE)
[13:54:34] [PASSED] 0xB080 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB081 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB082 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB083 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB084 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB085 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB086 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB087 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB08F (PANTHERLAKE)
[13:54:34] [PASSED] 0xB090 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB0A0 (PANTHERLAKE)
[13:54:34] [PASSED] 0xB0B0 (PANTHERLAKE)
[13:54:34] [PASSED] 0xD740 (NOVALAKE_S)
[13:54:34] [PASSED] 0xD741 (NOVALAKE_S)
[13:54:34] [PASSED] 0xD742 (NOVALAKE_S)
[13:54:34] [PASSED] 0xD743 (NOVALAKE_S)
[13:54:34] [PASSED] 0xD744 (NOVALAKE_S)
[13:54:34] [PASSED] 0xD745 (NOVALAKE_S)
[13:54:34] [PASSED] 0x674C (CRESCENTISLAND)
[13:54:34] [PASSED] 0xFD80 (PANTHERLAKE)
[13:54:34] [PASSED] 0xFD81 (PANTHERLAKE)
[13:54:34] =============== [PASSED] check_platform_desc ===============
[13:54:34] ===================== [PASSED] xe_pci ======================
[13:54:34] =================== xe_rtp (2 subtests) ====================
[13:54:34] =============== xe_rtp_process_to_sr_tests ================
[13:54:34] [PASSED] coalesce-same-reg
[13:54:34] [PASSED] no-match-no-add
[13:54:34] [PASSED] match-or
[13:54:34] [PASSED] match-or-xfail
[13:54:34] [PASSED] no-match-no-add-multiple-rules
[13:54:34] [PASSED] two-regs-two-entries
[13:54:34] [PASSED] clr-one-set-other
[13:54:34] [PASSED] set-field
[13:54:34] [PASSED] conflict-duplicate
[13:54:34] [PASSED] conflict-not-disjoint
[13:54:34] [PASSED] conflict-reg-type
[13:54:34] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[13:54:34] ================== xe_rtp_process_tests ===================
[13:54:34] [PASSED] active1
[13:54:34] [PASSED] active2
[13:54:34] [PASSED] active-inactive
[13:54:34] [PASSED] inactive-active
[13:54:34] [PASSED] inactive-1st_or_active-inactive
[13:54:34] [PASSED] inactive-2nd_or_active-inactive
[13:54:34] [PASSED] inactive-last_or_active-inactive
[13:54:34] [PASSED] inactive-no_or_active-inactive
[13:54:34] ============== [PASSED] xe_rtp_process_tests ===============
[13:54:34] ===================== [PASSED] xe_rtp ======================
[13:54:34] ==================== xe_wa (1 subtest) =====================
[13:54:34] ======================== xe_wa_gt =========================
[13:54:34] [PASSED] TIGERLAKE B0
[13:54:34] [PASSED] DG1 A0
[13:54:34] [PASSED] DG1 B0
[13:54:34] [PASSED] ALDERLAKE_S A0
[13:54:34] [PASSED] ALDERLAKE_S B0
[13:54:34] [PASSED] ALDERLAKE_S C0
[13:54:34] [PASSED] ALDERLAKE_S D0
[13:54:34] [PASSED] ALDERLAKE_P A0
[13:54:34] [PASSED] ALDERLAKE_P B0
[13:54:34] [PASSED] ALDERLAKE_P C0
[13:54:34] [PASSED] ALDERLAKE_S RPLS D0
[13:54:34] [PASSED] ALDERLAKE_P RPLU E0
[13:54:34] [PASSED] DG2 G10 C0
[13:54:34] [PASSED] DG2 G11 B1
[13:54:34] [PASSED] DG2 G12 A1
[13:54:34] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[13:54:34] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[13:54:34] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[13:54:34] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[13:54:34] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[13:54:34] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[13:54:34] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[13:54:34] ==================== [PASSED] xe_wa_gt =====================
[13:54:34] ====================== [PASSED] xe_wa ======================
[13:54:34] ============================================================
[13:54:34] Testing complete. Ran 510 tests: passed: 492, skipped: 18
[13:54:34] Elapsed time: 42.133s total, 4.292s configuring, 37.374s building, 0.458s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[13:54:34] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[13:54:35] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=25
[13:55:06] Starting KUnit Kernel (1/1)...
[13:55:06] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[13:55:06] ============ drm_test_pick_cmdline (2 subtests) ============
[13:55:06] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[13:55:06] =============== drm_test_pick_cmdline_named ===============
[13:55:06] [PASSED] NTSC
[13:55:06] [PASSED] NTSC-J
[13:55:06] [PASSED] PAL
[13:55:06] [PASSED] PAL-M
[13:55:06] =========== [PASSED] drm_test_pick_cmdline_named ===========
[13:55:06] ============== [PASSED] drm_test_pick_cmdline ==============
[13:55:06] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[13:55:06] [ERROR] Test: drm_test_atomic_get_connector_for_encoder: missing expected subtest!
[13:55:06] ------------[ cut here ]------------
[13:55:06] WARNING: CPU: 0 PID: 28 at drivers/gpu/drm/drm_vblank.c:193 drm_crtc_vblank_crtc+0x94/0xa0
[13:55:06] drm-kunit-mock-device drm_test_drm_atomic_get_connector_for_encoder.drm-kunit-mock-device: [drm] drm_WARN_ON(!vblank)
[13:55:06] CPU: 0 UID: 0 PID: 28 Comm: kunit_try_catch Tainted: G W N 6.18.0-ge807bd2ceb31 #2 NONE
[13:55:06] Tainted: [W]=WARN, [N]=TEST
[13:55:06] Stack:
[13:55:06] 604c4d93 00000000 00000000 00000001
[13:55:06] ffffff00 604c4d93 602dc1a4 00000009
[13:55:06] 000000c1 60047084 600237b9 d238bc20
[13:55:06] Call Trace:
[13:55:06] [<602dc1a4>] ? drm_crtc_vblank_crtc+0x94/0xa0
[13:55:06] [<60047084>] ? dump_stack_lvl+0x5b/0x77
[13:55:06] [<600237b9>] ? _printk+0x0/0x65
[13:55:06] [<6001f07a>] ? __warn.cold+0x71/0x10b
[13:55:06] [<6001f1a8>] ? warn_slowpath_fmt+0x94/0xa1
[13:55:06] [<602a2f50>] ? drm_atomic_get_connector_state+0x0/0x2f0
[13:55:06] [<60055bf9>] ? um_set_signals+0x59/0x70
[13:55:06] [<602d5720>] ? __drm_dev_dbg+0x0/0xb0
[13:55:06] [<602dc1a4>] ? drm_crtc_vblank_crtc+0x94/0xa0
[13:55:06] [<602dc162>] ? drm_crtc_vblank_crtc+0x52/0xa0
[13:55:06] [<602dc3d7>] ? drm_calc_timestamping_constants+0x27/0x170
[13:55:06] [<60055ba0>] ? um_set_signals+0x0/0x70
[13:55:06] [<602dc3b0>] ? drm_calc_timestamping_constants+0x0/0x170
[13:55:06] [<602d5720>] ? __drm_dev_dbg+0x0/0xb0
[13:55:06] [<602ec9ac>] ? drm_atomic_helper_calc_timestamping_constants+0x6c/0x90
[13:55:06] [<602efb8c>] ? drm_atomic_helper_commit_modeset_disables+0x43c/0x7f0
[13:55:06] [<600ced00>] ? ktime_get+0x0/0x150
[13:55:06] [<602cfe70>] ? drm_modeset_backoff+0x0/0x1d0
[13:55:06] [<602f0853>] ? drm_atomic_helper_commit_tail+0x23/0xa0
[13:55:06] [<602f1a94>] ? commit_tail+0xf4/0x180
[13:55:06] [<60300b50>] ? drm_kunit_helper_enable_crtc_connector+0x0/0x140
[13:55:06] [<602f1ccf>] ? drm_atomic_helper_commit+0x18f/0x1d0
[13:55:06] [<602a5179>] ? drm_atomic_commit+0xb9/0xe0
[13:55:06] [<6003dbfc>] ? __drm_printfn_info+0x0/0x23
[13:55:06] [<60300eb0>] ? drm_test_drm_atomic_get_connector_for_encoder+0x220/0x590
[13:55:06] [<6008b2c6>] ? finish_task_switch.isra.0+0x76/0x1b0
[13:55:06] [<600cf280>] ? ktime_get_ts64+0x0/0x1a0
[13:55:06] [<60082650>] ? to_kthread+0x0/0x40
[13:55:06] [<6025306f>] ? kunit_try_run_case+0x7f/0x100
[13:55:06] [<60082650>] ? to_kthread+0x0/0x40
[13:55:06] [<602553c0>] ? kunit_generic_run_threadfn_adapter+0x0/0x30
[13:55:06] [<602553d6>] ? kunit_generic_run_threadfn_adapter+0x16/0x30
[13:55:06] [<60083035>] ? kthread+0xf5/0x270
[13:55:06] [<60049595>] ? new_thread_handler+0x45/0x60
[13:55:06] ---[ end trace 0000000000000000 ]---
[13:55:06] ------------[ cut here ]------------
[13:55:06] WARNING: CPU: 0 PID: 28 at drivers/gpu/drm/drm_vblank.c:193 drm_crtc_vblank_crtc+0x94/0xa0
[13:55:06] drm-kunit-mock-device drm_test_drm_atomic_get_connector_for_encoder.drm-kunit-mock-device: [drm] drm_WARN_ON(!vblank)
[13:55:06] CPU: 0 UID: 0 PID: 28 Comm: kunit_try_catch Tainted: G W N 6.18.0-ge807bd2ceb31 #2 NONE
[13:55:06] Tainted: [W]=WARN, [N]=TEST
[13:55:06] Stack:
[13:55:06] 604c4d93 00000000 00000000 00000000
[13:55:06] ffffff00 604c4d93 602dc1a4 00000009
[13:55:06] 000000c1 60047084 600237b9 d238bc90
[13:55:06] Call Trace:
[13:55:06] [<602dc1a4>] ? drm_crtc_vblank_crtc+0x94/0xa0
[13:55:06] [<60047084>] ? dump_stack_lvl+0x5b/0x77
[13:55:06] [<600237b9>] ? _printk+0x0/0x65
[13:55:06] [<6001f07a>] ? __warn.cold+0x71/0x10b
[13:55:06] [<6001f1a8>] ? warn_slowpath_fmt+0x94/0xa1
[13:55:06] [<602dc3d7>] ? drm_calc_timestamping_constants+0x27/0x170
[13:55:06] [<60055ba0>] ? um_set_signals+0x0/0x70
[13:55:06] [<602dc1a4>] ? drm_crtc_vblank_crtc+0x94/0xa0
[13:55:06] [<602dc162>] ? drm_crtc_vblank_crtc+0x52/0xa0
[13:55:06] [<602dc64a>] ? drm_crtc_send_vblank_event+0x1a/0x80
[13:55:06] [<60055ba0>] ? um_set_signals+0x0/0x70
[13:55:06] [<602ecffc>] ? drm_atomic_helper_fake_vblank+0x8c/0xd0
[13:55:06] [<600ced00>] ? ktime_get+0x0/0x150
[13:55:06] [<602cfe70>] ? drm_modeset_backoff+0x0/0x1d0
[13:55:06] [<602f0888>] ? drm_atomic_helper_commit_tail+0x58/0xa0
[13:55:06] [<602f1a94>] ? commit_tail+0xf4/0x180
[13:55:06] [<60300b50>] ? drm_kunit_helper_enable_crtc_connector+0x0/0x140
[13:55:06] [<602f1ccf>] ? drm_atomic_helper_commit+0x18f/0x1d0
[13:55:06] [<602a5179>] ? drm_atomic_commit+0xb9/0xe0
[13:55:06] [<6003dbfc>] ? __drm_printfn_info+0x0/0x23
[13:55:06] [<60300eb0>] ? drm_test_drm_atomic_get_connector_for_encoder+0x220/0x590
[13:55:06] [<6008b2c6>] ? finish_task_switch.isra.0+0x76/0x1b0
[13:55:06] [<600cf280>] ? ktime_get_ts64+0x0/0x1a0
[13:55:06] [<60082650>] ? to_kthread+0x0/0x40
[13:55:06] [<6025306f>] ? kunit_try_run_case+0x7f/0x100
[13:55:06] [<60082650>] ? to_kthread+0x0/0x40
[13:55:06] [<602553c0>] ? kunit_generic_run_threadfn_adapter+0x0/0x30
[13:55:06] [<602553d6>] ? kunit_generic_run_threadfn_adapter+0x16/0x30
[13:55:06] [<60083035>] ? kthread+0xf5/0x270
[13:55:06] [<60049595>] ? new_thread_handler+0x45/0x60
[13:55:06] ---[ end trace 0000000000000000 ]---
[13:55:06]
[13:55:06] Pid: 28, comm: kunit_try_catch Tainted: G W N 6.18.0-ge807bd2ceb31
[13:55:06] RIP: 0033:drm_crtc_send_vblank_event+0x3f/0x80
[13:55:06] RSP: 00000000d238bd30 EFLAGS: 00010246
[13:55:06] RAX: 00000000061fb280 RBX: 0000000000000000 RCX: 00000000061fb280
[13:55:06] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
[13:55:06] RBP: 0000000092aecd80 R08: 0000000000000000 R09: 0000000000000000
[13:55:06] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000092a48000
[13:55:06] R13: 0000000092aece00 R14: 0000000092880828 R15: 0000000000000001
[13:55:06] Kernel panic - not syncing: Segfault with no mm
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: drm_test_atomic_get_connector_for_encoder: missing subtest result line!
[13:55:06] # module: drm_atomic_test
[13:55:06] === [CRASHED] drm_test_atomic_get_connector_for_encoder ====
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] [ERROR] Test: main: missing expected subtest!
[13:55:06] [CRASHED]
[13:55:06] ============================================================
[13:55:06] Testing complete. Ran 41 tests: passed: 5, crashed: 36, errors: 37
The kernel seems to have crashed; you can decode the stack traces with:
$ scripts/decode_stacktrace.sh .kunit/vmlinux .kunit < .kunit/test.log | tee .kunit/decoded.log | /kernel/tools/testing/kunit/kunit.py parse
[13:55:06] Elapsed time: 32.044s total, 1.631s configuring, 30.095s building, 0.318s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH v2 14/25] drm/vblank: pass vblank to drm_vblank_count_and_time()
2025-12-04 10:57 ` [PATCH v2 14/25] drm/vblank: pass vblank to drm_vblank_count_and_time() Jani Nikula
@ 2025-12-05 5:18 ` kernel test robot
0 siblings, 0 replies; 35+ messages in thread
From: kernel test robot @ 2025-12-05 5:18 UTC (permalink / raw)
To: Jani Nikula, intel-gfx, intel-xe
Cc: llvm, oe-kbuild-all, tzimmermann, ville.syrjala, Jani Nikula
Hi Jani,
kernel test robot noticed the following build warnings:
[auto build test WARNING on drm-misc/drm-misc-next]
[also build test WARNING on drm-i915/for-linux-next drm-tip/drm-tip linus/master next-20251204]
[cannot apply to drm-i915/for-linux-next-fixes v6.18]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Jani-Nikula/drm-vblank-Unexport-drm_wait_one_vblank/20251204-195701
base: https://gitlab.freedesktop.org/drm/misc/kernel.git drm-misc-next
patch link: https://lore.kernel.org/r/2d2d9b12117be566ac63b9e67b79e50de4924ecc.1764845757.git.jani.nikula%40intel.com
patch subject: [PATCH v2 14/25] drm/vblank: pass vblank to drm_vblank_count_and_time()
config: i386-buildonly-randconfig-002-20251205 (https://download.01.org/0day-ci/archive/20251205/202512051216.oxayTqRt-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251205/202512051216.oxayTqRt-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202512051216.oxayTqRt-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> Warning: drivers/gpu/drm/drm_vblank.c:956 function parameter 'vblank' not described in 'drm_vblank_crtc_count_and_time'
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 35+ messages in thread
end of thread, other threads:[~2025-12-05 5:19 UTC | newest]
Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-04 10:57 [PATCH v2 00/25] drm/vblank: refactoring and cleanups Jani Nikula
2025-12-04 10:57 ` [PATCH v2 01/25] drm/vblank: Unexport drm_wait_one_vblank() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 02/25] drm/vblank: remove drm_wait_one_vblank() completely Jani Nikula
2025-12-04 10:57 ` [PATCH v2 03/25] drm/vblank: remove superfluous pipe check Jani Nikula
2025-12-04 10:57 ` [PATCH v2 04/25] drm/vblank: add return value to drm_crtc_wait_one_vblank() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 05/25] drm/vblank: limit vblank variable scope to atomic Jani Nikula
2025-12-04 10:57 ` [PATCH v2 06/25] drm/vblank: use the drm_vblank_crtc() and drm_crtc_vblank_crtc() helpers more Jani Nikula
2025-12-04 10:57 ` [PATCH v2 07/25] drm/vblank: prefer drm_crtc_vblank_crtc() over drm_vblank_crtc() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 08/25] drm/vblank: pass vlank to drm_vblank_get()/_put()/_count() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 09/25] drm/vblank: pass vblank to drm_update_vblank_count() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 10/25] drm/vblank: pass vblank to drm_handle_vblank_events() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 11/25] drm/vblank: use the vblank based interfaces more Jani Nikula
2025-12-04 10:57 ` [PATCH v2 12/25] drm/vblank: pass vblank to drm_queue_vblank_event() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 13/25] drm/vblank: pass vblank to drm_wait_vblank_reply() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 14/25] drm/vblank: pass vblank to drm_vblank_count_and_time() Jani Nikula
2025-12-05 5:18 ` kernel test robot
2025-12-04 10:57 ` [PATCH v2 15/25] drm/vblank: pass vblank to drm_reset_vblank_timestamp() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 16/25] drm/vblank: pass vblank to store_vblank() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 17/25] drm/vblank: pass vblank to drm_vblank_enable() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 18/25] drm/vblank: merge drm_vblank_restore() into drm_crtc_vblank_restore() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 19/25] drm/vblank: add drm_crtc_from_vblank() helper Jani Nikula
2025-12-04 10:57 ` [PATCH v2 20/25] drm/vblank: pass vblank to __get_vblank_counter() and drm_max_vblank_count() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 21/25] drm/vblank: pass vblank to __{enable, disable}_vblank() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 22/25] drm/vblank: pass vblank to drm_get_last_vbltimestamp() Jani Nikula
2025-12-04 10:57 ` [PATCH v2 23/25] drm/vblank: pass vblank to drm_vblank_disable_and_save(), make static Jani Nikula
2025-12-04 10:57 ` [PATCH v2 24/25] drm/vblank: reduce pipe checks Jani Nikula
2025-12-04 10:57 ` [PATCH v2 25/25] drm/vblank: clean up debug logging Jani Nikula
2025-12-04 12:21 ` ✓ i915.CI.BAT: success for drm/vblank: refactoring and cleanups (rev2) Patchwork
2025-12-04 12:46 ` [PATCH v2 00/25] drm/vblank: refactoring and cleanups Thomas Zimmermann
2025-12-04 12:57 ` Jani Nikula
2025-12-04 13:06 ` Thomas Zimmermann
2025-12-04 13:07 ` Thomas Zimmermann
2025-12-04 13:12 ` Jani Nikula
2025-12-04 13:15 ` Thomas Zimmermann
2025-12-04 13:55 ` ✗ CI.KUnit: failure for drm/vblank: refactoring and cleanups (rev2) Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.