* [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
2023-06-21 11:48 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
@ 2023-06-21 11:48 ` Maarten Lankhorst
2023-06-21 23:09 ` kernel test robot
2023-06-21 23:40 ` kernel test robot
0 siblings, 2 replies; 11+ messages in thread
From: Maarten Lankhorst @ 2023-06-21 11:48 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 15 ++++++++++++++-
.../gpu/drm/i915/display/intel_display_types.h | 2 +-
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 43bcd3d011bf5..3927dfb894c1a 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -6864,6 +6864,9 @@ static void intel_atomic_cleanup_work(struct work_struct *work)
struct intel_crtc *crtc;
int i;
+ if (state->cursor_update)
+ drm_atomic_helper_wait_for_flip_done(dev, &state->base);
+
for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i)
intel_color_cleanup_commit(old_crtc_state);
@@ -7062,7 +7065,8 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
* - switch over to the vblank wait helper in the core after that since
* we don't need out special handling any more.
*/
- drm_atomic_helper_wait_for_flip_done(dev, &state->base);
+ if (!state->cursor_update)
+ drm_atomic_helper_wait_for_flip_done(dev, &state->base);
for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
if (new_crtc_state->do_async_flip)
@@ -7247,6 +7251,15 @@ int intel_atomic_commit(struct drm_device *dev, struct drm_atomic_state *_state,
state->base.legacy_cursor_update = false;
}
+ if (state->base.legacy_cursor_update) {
+ /*
+ * If this is a legacy cursor update, handle like a normal update,
+ * but wait before calling cleanup
+ */
+ state->base.legacy_cursor_update = false;
+ state->cursor_update = true;
+ }
+
ret = intel_atomic_prepare_commit(state);
if (ret) {
drm_dbg_atomic(&dev_priv->drm,
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index c85cf8adc7a69..01f7c8d24179c 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -646,7 +646,7 @@ struct intel_atomic_state {
/* Internal commit, as opposed to userspace/client initiated one */
bool internal;
- bool dpll_set, modeset;
+ bool dpll_set, modeset, cursor_update;
struct intel_shared_dpll_state shared_dpll[I915_NUM_PLLS];
--
2.39.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
2023-06-21 11:48 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
@ 2023-06-21 23:09 ` kernel test robot
2023-06-21 23:40 ` kernel test robot
1 sibling, 0 replies; 11+ messages in thread
From: kernel test robot @ 2023-06-21 23:09 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx; +Cc: oe-kbuild-all
Hi Maarten,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-tip/drm-tip]
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-i915-Handle-legacy-cursor-update-as-normal-update/20230621-195009
base: git://anongit.freedesktop.org/drm/drm-tip drm-tip
patch link: https://lore.kernel.org/r/20230621114827.167713-2-maarten.lankhorst%40linux.intel.com
patch subject: [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20230622/202306220634.fnI3oGxP-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230622/202306220634.fnI3oGxP-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/202306220634.fnI3oGxP-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/gpu/drm/i915/display/intel_display.c: In function 'intel_atomic_cleanup_work':
>> drivers/gpu/drm/i915/display/intel_display.c:6900:54: error: 'dev' undeclared (first use in this function); did you mean 'cdev'?
6900 | drm_atomic_helper_wait_for_flip_done(dev, &state->base);
| ^~~
| cdev
drivers/gpu/drm/i915/display/intel_display.c:6900:54: note: each undeclared identifier is reported only once for each function it appears in
vim +6900 drivers/gpu/drm/i915/display/intel_display.c
6889
6890 static void intel_atomic_cleanup_work(struct work_struct *work)
6891 {
6892 struct intel_atomic_state *state =
6893 container_of(work, struct intel_atomic_state, base.commit_work);
6894 struct drm_i915_private *i915 = to_i915(state->base.dev);
6895 struct intel_crtc_state *old_crtc_state;
6896 struct intel_crtc *crtc;
6897 int i;
6898
6899 if (state->cursor_update)
> 6900 drm_atomic_helper_wait_for_flip_done(dev, &state->base);
6901
6902 for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i)
6903 intel_color_cleanup_commit(old_crtc_state);
6904
6905 drm_atomic_helper_cleanup_planes(&i915->drm, &state->base);
6906 drm_atomic_helper_commit_cleanup_done(&state->base);
6907 drm_atomic_state_put(&state->base);
6908
6909 intel_atomic_helper_free_state(i915);
6910 }
6911
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
2023-06-21 11:48 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
2023-06-21 23:09 ` kernel test robot
@ 2023-06-21 23:40 ` kernel test robot
1 sibling, 0 replies; 11+ messages in thread
From: kernel test robot @ 2023-06-21 23:40 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx; +Cc: llvm, oe-kbuild-all
Hi Maarten,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-tip/drm-tip]
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-i915-Handle-legacy-cursor-update-as-normal-update/20230621-195009
base: git://anongit.freedesktop.org/drm/drm-tip drm-tip
patch link: https://lore.kernel.org/r/20230621114827.167713-2-maarten.lankhorst%40linux.intel.com
patch subject: [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20230622/202306220703.F8iGFXoT-lkp@intel.com/config)
compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project.git 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a)
reproduce: (https://download.01.org/0day-ci/archive/20230622/202306220703.F8iGFXoT-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/202306220703.F8iGFXoT-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/gpu/drm/i915/display/intel_display.c:6900:40: error: use of undeclared identifier 'dev'
drm_atomic_helper_wait_for_flip_done(dev, &state->base);
^
1 error generated.
vim +/dev +6900 drivers/gpu/drm/i915/display/intel_display.c
6889
6890 static void intel_atomic_cleanup_work(struct work_struct *work)
6891 {
6892 struct intel_atomic_state *state =
6893 container_of(work, struct intel_atomic_state, base.commit_work);
6894 struct drm_i915_private *i915 = to_i915(state->base.dev);
6895 struct intel_crtc_state *old_crtc_state;
6896 struct intel_crtc *crtc;
6897 int i;
6898
6899 if (state->cursor_update)
> 6900 drm_atomic_helper_wait_for_flip_done(dev, &state->base);
6901
6902 for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i)
6903 intel_color_cleanup_commit(old_crtc_state);
6904
6905 drm_atomic_helper_cleanup_planes(&i915->drm, &state->base);
6906 drm_atomic_helper_commit_cleanup_done(&state->base);
6907 drm_atomic_state_put(&state->base);
6908
6909 intel_atomic_helper_free_state(i915);
6910 }
6911
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
2023-06-29 15:35 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
@ 2023-06-29 15:35 ` Maarten Lankhorst
0 siblings, 0 replies; 11+ messages in thread
From: Maarten Lankhorst @ 2023-06-29 15:35 UTC (permalink / raw)
To: intel-gfx
Move hw_done to cleanup, to ensure we only unpin cursor fb after we
received a flip event. This disables the legacy_cursor_update immediate
completion of flip_done events, and waits for flip_done before cleaning
up.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 15 ++++++++++++++-
.../gpu/drm/i915/display/intel_display_types.h | 2 +-
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 43bcd3d011bf5..38c3eb8d95789 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -6864,6 +6864,9 @@ static void intel_atomic_cleanup_work(struct work_struct *work)
struct intel_crtc *crtc;
int i;
+ if (state->cursor_update)
+ drm_atomic_helper_wait_for_flip_done(&i915->drm, &state->base);
+
for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i)
intel_color_cleanup_commit(old_crtc_state);
@@ -7062,7 +7065,8 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
* - switch over to the vblank wait helper in the core after that since
* we don't need out special handling any more.
*/
- drm_atomic_helper_wait_for_flip_done(dev, &state->base);
+ if (!state->cursor_update)
+ drm_atomic_helper_wait_for_flip_done(dev, &state->base);
for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
if (new_crtc_state->do_async_flip)
@@ -7247,6 +7251,15 @@ int intel_atomic_commit(struct drm_device *dev, struct drm_atomic_state *_state,
state->base.legacy_cursor_update = false;
}
+ if (state->base.legacy_cursor_update) {
+ /*
+ * If this is a legacy cursor update, handle like a normal update,
+ * but wait before calling cleanup
+ */
+ state->base.legacy_cursor_update = false;
+ state->cursor_update = true;
+ }
+
ret = intel_atomic_prepare_commit(state);
if (ret) {
drm_dbg_atomic(&dev_priv->drm,
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index c85cf8adc7a69..01f7c8d24179c 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -646,7 +646,7 @@ struct intel_atomic_state {
/* Internal commit, as opposed to userspace/client initiated one */
bool internal;
- bool dpll_set, modeset;
+ bool dpll_set, modeset, cursor_update;
struct intel_shared_dpll_state shared_dpll[I915_NUM_PLLS];
--
2.39.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update
@ 2023-08-10 12:41 Maarten Lankhorst
2023-08-10 12:41 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
` (3 more replies)
0 siblings, 4 replies; 11+ messages in thread
From: Maarten Lankhorst @ 2023-08-10 12:41 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_cursor.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c b/drivers/gpu/drm/i915/display/intel_cursor.c
index b342fad180ca..ab25f019eda1 100644
--- a/drivers/gpu/drm/i915/display/intel_cursor.c
+++ b/drivers/gpu/drm/i915/display/intel_cursor.c
@@ -688,9 +688,8 @@ intel_legacy_cursor_update(struct drm_plane *_plane,
if (ret)
goto out_free;
- ret = intel_plane_pin_fb(new_plane_state);
- if (ret)
- goto out_free;
+ /* magic trick! */
+ swap(new_plane_state->ggtt_vma, old_plane_state->ggtt_vma);
intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
ORIGIN_CURSOR_UPDATE);
--
2.39.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
2023-08-10 12:41 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
@ 2023-08-10 12:41 ` Maarten Lankhorst
2023-08-10 18:10 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update Patchwork
` (2 subsequent siblings)
3 siblings, 0 replies; 11+ messages in thread
From: Maarten Lankhorst @ 2023-08-10 12:41 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
Abuse the vblank worker to make the changes as small as possible. We
need a way to sync flip_done, but if we wait on flip_done, all async
tests start failing.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_crtc.c | 21 ++++++++++++++------
drivers/gpu/drm/i915/display/intel_crtc.h | 6 ++++--
drivers/gpu/drm/i915/display/intel_display.c | 10 +++++++---
3 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c
index 182c6dd64f47..2adcce303271 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc.c
@@ -389,8 +389,13 @@ int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe)
return ret;
}
-static bool intel_crtc_needs_vblank_work(const struct intel_crtc_state *crtc_state)
+static bool intel_crtc_needs_vblank_work(const struct intel_atomic_state *state,
+ const struct intel_crtc_state *crtc_state)
{
+ /* Always init for legacy cursor update, so we can sync on teardown */
+ if (state->base.legacy_cursor_update)
+ return true;
+
return crtc_state->hw.active &&
!intel_crtc_needs_modeset(crtc_state) &&
!crtc_state->preload_luts &&
@@ -438,7 +443,7 @@ void intel_wait_for_vblank_workers(struct intel_atomic_state *state)
int i;
for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
- if (!intel_crtc_needs_vblank_work(crtc_state))
+ if (!intel_crtc_needs_vblank_work(state, crtc_state))
continue;
drm_vblank_work_flush(&crtc_state->vblank_work);
@@ -470,6 +475,7 @@ static int intel_mode_vblank_start(const struct drm_display_mode *mode)
/**
* intel_pipe_update_start() - start update of a set of display registers
+ * @state: the intel atomic state
* @new_crtc_state: the new crtc state
*
* Mark the start of an update to pipe registers that should be updated
@@ -480,7 +486,8 @@ static int intel_mode_vblank_start(const struct drm_display_mode *mode)
* until a subsequent call to intel_pipe_update_end(). That is done to
* avoid random delays.
*/
-void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state)
+void intel_pipe_update_start(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
@@ -497,7 +504,7 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state)
if (new_crtc_state->do_async_flip)
return;
- if (intel_crtc_needs_vblank_work(new_crtc_state))
+ if (intel_crtc_needs_vblank_work(state, new_crtc_state))
intel_crtc_vblank_work_init(new_crtc_state);
if (new_crtc_state->vrr.enable) {
@@ -631,13 +638,15 @@ static void dbg_vblank_evade(struct intel_crtc *crtc, ktime_t end) {}
/**
* intel_pipe_update_end() - end update of a set of display registers
+ * @state: the intel atomic state
* @new_crtc_state: the new crtc state
*
* Mark the end of an update started with intel_pipe_update_start(). This
* re-enables interrupts and verifies the update was actually completed
* before a vblank.
*/
-void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state)
+void intel_pipe_update_end(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
enum pipe pipe = crtc->pipe;
@@ -665,7 +674,7 @@ void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state)
* Would be slightly nice to just grab the vblank count and arm the
* event outside of the critical section - the spinlock might spin for a
* while ... */
- if (intel_crtc_needs_vblank_work(new_crtc_state)) {
+ if (intel_crtc_needs_vblank_work(state, new_crtc_state)) {
drm_vblank_work_schedule(&new_crtc_state->vblank_work,
drm_crtc_accurate_vblank_count(&crtc->base) + 1,
false);
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.h b/drivers/gpu/drm/i915/display/intel_crtc.h
index 51a4c8df9e65..ca7f45a454a0 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.h
+++ b/drivers/gpu/drm/i915/display/intel_crtc.h
@@ -36,8 +36,10 @@ void intel_crtc_state_reset(struct intel_crtc_state *crtc_state,
u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc);
void intel_crtc_vblank_on(const struct intel_crtc_state *crtc_state);
void intel_crtc_vblank_off(const struct intel_crtc_state *crtc_state);
-void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state);
-void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state);
+void intel_pipe_update_start(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state);
+void intel_pipe_update_end(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state);
void intel_wait_for_vblank_workers(struct intel_atomic_state *state);
struct intel_crtc *intel_first_crtc(struct drm_i915_private *i915);
struct intel_crtc *intel_crtc_for_pipe(struct drm_i915_private *i915,
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 763ab569d8f3..e1ca1f9c3941 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -6604,7 +6604,7 @@ static void intel_update_crtc(struct intel_atomic_state *state,
intel_crtc_planes_update_noarm(state, crtc);
/* Perform vblank evasion around commit operation */
- intel_pipe_update_start(new_crtc_state);
+ intel_pipe_update_start(state, new_crtc_state);
commit_pipe_pre_planes(state, crtc);
@@ -6612,7 +6612,7 @@ static void intel_update_crtc(struct intel_atomic_state *state,
commit_pipe_post_planes(state, crtc);
- intel_pipe_update_end(new_crtc_state);
+ intel_pipe_update_end(state, new_crtc_state);
/*
* We usually enable FIFO underrun interrupts as part of the
@@ -6895,6 +6895,9 @@ static void intel_atomic_cleanup_work(struct work_struct *work)
struct intel_crtc *crtc;
int i;
+ if (state->base.legacy_cursor_update)
+ intel_wait_for_vblank_workers(state);
+
for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i)
intel_color_cleanup_commit(old_crtc_state);
@@ -7056,7 +7059,8 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
if (state->modeset)
intel_set_cdclk_post_plane_update(state);
- intel_wait_for_vblank_workers(state);
+ if (!state->base.legacy_cursor_update)
+ intel_wait_for_vblank_workers(state);
/* FIXME: We should call drm_atomic_helper_commit_hw_done() here
* already, but still need the state for the delayed optimization. To
--
2.39.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update
2023-08-10 12:41 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
2023-08-10 12:41 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
@ 2023-08-10 18:10 ` Patchwork
2023-08-10 18:11 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2023-08-10 18:27 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
3 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2023-08-10 18:10 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update
URL : https://patchwork.freedesktop.org/series/122286/
State : warning
== Summary ==
Error: dim checkpatch failed
/home/kbuild/linux/maintainer-tools/dim: line 50: /home/kbuild/.dimrc: No such file or directory
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update
2023-08-10 12:41 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
2023-08-10 12:41 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
2023-08-10 18:10 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update Patchwork
@ 2023-08-10 18:11 ` Patchwork
2023-08-10 18:27 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
3 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2023-08-10 18:11 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Series Details ==
Series: series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update
URL : https://patchwork.freedesktop.org/series/122286/
State : warning
== Summary ==
Error: dim sparse failed
/home/kbuild/linux/maintainer-tools/dim: line 50: /home/kbuild/.dimrc: No such file or directory
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BAT: failure for series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update
2023-08-10 12:41 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
` (2 preceding siblings ...)
2023-08-10 18:11 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
@ 2023-08-10 18:27 ` Patchwork
3 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2023-08-10 18:27 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 11868 bytes --]
== Series Details ==
Series: series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update
URL : https://patchwork.freedesktop.org/series/122286/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_13500 -> Patchwork_122286v1
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_122286v1 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_122286v1, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/index.html
Participating hosts (42 -> 41)
------------------------------
Missing (1): fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_122286v1:
### IGT changes ###
#### Possible regressions ####
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- fi-pnv-d510: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-pnv-d510/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-pnv-d510/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
- fi-blb-e6850: [PASS][3] -> [INCOMPLETE][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-blb-e6850/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-blb-e6850/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_force_connector_basic@force-load-detect:
- fi-elk-e7500: [PASS][5] -> [INCOMPLETE][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-elk-e7500/igt@kms_force_connector_basic@force-load-detect.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-elk-e7500/igt@kms_force_connector_basic@force-load-detect.html
- fi-hsw-4770: [PASS][7] -> [ABORT][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-hsw-4770/igt@kms_force_connector_basic@force-load-detect.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-hsw-4770/igt@kms_force_connector_basic@force-load-detect.html
- fi-ivb-3770: [PASS][9] -> [ABORT][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-ivb-3770/igt@kms_force_connector_basic@force-load-detect.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-ivb-3770/igt@kms_force_connector_basic@force-load-detect.html
- fi-ilk-650: [PASS][11] -> [INCOMPLETE][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-ilk-650/igt@kms_force_connector_basic@force-load-detect.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-ilk-650/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_psr@cursor_plane_move:
- bat-mtlp-8: [PASS][13] -> [ABORT][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-mtlp-8/igt@kms_psr@cursor_plane_move.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-mtlp-8/igt@kms_psr@cursor_plane_move.html
- bat-jsl-1: [PASS][15] -> [ABORT][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-jsl-1/igt@kms_psr@cursor_plane_move.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-jsl-1/igt@kms_psr@cursor_plane_move.html
- bat-adln-1: [PASS][17] -> [ABORT][18]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-adln-1/igt@kms_psr@cursor_plane_move.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-adln-1/igt@kms_psr@cursor_plane_move.html
- fi-skl-6600u: [PASS][19] -> [ABORT][20]
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-skl-6600u/igt@kms_psr@cursor_plane_move.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-skl-6600u/igt@kms_psr@cursor_plane_move.html
- bat-jsl-3: [PASS][21] -> [ABORT][22]
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-jsl-3/igt@kms_psr@cursor_plane_move.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-jsl-3/igt@kms_psr@cursor_plane_move.html
Known issues
------------
Here are the changes found in Patchwork_122286v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@core_auth@basic-auth:
- bat-adlp-11: NOTRUN -> [ABORT][23] ([i915#8011])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-adlp-11/igt@core_auth@basic-auth.html
* igt@i915_pm_rpm@module-reload:
- fi-skl-guc: [PASS][24] -> [FAIL][25] ([i915#7940])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-skl-guc/igt@i915_pm_rpm@module-reload.html
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-skl-guc/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live@requests:
- bat-rpls-1: [PASS][26] -> [ABORT][27] ([i915#4983] / [i915#7911] / [i915#7920])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-rpls-1/igt@i915_selftest@live@requests.html
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-rpls-1/igt@i915_selftest@live@requests.html
* igt@i915_selftest@live@reset:
- bat-rpls-2: NOTRUN -> [ABORT][28] ([i915#4983] / [i915#7461] / [i915#7913] / [i915#8347])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-rpls-2/igt@i915_selftest@live@reset.html
* igt@kms_chamelium_hpd@common-hpd-after-suspend:
- bat-dg2-11: NOTRUN -> [SKIP][29] ([i915#7828])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-dg2-11/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
* igt@kms_pipe_crc_basic@suspend-read-crc:
- fi-bsw-nick: NOTRUN -> [SKIP][30] ([fdo#109271]) +1 similar issue
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-bsw-nick/igt@kms_pipe_crc_basic@suspend-read-crc.html
* igt@kms_psr@primary_mmap_gtt:
- bat-rplp-1: NOTRUN -> [ABORT][31] ([i915#8442] / [i915#8668])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-rplp-1/igt@kms_psr@primary_mmap_gtt.html
#### Possible fixes ####
* igt@i915_pm_rpm@basic-pci-d3-state:
- bat-adlp-9: [FAIL][32] ([i915#7940]) -> [PASS][33]
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-adlp-9/igt@i915_pm_rpm@basic-pci-d3-state.html
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-adlp-9/igt@i915_pm_rpm@basic-pci-d3-state.html
* igt@i915_pm_rpm@basic-rte:
- fi-tgl-1115g4: [FAIL][34] ([i915#7940]) -> [PASS][35]
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-tgl-1115g4/igt@i915_pm_rpm@basic-rte.html
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-tgl-1115g4/igt@i915_pm_rpm@basic-rte.html
* igt@i915_pm_rpm@module-reload:
- fi-kbl-7567u: [FAIL][36] ([i915#7940]) -> [PASS][37]
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-kbl-7567u/igt@i915_pm_rpm@module-reload.html
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-kbl-7567u/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live@execlists:
- fi-bsw-nick: [ABORT][38] ([i915#7911] / [i915#7913]) -> [PASS][39]
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/fi-bsw-nick/igt@i915_selftest@live@execlists.html
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/fi-bsw-nick/igt@i915_selftest@live@execlists.html
* igt@i915_selftest@live@gt_lrc:
- bat-dg2-11: [INCOMPLETE][40] ([i915#7609] / [i915#7913]) -> [PASS][41]
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-dg2-11/igt@i915_selftest@live@gt_lrc.html
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-dg2-11/igt@i915_selftest@live@gt_lrc.html
* igt@i915_selftest@live@migrate:
- bat-atsm-1: [DMESG-FAIL][42] ([i915#7699] / [i915#7913]) -> [PASS][43]
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-atsm-1/igt@i915_selftest@live@migrate.html
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-atsm-1/igt@i915_selftest@live@migrate.html
* igt@i915_selftest@live@requests:
- bat-rpls-2: [ABORT][44] ([i915#4983] / [i915#7913]) -> [PASS][45]
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-rpls-2/igt@i915_selftest@live@requests.html
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-rpls-2/igt@i915_selftest@live@requests.html
- bat-mtlp-6: [DMESG-FAIL][46] ([i915#8497]) -> [PASS][47]
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-mtlp-6/igt@i915_selftest@live@requests.html
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-mtlp-6/igt@i915_selftest@live@requests.html
#### Warnings ####
* igt@i915_module_load@load:
- bat-adlp-11: [ABORT][48] ([i915#4423]) -> [DMESG-WARN][49] ([i915#4423])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-adlp-11/igt@i915_module_load@load.html
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-adlp-11/igt@i915_module_load@load.html
* igt@kms_psr@sprite_plane_onoff:
- bat-rplp-1: [ABORT][50] ([i915#8442] / [i915#8668] / [i915#8712]) -> [SKIP][51] ([i915#1072])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13500/bat-rplp-1/igt@kms_psr@sprite_plane_onoff.html
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/bat-rplp-1/igt@kms_psr@sprite_plane_onoff.html
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
[i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
[i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461
[i915#7609]: https://gitlab.freedesktop.org/drm/intel/issues/7609
[i915#7699]: https://gitlab.freedesktop.org/drm/intel/issues/7699
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#7911]: https://gitlab.freedesktop.org/drm/intel/issues/7911
[i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
[i915#7920]: https://gitlab.freedesktop.org/drm/intel/issues/7920
[i915#7940]: https://gitlab.freedesktop.org/drm/intel/issues/7940
[i915#8011]: https://gitlab.freedesktop.org/drm/intel/issues/8011
[i915#8347]: https://gitlab.freedesktop.org/drm/intel/issues/8347
[i915#8442]: https://gitlab.freedesktop.org/drm/intel/issues/8442
[i915#8497]: https://gitlab.freedesktop.org/drm/intel/issues/8497
[i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668
[i915#8712]: https://gitlab.freedesktop.org/drm/intel/issues/8712
Build changes
-------------
* Linux: CI_DRM_13500 -> Patchwork_122286v1
CI-20190529: 20190529
CI_DRM_13500: 4be6c76008410cf6ada52b25cb4bc4280bc3a3ee @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7426: 67e7470eb79ca386087775d0b1b51c164abbf9c8 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_122286v1: 4be6c76008410cf6ada52b25cb4bc4280bc3a3ee @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
4dfe6044b99d drm/i915: Handle legacy cursor update as normal update
c949c78be725 drm/i915: Swap ggtt_vma during legacy cursor update
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_122286v1/index.html
[-- Attachment #2: Type: text/html, Size: 13977 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
2023-08-14 6:50 [Intel-gfx] [PATCH 1/2] " Maarten Lankhorst
@ 2023-08-14 6:50 ` Maarten Lankhorst
2023-08-18 8:37 ` kernel test robot
0 siblings, 1 reply; 11+ messages in thread
From: Maarten Lankhorst @ 2023-08-14 6:50 UTC (permalink / raw)
To: intel-gfx
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Abuse the vblank worker to make the changes as small as possible. We
need a way to sync flip_done, but if we wait on flip_done, all async
tests start failing.
Changes since v1:
- Prevent null deref when crtc is inactive.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_crtc.c | 28 +++++++++++++-------
drivers/gpu/drm/i915/display/intel_crtc.h | 6 +++--
drivers/gpu/drm/i915/display/intel_display.c | 10 ++++---
3 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c
index f06b987f5558..be6959c6eb0d 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc.c
@@ -389,11 +389,17 @@ int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe)
return ret;
}
-static bool intel_crtc_needs_vblank_work(const struct intel_crtc_state *crtc_state)
+static bool intel_crtc_needs_vblank_work(const struct intel_atomic_state *state,
+ const struct intel_crtc_state *crtc_state)
{
- return crtc_state->hw.active &&
- !intel_crtc_needs_modeset(crtc_state) &&
- !crtc_state->preload_luts &&
+ if (!crtc_state->hw.active || intel_crtc_needs_modeset(crtc_state))
+ return false;
+
+ /* Init for legacy cursor update, so we can sync on teardown */
+ if (state->base.legacy_cursor_update)
+ return true;
+
+ return !crtc_state->preload_luts &&
intel_crtc_needs_color_update(crtc_state);
}
@@ -438,7 +444,7 @@ void intel_wait_for_vblank_workers(struct intel_atomic_state *state)
int i;
for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
- if (!intel_crtc_needs_vblank_work(crtc_state))
+ if (!intel_crtc_needs_vblank_work(state, crtc_state))
continue;
drm_vblank_work_flush(&crtc_state->vblank_work);
@@ -470,6 +476,7 @@ static int intel_mode_vblank_start(const struct drm_display_mode *mode)
/**
* intel_pipe_update_start() - start update of a set of display registers
+ * @state: the intel atomic state
* @new_crtc_state: the new crtc state
*
* Mark the start of an update to pipe registers that should be updated
@@ -480,7 +487,8 @@ static int intel_mode_vblank_start(const struct drm_display_mode *mode)
* until a subsequent call to intel_pipe_update_end(). That is done to
* avoid random delays.
*/
-void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state)
+void intel_pipe_update_start(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
@@ -497,7 +505,7 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state)
if (new_crtc_state->do_async_flip)
return;
- if (intel_crtc_needs_vblank_work(new_crtc_state))
+ if (intel_crtc_needs_vblank_work(state, new_crtc_state))
intel_crtc_vblank_work_init(new_crtc_state);
if (new_crtc_state->vrr.enable) {
@@ -635,13 +643,15 @@ static void dbg_vblank_evade(struct intel_crtc *crtc, ktime_t end) {}
/**
* intel_pipe_update_end() - end update of a set of display registers
+ * @state: the intel atomic state
* @new_crtc_state: the new crtc state
*
* Mark the end of an update started with intel_pipe_update_start(). This
* re-enables interrupts and verifies the update was actually completed
* before a vblank.
*/
-void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state)
+void intel_pipe_update_end(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
enum pipe pipe = crtc->pipe;
@@ -669,7 +679,7 @@ void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state)
* Would be slightly nice to just grab the vblank count and arm the
* event outside of the critical section - the spinlock might spin for a
* while ... */
- if (intel_crtc_needs_vblank_work(new_crtc_state)) {
+ if (intel_crtc_needs_vblank_work(state, new_crtc_state)) {
drm_vblank_work_schedule(&new_crtc_state->vblank_work,
drm_crtc_accurate_vblank_count(&crtc->base) + 1,
false);
diff --git a/drivers/gpu/drm/i915/display/intel_crtc.h b/drivers/gpu/drm/i915/display/intel_crtc.h
index 51a4c8df9e65..ca7f45a454a0 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc.h
+++ b/drivers/gpu/drm/i915/display/intel_crtc.h
@@ -36,8 +36,10 @@ void intel_crtc_state_reset(struct intel_crtc_state *crtc_state,
u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc);
void intel_crtc_vblank_on(const struct intel_crtc_state *crtc_state);
void intel_crtc_vblank_off(const struct intel_crtc_state *crtc_state);
-void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state);
-void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state);
+void intel_pipe_update_start(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state);
+void intel_pipe_update_end(struct intel_atomic_state *state,
+ struct intel_crtc_state *new_crtc_state);
void intel_wait_for_vblank_workers(struct intel_atomic_state *state);
struct intel_crtc *intel_first_crtc(struct drm_i915_private *i915);
struct intel_crtc *intel_crtc_for_pipe(struct drm_i915_private *i915,
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 45a932c9b1b3..f083ef0f53d4 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -6611,7 +6611,7 @@ static void intel_update_crtc(struct intel_atomic_state *state,
intel_crtc_planes_update_noarm(state, crtc);
/* Perform vblank evasion around commit operation */
- intel_pipe_update_start(new_crtc_state);
+ intel_pipe_update_start(state, new_crtc_state);
commit_pipe_pre_planes(state, crtc);
@@ -6619,7 +6619,7 @@ static void intel_update_crtc(struct intel_atomic_state *state,
commit_pipe_post_planes(state, crtc);
- intel_pipe_update_end(new_crtc_state);
+ intel_pipe_update_end(state, new_crtc_state);
/*
* We usually enable FIFO underrun interrupts as part of the
@@ -6921,6 +6921,9 @@ static void intel_atomic_cleanup_work(struct work_struct *work)
struct intel_crtc *crtc;
int i;
+ if (state->base.legacy_cursor_update)
+ intel_wait_for_vblank_workers(state);
+
for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i)
intel_color_cleanup_commit(old_crtc_state);
@@ -7116,7 +7119,8 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state)
if (state->modeset)
intel_set_cdclk_post_plane_update(state);
- intel_wait_for_vblank_workers(state);
+ if (!state->base.legacy_cursor_update)
+ intel_wait_for_vblank_workers(state);
/* FIXME: We should call drm_atomic_helper_commit_hw_done() here
* already, but still need the state for the delayed optimization. To
--
2.39.2
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
2023-08-14 6:50 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
@ 2023-08-18 8:37 ` kernel test robot
0 siblings, 0 replies; 11+ messages in thread
From: kernel test robot @ 2023-08-18 8:37 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: oe-lkp, intel-gfx, oliver.sang
Hello,
kernel test robot noticed "BUG:KASAN:slab-use-after-free_in_intel_wait_for_vblank_workers" on:
commit: cfd54d37e5cd9511b5a4a98bba6d4b2f596149cf ("[Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update")
url: https://github.com/intel-lab-lkp/linux/commits/Maarten-Lankhorst/drm-i915-Handle-legacy-cursor-update-as-normal-update/20230814-145051
base: git://anongit.freedesktop.org/drm/drm-tip drm-tip
patch link: https://lore.kernel.org/all/20230814065006.47160-2-dev@lankhorst.se/
patch subject: [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update
in testcase: igt
version: igt-x86_64-0f075441-1_20230520
with following parameters:
group: group-23
compiler: gcc-12
test machine: 20 threads 1 sockets (Commet Lake) with 16G memory
(please refer to attached dmesg/kmsg for entire log/backtrace)
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 <oliver.sang@intel.com>
| Closes: https://lore.kernel.org/oe-lkp/202308181627.2fec1157-oliver.sang@intel.com
kern :err : [ 162.196982] BUG: KASAN: slab-use-after-free in intel_wait_for_vblank_workers (drivers/gpu/drm/i915/display/intel_crtc.c:395 drivers/gpu/drm/i915/display/intel_crtc.c:447) i915
kern :err : [ 162.206530] Read of size 1 at addr ffff88811d8dc150 by task kworker/0:0H/8
kern :err : [ 162.216391] CPU: 0 PID: 8 Comm: kworker/0:0H Not tainted 6.5.0-rc6-00947-gcfd54d37e5cd #1
kern :err : [ 162.225319] Workqueue: events_highpri intel_atomic_cleanup_work [i915]
kern :err : [ 162.232683] Call Trace:
kern :err : [ 162.235861] <TASK>
kern :err : [ 162.238688] dump_stack_lvl (lib/dump_stack.c:107 (discriminator 1))
kern :err : [ 162.243085] print_address_description+0x2c/0x3a0
kern :err : [ 162.249618] ? intel_wait_for_vblank_workers (drivers/gpu/drm/i915/display/intel_crtc.c:395 drivers/gpu/drm/i915/display/intel_crtc.c:447) i915
kern :err : [ 162.256370] print_report (mm/kasan/report.c:476)
kern :err : [ 162.260681] ? kasan_addr_to_slab (mm/kasan/common.c:35)
kern :err : [ 162.265515] ? intel_wait_for_vblank_workers (drivers/gpu/drm/i915/display/intel_crtc.c:395 drivers/gpu/drm/i915/display/intel_crtc.c:447) i915
kern :err : [ 162.272267] kasan_report (mm/kasan/report.c:590)
kern :err : [ 162.276584] ? intel_wait_for_vblank_workers (drivers/gpu/drm/i915/display/intel_crtc.c:395 drivers/gpu/drm/i915/display/intel_crtc.c:447) i915
kern :err : [ 162.283336] intel_wait_for_vblank_workers (drivers/gpu/drm/i915/display/intel_crtc.c:395 drivers/gpu/drm/i915/display/intel_crtc.c:447) i915
kern :err : [ 162.289911] intel_atomic_cleanup_work (drivers/gpu/drm/i915/display/intel_display.c:6901) i915
kern :err : [ 162.296191] ? drm_dev_put (drivers/gpu/drm/drm_drv.c:827) drm
kern :err : [ 162.301672] process_one_work (kernel/workqueue.c:2605)
kern :err : [ 162.306507] worker_thread (include/linux/list.h:292 kernel/workqueue.c:2752)
kern :err : [ 162.311080] ? rescuer_thread (kernel/workqueue.c:2694)
kern :err : [ 162.315828] kthread (kernel/kthread.c:389)
kern :err : [ 162.319791] ? kthread_complete_and_exit (kernel/kthread.c:342)
kern :err : [ 162.325323] ret_from_fork (arch/x86/kernel/process.c:151)
kern :err : [ 162.329630] ? kthread_complete_and_exit (kernel/kthread.c:342)
kern :err : [ 162.335181] ret_from_fork_asm (arch/x86/entry/entry_64.S:312)
kern :err : [ 162.339840] </TASK>
kern :err : [ 162.344980] Allocated by task 4201:
kern :warn : [ 162.349214] kasan_save_stack (mm/kasan/common.c:46)
kern :warn : [ 162.353787] kasan_set_track (mm/kasan/common.c:52)
kern :warn : [ 162.358270] __kasan_kmalloc (mm/kasan/common.c:374 mm/kasan/common.c:383)
kern :warn : [ 162.362757] __kmalloc_node_track_caller (include/linux/kasan.h:196 mm/slab_common.c:985 mm/slab_common.c:1005)
kern :warn : [ 162.368283] kmemdup (mm/util.c:131)
kern :warn : [ 162.372075] intel_crtc_duplicate_state (include/linux/fortify-string.h:765 drivers/gpu/drm/i915/display/intel_atomic.c:242) i915
kern :warn : [ 162.378364] drm_atomic_get_crtc_state (drivers/gpu/drm/drm_atomic.c:363) drm
kern :warn : [ 162.384453] drm_atomic_get_plane_state (drivers/gpu/drm/drm_atomic.c:567) drm
kern :warn : [ 162.390622] drm_atomic_helper_update_plane (drivers/gpu/drm/drm_atomic_helper.c:3127) drm_kms_helper
kern :warn : [ 162.397997] drm_mode_cursor_universal (drivers/gpu/drm/drm_plane.c:1086) drm
kern :warn : [ 162.404086] drm_mode_cursor_common (drivers/gpu/drm/drm_plane.c:1172) drm
kern :warn : [ 162.409973] drm_mode_cursor_ioctl (drivers/gpu/drm/drm_plane.c:1188) drm
kern :warn : [ 162.415628] drm_ioctl_kernel (drivers/gpu/drm/drm_ioctl.c:795) drm
kern :warn : [ 162.420933] drm_ioctl (drivers/gpu/drm/drm_ioctl.c:893) drm
kern :warn : [ 162.425627] __x64_sys_ioctl (fs/ioctl.c:52 fs/ioctl.c:870 fs/ioctl.c:856 fs/ioctl.c:856)
kern :warn : [ 162.430284] do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80)
kern :warn : [ 162.434590] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:120)
kern :err : [ 162.442600] Freed by task 266:
kern :warn : [ 162.446384] kasan_save_stack (mm/kasan/common.c:46)
kern :warn : [ 162.450957] kasan_set_track (mm/kasan/common.c:52)
kern :warn : [ 162.455435] kasan_save_free_info (mm/kasan/generic.c:524)
kern :warn : [ 162.460355] __kasan_slab_free (mm/kasan/common.c:238 mm/kasan/common.c:200 mm/kasan/common.c:244)
kern :warn : [ 162.465185] __kmem_cache_free (mm/slub.c:1818 mm/slub.c:3801 mm/slub.c:3814)
kern :warn : [ 162.470016] drm_atomic_state_default_clear (drivers/gpu/drm/drm_atomic.c:228) drm
kern :warn : [ 162.476541] intel_atomic_state_clear (drivers/gpu/drm/i915/display/intel_atomic.c:343) i915
kern :warn : [ 162.482512] __drm_atomic_state_free (drivers/gpu/drm/drm_atomic.c:313) drm
kern :warn : [ 162.488342] intel_atomic_helper_free_state (drivers/gpu/drm/i915/display/intel_display.c:6850) i915
kern :warn : [ 162.494833] process_one_work (kernel/workqueue.c:2605)
kern :warn : [ 162.499668] worker_thread (include/linux/list.h:292 kernel/workqueue.c:2752)
kern :warn : [ 162.504244] kthread (kernel/kthread.c:389)
kern :warn : [ 162.508205] ret_from_fork (arch/x86/kernel/process.c:151)
kern :warn : [ 162.512521] ret_from_fork_asm (arch/x86/entry/entry_64.S:312)
kern :err : [ 162.519398] The buggy address belongs to the object at ffff88811d8dc000
which belongs to the cache kmalloc-8k of size 8192
kern :err : [ 162.533366] The buggy address is located 336 bytes inside of
freed 8192-byte region [ffff88811d8dc000, ffff88811d8de000)
kern :err : [ 162.549380] The buggy address belongs to the physical page:
kern :warn : [ 162.555691] page:00000000f71065d9 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x11d8d8
kern :warn : [ 162.565835] head:00000000f71065d9 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
kern :warn : [ 162.574675] flags: 0x17ffffc0010200(slab|head|node=0|zone=2|lastcpupid=0x1fffff)
kern :warn : [ 162.582819] page_type: 0xffffffff()
kern :warn : [ 162.587049] raw: 0017ffffc0010200 ffff88810c843180 dead000000000122 0000000000000000
kern :warn : [ 162.595537] raw: 0000000000000000 0000000080020002 00000001ffffffff 0000000000000000
kern :warn : [ 162.604024] page dumped because: kasan: bad access detected
kern :err : [ 162.612551] Memory state around the buggy address:
kern :err : [ 162.618082] ffff88811d8dc000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
kern :err : [ 162.626051] ffff88811d8dc080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
kern :err : [ 162.634018] >ffff88811d8dc100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
kern :err : [ 162.641981] ^
kern :err : [ 162.648551] ffff88811d8dc180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
kern :err : [ 162.656516] ffff88811d8dc200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
kern :err : [ 162.664482] ==================================================================
kern :warn : [ 162.672474] Disabling lock debugging due to kernel taint
user :info : [ 183.845750] [IGT] kms_cursor_legacy: starting dynamic subtest pipe-B
user :notice: [ 183.847199] Total updates 140241 (median of 20 processes is 6978.00)
user :notice: [ 183.862752] Dynamic subtest pipe-A: SUCCESS (21.683s)
user :notice: [ 183.871250] Starting dynamic subtest: pipe-B
user :info : [ 205.481554] [IGT] kms_cursor_legacy: starting dynamic subtest pipe-C
user :notice: [ 205.483064] Total updates 146561 (median of 20 processes is 7323.50)
user :notice: [ 205.498578] Dynamic subtest pipe-B: SUCCESS (21.629s)
user :notice: [ 205.507030] Starting dynamic subtest: pipe-C
user :info : [ 227.139947] [IGT] kms_cursor_legacy: starting dynamic subtest all-pipes
The kernel config and materials to reproduce are available at:
https://download.01.org/0day-ci/archive/20230818/202308181627.2fec1157-oliver.sang@intel.com
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-08-18 8:37 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-10 12:41 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
2023-08-10 12:41 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
2023-08-10 18:10 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/2] drm/i915: Swap ggtt_vma during legacy cursor update Patchwork
2023-08-10 18:11 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2023-08-10 18:27 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2023-08-14 6:50 [Intel-gfx] [PATCH 1/2] " Maarten Lankhorst
2023-08-14 6:50 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
2023-08-18 8:37 ` kernel test robot
2023-06-29 15:35 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
2023-06-29 15:35 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
2023-06-21 11:48 [Intel-gfx] [PATCH 1/2] drm/i915: Swap ggtt_vma during legacy cursor update Maarten Lankhorst
2023-06-21 11:48 ` [Intel-gfx] [PATCH 2/2] drm/i915: Handle legacy cursor update as normal update Maarten Lankhorst
2023-06-21 23:09 ` kernel test robot
2023-06-21 23:40 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox