* [Intel-gfx][PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-09 14:39 ` Pankaj Bharadiya
0 siblings, 0 replies; 25+ messages in thread
From: Pankaj Bharadiya @ 2019-12-09 14:39 UTC (permalink / raw)
To: pankaj.laxminarayan.bharadiya, Jani Nikula, Joonas Lahtinen,
Rodrigo Vivi, David Airlie, Daniel Vetter,
Ville Syrjälä, Chris Wilson, Matt Roper, Stuart Summers,
Stanislav Lisovskiy, Maarten Lankhorst, Clint Taylor, Imre Deak,
intel-gfx, dri-devel
intel_bw_state allocated memory is not getting freed even after
module removal.
kmemleak reported backtrace:
[<0000000079019739>] kmemdup+0x17/0x40
[<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
[<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
[<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
[<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
[<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
[<00000000c9379611>] drm_atomic_commit+0xe/0x50
[<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
[<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
[<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
[<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
[<000000002dcbd148>] pci_device_remove+0x36/0xb0
[<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
[<00000000580e9566>] unbind_store+0xc3/0x120
[<00000000869d0df5>] kernfs_fop_write+0x104/0x190
[<000000004dc1a355>] vfs_write+0xb9/0x1d0
Call the drm_atomic_private_obj_fini(), which inturn calls the
intel_bw_destroy_state() to make sure the intel_bw_state memory is
freed properly.
Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
---
drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
drivers/gpu/drm/i915/display/intel_bw.h | 1 +
drivers/gpu/drm/i915/display/intel_display.c | 2 ++
3 files changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
index dcb66a33be9b..b228671d5a5d 100644
--- a/drivers/gpu/drm/i915/display/intel_bw.c
+++ b/drivers/gpu/drm/i915/display/intel_bw.c
@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
return 0;
}
+
+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
+{
+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
index 9db10af012f4..20b9ad241802 100644
--- a/drivers/gpu/drm/i915/display/intel_bw.h
+++ b/drivers/gpu/drm/i915/display/intel_bw.h
@@ -25,6 +25,7 @@ struct intel_bw_state {
void intel_bw_init_hw(struct drm_i915_private *dev_priv);
int intel_bw_init(struct drm_i915_private *dev_priv);
+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
int intel_bw_atomic_check(struct intel_atomic_state *state);
void intel_bw_crtc_update(struct intel_bw_state *bw_state,
const struct intel_crtc_state *crtc_state);
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 3190aa27ffdc..756eb90b1bb1 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
intel_gmbus_teardown(i915);
+ intel_bw_cleanup(i915);
+
destroy_workqueue(i915->flip_wq);
destroy_workqueue(i915->modeset_wq);
--
2.23.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-09 14:39 ` Pankaj Bharadiya
0 siblings, 0 replies; 25+ messages in thread
From: Pankaj Bharadiya @ 2019-12-09 14:39 UTC (permalink / raw)
To: pankaj.laxminarayan.bharadiya, Jani Nikula, Joonas Lahtinen,
Rodrigo Vivi, David Airlie, Daniel Vetter,
Ville Syrjälä, Chris Wilson, Matt Roper, Stuart Summers,
Stanislav Lisovskiy, Maarten Lankhorst, Clint Taylor, Imre Deak,
intel-gfx, dri-devel
intel_bw_state allocated memory is not getting freed even after
module removal.
kmemleak reported backtrace:
[<0000000079019739>] kmemdup+0x17/0x40
[<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
[<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
[<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
[<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
[<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
[<00000000c9379611>] drm_atomic_commit+0xe/0x50
[<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
[<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
[<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
[<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
[<000000002dcbd148>] pci_device_remove+0x36/0xb0
[<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
[<00000000580e9566>] unbind_store+0xc3/0x120
[<00000000869d0df5>] kernfs_fop_write+0x104/0x190
[<000000004dc1a355>] vfs_write+0xb9/0x1d0
Call the drm_atomic_private_obj_fini(), which inturn calls the
intel_bw_destroy_state() to make sure the intel_bw_state memory is
freed properly.
Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
---
drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
drivers/gpu/drm/i915/display/intel_bw.h | 1 +
drivers/gpu/drm/i915/display/intel_display.c | 2 ++
3 files changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
index dcb66a33be9b..b228671d5a5d 100644
--- a/drivers/gpu/drm/i915/display/intel_bw.c
+++ b/drivers/gpu/drm/i915/display/intel_bw.c
@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
return 0;
}
+
+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
+{
+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
index 9db10af012f4..20b9ad241802 100644
--- a/drivers/gpu/drm/i915/display/intel_bw.h
+++ b/drivers/gpu/drm/i915/display/intel_bw.h
@@ -25,6 +25,7 @@ struct intel_bw_state {
void intel_bw_init_hw(struct drm_i915_private *dev_priv);
int intel_bw_init(struct drm_i915_private *dev_priv);
+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
int intel_bw_atomic_check(struct intel_atomic_state *state);
void intel_bw_crtc_update(struct intel_bw_state *bw_state,
const struct intel_crtc_state *crtc_state);
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 3190aa27ffdc..756eb90b1bb1 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
intel_gmbus_teardown(i915);
+ intel_bw_cleanup(i915);
+
destroy_workqueue(i915->flip_wq);
destroy_workqueue(i915->modeset_wq);
--
2.23.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BAT: failure for drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-09 14:39 ` [Intel-gfx] [PATCH] " Pankaj Bharadiya
(?)
@ 2019-12-09 20:24 ` Patchwork
-1 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2019-12-09 20:24 UTC (permalink / raw)
To: Pankaj Bharadiya; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/display: cleanup intel_bw_state on i915 module removal
URL : https://patchwork.freedesktop.org/series/70634/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_7521 -> Patchwork_15655
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_15655 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_15655, 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_15655/index.html
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_15655:
### IGT changes ###
#### Possible regressions ####
* igt@gem_sync@basic-store-each:
- fi-ivb-3770: [PASS][1] -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-ivb-3770/igt@gem_sync@basic-store-each.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-ivb-3770/igt@gem_sync@basic-store-each.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@runner@aborted:
- {fi-tgl-guc}: NOTRUN -> [FAIL][3]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-tgl-guc/igt@runner@aborted.html
New tests
---------
New tests have been introduced between CI_DRM_7521 and Patchwork_15655:
### New IGT tests (22) ###
* igt@amdgpu/amd_basic@cs-compute:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 0.03] s
* igt@amdgpu/amd_basic@cs-gfx:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 0.03] s
* igt@amdgpu/amd_basic@cs-multi-fence:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 0.00] s
* igt@amdgpu/amd_basic@cs-sdma:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 0.02] s
* igt@amdgpu/amd_basic@memory-alloc:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 0.00] s
* igt@amdgpu/amd_basic@query-info:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0] s
* igt@amdgpu/amd_basic@semaphore:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 0.00] s
* igt@amdgpu/amd_basic@userptr:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 0.00] s
* igt@amdgpu/amd_cs_nop@fork-compute0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.50] s
* igt@amdgpu/amd_cs_nop@fork-gfx0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.51] s
* igt@amdgpu/amd_cs_nop@nop-compute0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.48] s
* igt@amdgpu/amd_cs_nop@nop-gfx0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.48] s
* igt@amdgpu/amd_cs_nop@sync-compute0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.48] s
* igt@amdgpu/amd_cs_nop@sync-fork-compute0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.51] s
* igt@amdgpu/amd_cs_nop@sync-fork-gfx0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.51] s
* igt@amdgpu/amd_cs_nop@sync-gfx0:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 21.48] s
* igt@amdgpu/amd_prime@amd-to-i915:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 2.45] s
* igt@amdgpu/amd_prime@i915-to-amd:
- Statuses : 1 pass(s) 40 skip(s)
- Exec time: [0.0, 5.48] s
* igt@gem_exec_fence@nb-await-default:
- Statuses : 42 pass(s) 2 skip(s)
- Exec time: [0.0, 0.08] s
* igt@i915_module_load@reload:
- Statuses : 2 dmesg-warn(s) 39 pass(s)
- Exec time: [1.18, 6.15] s
* igt@i915_module_load@reload-no-display:
- Statuses : 41 pass(s)
- Exec time: [0.87, 6.65] s
* igt@i915_module_load@reload-with-fault-injection:
- Statuses : 2 dmesg-warn(s) 39 pass(s)
- Exec time: [4.67, 162.34] s
Known issues
------------
Here are the changes found in Patchwork_15655 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_suspend@basic-s0:
- fi-tgl-y: [PASS][4] -> [INCOMPLETE][5] ([i915#472])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-tgl-y/igt@gem_exec_suspend@basic-s0.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-tgl-y/igt@gem_exec_suspend@basic-s0.html
* igt@i915_module_load@reload (NEW):
- fi-kbl-x1275: [DMESG-WARN][6] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][7] ([i915#62] / [i915#92])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-x1275/igt@i915_module_load@reload.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-x1275/igt@i915_module_load@reload.html
* igt@i915_selftest@live_gem_contexts:
- fi-byt-j1900: [PASS][8] -> [DMESG-FAIL][9] ([i915#722])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-byt-j1900/igt@i915_selftest@live_gem_contexts.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-byt-j1900/igt@i915_selftest@live_gem_contexts.html
* igt@kms_chamelium@hdmi-hpd-fast:
- fi-kbl-7500u: [PASS][10] -> [FAIL][11] ([fdo#111096] / [i915#323])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
#### Possible fixes ####
* igt@gem_exec_suspend@basic-s4-devices:
- fi-icl-guc: [INCOMPLETE][12] ([i915#140] / [i915#184]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-icl-guc/igt@gem_exec_suspend@basic-s4-devices.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-icl-guc/igt@gem_exec_suspend@basic-s4-devices.html
* igt@i915_selftest@live_blt:
- fi-ivb-3770: [DMESG-FAIL][14] -> [PASS][15]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-ivb-3770/igt@i915_selftest@live_blt.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-ivb-3770/igt@i915_selftest@live_blt.html
- fi-byt-j1900: [DMESG-FAIL][16] ([i915#725]) -> [PASS][17]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-byt-j1900/igt@i915_selftest@live_blt.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-byt-j1900/igt@i915_selftest@live_blt.html
#### Warnings ####
* igt@gem_exec_suspend@basic-s4-devices:
- fi-kbl-x1275: [DMESG-WARN][18] ([fdo#107139] / [i915#62] / [i915#92]) -> [DMESG-WARN][19] ([fdo#107139] / [i915#62] / [i915#92] / [i915#95])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-x1275/igt@gem_exec_suspend@basic-s4-devices.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-x1275/igt@gem_exec_suspend@basic-s4-devices.html
* igt@i915_selftest@live_blt:
- fi-hsw-4770: [DMESG-FAIL][20] -> [DMESG-FAIL][21] ([i915#725])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-hsw-4770/igt@i915_selftest@live_blt.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-hsw-4770/igt@i915_selftest@live_blt.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- fi-kbl-x1275: [DMESG-WARN][22] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][23] ([i915#62] / [i915#92]) +4 similar issues
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-x1275/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-x1275/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size:
- fi-kbl-x1275: [DMESG-WARN][24] ([i915#62] / [i915#92]) -> [DMESG-WARN][25] ([i915#62] / [i915#92] / [i915#95])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#107139]: https://bugs.freedesktop.org/show_bug.cgi?id=107139
[fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096
[i915#140]: https://gitlab.freedesktop.org/drm/intel/issues/140
[i915#184]: https://gitlab.freedesktop.org/drm/intel/issues/184
[i915#323]: https://gitlab.freedesktop.org/drm/intel/issues/323
[i915#472]: https://gitlab.freedesktop.org/drm/intel/issues/472
[i915#476]: https://gitlab.freedesktop.org/drm/intel/issues/476
[i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62
[i915#722]: https://gitlab.freedesktop.org/drm/intel/issues/722
[i915#725]: https://gitlab.freedesktop.org/drm/intel/issues/725
[i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92
[i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95
Participating hosts (50 -> 47)
------------------------------
Additional (1): fi-kbl-guc
Missing (4): fi-ctg-p8600 fi-byt-clapper fi-ilk-m540 fi-bsw-cyan
Build changes
-------------
* CI: CI-20190529 -> None
* Linux: CI_DRM_7521 -> Patchwork_15655
CI-20190529: 20190529
CI_DRM_7521: 9203f67985ebf27211aa1eabb77093302248c9fc @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_5341: 5fe683cdebde2d77d16ffc42c9fdf29a9f95bb82 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_15655: 3fd0b1c8a344b3dcd86df601234ae242aaf4f9b0 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
3fd0b1c8a344 drm/i915/display: cleanup intel_bw_state on i915 module removal
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-09 14:39 ` [Intel-gfx] [PATCH] " Pankaj Bharadiya
@ 2019-12-11 5:57 ` Lucas De Marchi
-1 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-11 5:57 UTC (permalink / raw)
To: Pankaj Bharadiya
Cc: Stanislav Lisovskiy, David Airlie, Stuart Summers, dri-devel,
Rodrigo Vivi, intel-gfx
On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>intel_bw_state allocated memory is not getting freed even after
>module removal.
>
>kmemleak reported backtrace:
>
> [<0000000079019739>] kmemdup+0x17/0x40
> [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> [<00000000580e9566>] unbind_store+0xc3/0x120
> [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> [<000000004dc1a355>] vfs_write+0xb9/0x1d0
what I find strange in this is that the last state was allocated by the
"driver remove" code path.
>
>Call the drm_atomic_private_obj_fini(), which inturn calls the
>intel_bw_destroy_state() to make sure the intel_bw_state memory is
>freed properly.
>
>Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>---
> drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> 3 files changed, 8 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>index dcb66a33be9b..b228671d5a5d 100644
>--- a/drivers/gpu/drm/i915/display/intel_bw.c
>+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>
> return 0;
> }
>+
>+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>+{
>+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>+}
>diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>index 9db10af012f4..20b9ad241802 100644
>--- a/drivers/gpu/drm/i915/display/intel_bw.h
>+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>@@ -25,6 +25,7 @@ struct intel_bw_state {
>
> void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> int intel_bw_init(struct drm_i915_private *dev_priv);
>+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> int intel_bw_atomic_check(struct intel_atomic_state *state);
> void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> const struct intel_crtc_state *crtc_state);
>diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>index 3190aa27ffdc..756eb90b1bb1 100644
>--- a/drivers/gpu/drm/i915/display/intel_display.c
>+++ b/drivers/gpu/drm/i915/display/intel_display.c
>@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>
> intel_gmbus_teardown(i915);
>
>+ intel_bw_cleanup(i915);
This doesn't seem to match the (reverse) order of
intel_modeset_init()... but it's actually the gmbus_teardown() that is
out of place. Did you check if it's not a wrong shutdown ordering?
thanks
Lucas De Marchi
>+
> destroy_workqueue(i915->flip_wq);
> destroy_workqueue(i915->modeset_wq);
>
>--
>2.23.0
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-11 5:57 ` Lucas De Marchi
0 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-11 5:57 UTC (permalink / raw)
To: Pankaj Bharadiya; +Cc: David Airlie, dri-devel, intel-gfx
On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>intel_bw_state allocated memory is not getting freed even after
>module removal.
>
>kmemleak reported backtrace:
>
> [<0000000079019739>] kmemdup+0x17/0x40
> [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> [<00000000580e9566>] unbind_store+0xc3/0x120
> [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> [<000000004dc1a355>] vfs_write+0xb9/0x1d0
what I find strange in this is that the last state was allocated by the
"driver remove" code path.
>
>Call the drm_atomic_private_obj_fini(), which inturn calls the
>intel_bw_destroy_state() to make sure the intel_bw_state memory is
>freed properly.
>
>Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>---
> drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> 3 files changed, 8 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>index dcb66a33be9b..b228671d5a5d 100644
>--- a/drivers/gpu/drm/i915/display/intel_bw.c
>+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>
> return 0;
> }
>+
>+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>+{
>+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>+}
>diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>index 9db10af012f4..20b9ad241802 100644
>--- a/drivers/gpu/drm/i915/display/intel_bw.h
>+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>@@ -25,6 +25,7 @@ struct intel_bw_state {
>
> void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> int intel_bw_init(struct drm_i915_private *dev_priv);
>+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> int intel_bw_atomic_check(struct intel_atomic_state *state);
> void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> const struct intel_crtc_state *crtc_state);
>diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>index 3190aa27ffdc..756eb90b1bb1 100644
>--- a/drivers/gpu/drm/i915/display/intel_display.c
>+++ b/drivers/gpu/drm/i915/display/intel_display.c
>@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>
> intel_gmbus_teardown(i915);
>
>+ intel_bw_cleanup(i915);
This doesn't seem to match the (reverse) order of
intel_modeset_init()... but it's actually the gmbus_teardown() that is
out of place. Did you check if it's not a wrong shutdown ordering?
thanks
Lucas De Marchi
>+
> destroy_workqueue(i915->flip_wq);
> destroy_workqueue(i915->modeset_wq);
>
>--
>2.23.0
>
>_______________________________________________
>Intel-gfx mailing list
>Intel-gfx@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-11 5:57 ` Lucas De Marchi
@ 2019-12-11 6:40 ` Bharadiya,Pankaj
-1 siblings, 0 replies; 25+ messages in thread
From: Bharadiya,Pankaj @ 2019-12-11 6:40 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Stanislav Lisovskiy, David Airlie, Stuart Summers, dri-devel,
Rodrigo Vivi, intel-gfx
On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
> On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> >intel_bw_state allocated memory is not getting freed even after
> >module removal.
> >
> >kmemleak reported backtrace:
> >
> > [<0000000079019739>] kmemdup+0x17/0x40
> > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> > [<00000000580e9566>] unbind_store+0xc3/0x120
> > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>
> what I find strange in this is that the last state was allocated by the
> "driver remove" code path.
>
> >
> >Call the drm_atomic_private_obj_fini(), which inturn calls the
> >intel_bw_destroy_state() to make sure the intel_bw_state memory is
> >freed properly.
> >
> >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
> >---
> >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> >3 files changed, 8 insertions(+)
> >
> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> >index dcb66a33be9b..b228671d5a5d 100644
> >--- a/drivers/gpu/drm/i915/display/intel_bw.c
> >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
> >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
> >
> > return 0;
> >}
> >+
> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> >+{
> >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> >+}
> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> >index 9db10af012f4..20b9ad241802 100644
> >--- a/drivers/gpu/drm/i915/display/intel_bw.h
> >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
> >@@ -25,6 +25,7 @@ struct intel_bw_state {
> >
> >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> >int intel_bw_init(struct drm_i915_private *dev_priv);
> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> >int intel_bw_atomic_check(struct intel_atomic_state *state);
> >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> > const struct intel_crtc_state *crtc_state);
> >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> >index 3190aa27ffdc..756eb90b1bb1 100644
> >--- a/drivers/gpu/drm/i915/display/intel_display.c
> >+++ b/drivers/gpu/drm/i915/display/intel_display.c
> >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
> >
> > intel_gmbus_teardown(i915);
> >
> >+ intel_bw_cleanup(i915);
>
> This doesn't seem to match the (reverse) order of
> intel_modeset_init()... but it's actually the gmbus_teardown() that is
> out of place. Did you check if it's not a wrong shutdown ordering?
>
In intel_modeset_init(), intel_gmbus_setup() happens after
intel_bw_init().
I think the patch follows the reverse ordering properly.
Am I missing anything?
Thanks,
Pankaj
> thanks
> Lucas De Marchi
>
> >+
> > destroy_workqueue(i915->flip_wq);
> > destroy_workqueue(i915->modeset_wq);
> >
> >--
> >2.23.0
> >
> >_______________________________________________
> >Intel-gfx mailing list
> >Intel-gfx@lists.freedesktop.org
> >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-11 6:40 ` Bharadiya,Pankaj
0 siblings, 0 replies; 25+ messages in thread
From: Bharadiya,Pankaj @ 2019-12-11 6:40 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: David Airlie, dri-devel, intel-gfx
On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
> On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> >intel_bw_state allocated memory is not getting freed even after
> >module removal.
> >
> >kmemleak reported backtrace:
> >
> > [<0000000079019739>] kmemdup+0x17/0x40
> > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> > [<00000000580e9566>] unbind_store+0xc3/0x120
> > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>
> what I find strange in this is that the last state was allocated by the
> "driver remove" code path.
>
> >
> >Call the drm_atomic_private_obj_fini(), which inturn calls the
> >intel_bw_destroy_state() to make sure the intel_bw_state memory is
> >freed properly.
> >
> >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
> >---
> >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> >3 files changed, 8 insertions(+)
> >
> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> >index dcb66a33be9b..b228671d5a5d 100644
> >--- a/drivers/gpu/drm/i915/display/intel_bw.c
> >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
> >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
> >
> > return 0;
> >}
> >+
> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> >+{
> >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> >+}
> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> >index 9db10af012f4..20b9ad241802 100644
> >--- a/drivers/gpu/drm/i915/display/intel_bw.h
> >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
> >@@ -25,6 +25,7 @@ struct intel_bw_state {
> >
> >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> >int intel_bw_init(struct drm_i915_private *dev_priv);
> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> >int intel_bw_atomic_check(struct intel_atomic_state *state);
> >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> > const struct intel_crtc_state *crtc_state);
> >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> >index 3190aa27ffdc..756eb90b1bb1 100644
> >--- a/drivers/gpu/drm/i915/display/intel_display.c
> >+++ b/drivers/gpu/drm/i915/display/intel_display.c
> >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
> >
> > intel_gmbus_teardown(i915);
> >
> >+ intel_bw_cleanup(i915);
>
> This doesn't seem to match the (reverse) order of
> intel_modeset_init()... but it's actually the gmbus_teardown() that is
> out of place. Did you check if it's not a wrong shutdown ordering?
>
In intel_modeset_init(), intel_gmbus_setup() happens after
intel_bw_init().
I think the patch follows the reverse ordering properly.
Am I missing anything?
Thanks,
Pankaj
> thanks
> Lucas De Marchi
>
> >+
> > destroy_workqueue(i915->flip_wq);
> > destroy_workqueue(i915->modeset_wq);
> >
> >--
> >2.23.0
> >
> >_______________________________________________
> >Intel-gfx mailing list
> >Intel-gfx@lists.freedesktop.org
> >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-11 6:40 ` Bharadiya,Pankaj
@ 2019-12-12 0:22 ` Lucas De Marchi
-1 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-12 0:22 UTC (permalink / raw)
To: Bharadiya,Pankaj
Cc: Stanislav Lisovskiy, David Airlie, Stuart Summers, dri-devel,
Rodrigo Vivi, intel-gfx
On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>> On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>> >intel_bw_state allocated memory is not getting freed even after
>> >module removal.
>> >
>> >kmemleak reported backtrace:
>> >
>> > [<0000000079019739>] kmemdup+0x17/0x40
>> > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>> > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>> > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>> > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>> > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>> > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>> > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>> > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>> > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>> > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>> > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>> > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>> > [<00000000580e9566>] unbind_store+0xc3/0x120
>> > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>> > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>>
>> what I find strange in this is that the last state was allocated by the
>> "driver remove" code path.
>>
>> >
>> >Call the drm_atomic_private_obj_fini(), which inturn calls the
>> >intel_bw_destroy_state() to make sure the intel_bw_state memory is
>> >freed properly.
>> >
>> >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>> >---
>> >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>> >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>> >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>> >3 files changed, 8 insertions(+)
>> >
>> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>> >index dcb66a33be9b..b228671d5a5d 100644
>> >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>> >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>> >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>> >
>> > return 0;
>> >}
>> >+
>> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>> >+{
>> >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>> >+}
>> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>> >index 9db10af012f4..20b9ad241802 100644
>> >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>> >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>> >@@ -25,6 +25,7 @@ struct intel_bw_state {
>> >
>> >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
>> >int intel_bw_init(struct drm_i915_private *dev_priv);
>> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>> >int intel_bw_atomic_check(struct intel_atomic_state *state);
>> >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>> > const struct intel_crtc_state *crtc_state);
>> >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> >index 3190aa27ffdc..756eb90b1bb1 100644
>> >--- a/drivers/gpu/drm/i915/display/intel_display.c
>> >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>> >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>> >
>> > intel_gmbus_teardown(i915);
>> >
>> >+ intel_bw_cleanup(i915);
>>
>> This doesn't seem to match the (reverse) order of
>> intel_modeset_init()... but it's actually the gmbus_teardown() that is
>> out of place. Did you check if it's not a wrong shutdown ordering?
>>
>
>In intel_modeset_init(), intel_gmbus_setup() happens after
>intel_bw_init().
>I think the patch follows the reverse ordering properly.
>Am I missing anything?
I said it seems that it's the gmbus_teardown() that is out of place.
Have you seen my comment above? Why are we duplicating the bw_state on
the module-remove code path?
Lucas De Marchi
>
>Thanks,
>Pankaj
>
>> thanks
>> Lucas De Marchi
>>
>> >+
>> > destroy_workqueue(i915->flip_wq);
>> > destroy_workqueue(i915->modeset_wq);
>> >
>> >--
>> >2.23.0
>> >
>> >_______________________________________________
>> >Intel-gfx mailing list
>> >Intel-gfx@lists.freedesktop.org
>> >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-12 0:22 ` Lucas De Marchi
0 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-12 0:22 UTC (permalink / raw)
To: Bharadiya,Pankaj; +Cc: David Airlie, dri-devel, intel-gfx
On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>> On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>> >intel_bw_state allocated memory is not getting freed even after
>> >module removal.
>> >
>> >kmemleak reported backtrace:
>> >
>> > [<0000000079019739>] kmemdup+0x17/0x40
>> > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>> > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>> > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>> > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>> > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>> > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>> > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>> > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>> > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>> > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>> > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>> > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>> > [<00000000580e9566>] unbind_store+0xc3/0x120
>> > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>> > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>>
>> what I find strange in this is that the last state was allocated by the
>> "driver remove" code path.
>>
>> >
>> >Call the drm_atomic_private_obj_fini(), which inturn calls the
>> >intel_bw_destroy_state() to make sure the intel_bw_state memory is
>> >freed properly.
>> >
>> >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>> >---
>> >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>> >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>> >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>> >3 files changed, 8 insertions(+)
>> >
>> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>> >index dcb66a33be9b..b228671d5a5d 100644
>> >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>> >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>> >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>> >
>> > return 0;
>> >}
>> >+
>> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>> >+{
>> >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>> >+}
>> >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>> >index 9db10af012f4..20b9ad241802 100644
>> >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>> >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>> >@@ -25,6 +25,7 @@ struct intel_bw_state {
>> >
>> >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
>> >int intel_bw_init(struct drm_i915_private *dev_priv);
>> >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>> >int intel_bw_atomic_check(struct intel_atomic_state *state);
>> >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>> > const struct intel_crtc_state *crtc_state);
>> >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> >index 3190aa27ffdc..756eb90b1bb1 100644
>> >--- a/drivers/gpu/drm/i915/display/intel_display.c
>> >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>> >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>> >
>> > intel_gmbus_teardown(i915);
>> >
>> >+ intel_bw_cleanup(i915);
>>
>> This doesn't seem to match the (reverse) order of
>> intel_modeset_init()... but it's actually the gmbus_teardown() that is
>> out of place. Did you check if it's not a wrong shutdown ordering?
>>
>
>In intel_modeset_init(), intel_gmbus_setup() happens after
>intel_bw_init().
>I think the patch follows the reverse ordering properly.
>Am I missing anything?
I said it seems that it's the gmbus_teardown() that is out of place.
Have you seen my comment above? Why are we duplicating the bw_state on
the module-remove code path?
Lucas De Marchi
>
>Thanks,
>Pankaj
>
>> thanks
>> Lucas De Marchi
>>
>> >+
>> > destroy_workqueue(i915->flip_wq);
>> > destroy_workqueue(i915->modeset_wq);
>> >
>> >--
>> >2.23.0
>> >
>> >_______________________________________________
>> >Intel-gfx mailing list
>> >Intel-gfx@lists.freedesktop.org
>> >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-12 0:22 ` Lucas De Marchi
@ 2019-12-12 10:28 ` Bharadiya,Pankaj
-1 siblings, 0 replies; 25+ messages in thread
From: Bharadiya,Pankaj @ 2019-12-12 10:28 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Stanislav Lisovskiy, David Airlie, Stuart Summers, dri-devel,
Rodrigo Vivi, intel-gfx
On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
> On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
> >On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
> >>On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> >>>intel_bw_state allocated memory is not getting freed even after
> >>>module removal.
> >>>
> >>>kmemleak reported backtrace:
> >>>
> >>> [<0000000079019739>] kmemdup+0x17/0x40
> >>> [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> >>> [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> >>> [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> >>> [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> >>> [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> >>> [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> >>> [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> >>> [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> >>> [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> >>> [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> >>> [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> >>> [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> >>> [<00000000580e9566>] unbind_store+0xc3/0x120
> >>> [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> >>> [<000000004dc1a355>] vfs_write+0xb9/0x1d0
> >>
> >>what I find strange in this is that the last state was allocated by the
> >>"driver remove" code path.
> >>
> >>>
> >>>Call the drm_atomic_private_obj_fini(), which inturn calls the
> >>>intel_bw_destroy_state() to make sure the intel_bw_state memory is
> >>>freed properly.
> >>>
> >>>Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
> >>>---
> >>>drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> >>>drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> >>>drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> >>>3 files changed, 8 insertions(+)
> >>>
> >>>diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> >>>index dcb66a33be9b..b228671d5a5d 100644
> >>>--- a/drivers/gpu/drm/i915/display/intel_bw.c
> >>>+++ b/drivers/gpu/drm/i915/display/intel_bw.c
> >>>@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
> >>>
n
> >>> return 0;
> >>>}
> >>>+
> >>>+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> >>>+{
> >>>+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> >>>+}
> >>>diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> >>>index 9db10af012f4..20b9ad241802 100644
> >>>--- a/drivers/gpu/drm/i915/display/intel_bw.h
> >>>+++ b/drivers/gpu/drm/i915/display/intel_bw.h
> >>>@@ -25,6 +25,7 @@ struct intel_bw_state {
> >>>
> >>>void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> >>>int intel_bw_init(struct drm_i915_private *dev_priv);
> >>>+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> >>>int intel_bw_atomic_check(struct intel_atomic_state *state);
> >>>void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> >>> const struct intel_crtc_state *crtc_state);
> >>>diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> >>>index 3190aa27ffdc..756eb90b1bb1 100644
> >>>--- a/drivers/gpu/drm/i915/display/intel_display.c
> >>>+++ b/drivers/gpu/drm/i915/display/intel_display.c
> >>>@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
> >>>
> >>> intel_gmbus_teardown(i915);
> >>>
> >>>+ intel_bw_cleanup(i915);
> >>
> >>This doesn't seem to match the (reverse) order of
> >>intel_modeset_init()... but it's actually the gmbus_teardown() that is
> >>out of place. Did you check if it's not a wrong shutdown ordering?
> >>
> >
> >In intel_modeset_init(), intel_gmbus_setup() happens after
> >intel_bw_init().
> >I think the patch follows the reverse ordering properly.
> >Am I missing anything?
>
> I said it seems that it's the gmbus_teardown() that is out of place.
Hummm.
> Have you seen my comment above? Why are we duplicating the bw_state on
> the module-remove code path?
I am not exactly sure why duplicating of bw_state happens on removal.
Despite of this, I think we need to have a method to clean up
the resources allocated/initialized using drm_atotomic_private_obj_init()
from intel_bw_init() which is missing at the moment.
Moreover, I am getting below kmemleak trace on my NUC during module
load/unload sequence.
backtrace:
[<00000000fe2b0db8>] intel_bw_init+0x1a/0x50 [i915]
[<00000000ae7de386>] intel_modeset_init+0x197/0x1d60 [i915]
[<00000000b520b2d8>] i915_driver_probe+0xae6/0x1520 [i915]
[<00000000682b3100>] i915_pci_probe+0x3f/0x150 [i915]
[<00000000efd970df>] local_pci_probe+0x3d/0x90
[<00000000a05c08fe>] pci_device_probe+0xd5/0x160
[<000000004fdf5c22>] really_probe+0x1b1/0x300
[<0000000006397c43>] driver_probe_device+0x4b/0xe0
[<000000008ac9d085>] device_driver_attach+0x4a/0x50
[<000000004c50b157>] __driver_attach+0x67/0xb0
[<000000007e27c7f9>] bus_for_each_dev+0x71/0xb0
[<0000000042286228>] bus_add_driver+0x177/0x1f0
[<000000006b066a1f>] driver_register+0x56/0xf0
[<0000000023883b3a>] do_one_initcall+0x41/0x1df
[<00000000933062b0>] do_init_module+0x56/0x1f8
[<00000000dde25517>] load_module+0x201c/0x2700
Freeing up the resources during module unload sequence with
drm_atomic_private_obj_fini() fixes this.
Thanks,
Pankaj
>
> Lucas De Marchi
>
> >
> >Thanks,
> >Pankaj
> >
> >>thanks
> >>Lucas De Marchi
> >>
> >>>+
> >>> destroy_workqueue(i915->flip_wq);
> >>> destroy_workqueue(i915->modeset_wq);
> >>>
> >>>--
> >>>2.23.0
> >>>
> >>>_______________________________________________
> >>>Intel-gfx mailing list
> >>>Intel-gfx@lists.freedesktop.org
> >>>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-12 10:28 ` Bharadiya,Pankaj
0 siblings, 0 replies; 25+ messages in thread
From: Bharadiya,Pankaj @ 2019-12-12 10:28 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: David Airlie, dri-devel, intel-gfx
On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
> On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
> >On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
> >>On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> >>>intel_bw_state allocated memory is not getting freed even after
> >>>module removal.
> >>>
> >>>kmemleak reported backtrace:
> >>>
> >>> [<0000000079019739>] kmemdup+0x17/0x40
> >>> [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> >>> [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> >>> [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> >>> [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> >>> [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> >>> [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> >>> [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> >>> [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> >>> [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> >>> [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> >>> [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> >>> [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> >>> [<00000000580e9566>] unbind_store+0xc3/0x120
> >>> [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> >>> [<000000004dc1a355>] vfs_write+0xb9/0x1d0
> >>
> >>what I find strange in this is that the last state was allocated by the
> >>"driver remove" code path.
> >>
> >>>
> >>>Call the drm_atomic_private_obj_fini(), which inturn calls the
> >>>intel_bw_destroy_state() to make sure the intel_bw_state memory is
> >>>freed properly.
> >>>
> >>>Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
> >>>---
> >>>drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> >>>drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> >>>drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> >>>3 files changed, 8 insertions(+)
> >>>
> >>>diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> >>>index dcb66a33be9b..b228671d5a5d 100644
> >>>--- a/drivers/gpu/drm/i915/display/intel_bw.c
> >>>+++ b/drivers/gpu/drm/i915/display/intel_bw.c
> >>>@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
> >>>
n
> >>> return 0;
> >>>}
> >>>+
> >>>+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> >>>+{
> >>>+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> >>>+}
> >>>diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> >>>index 9db10af012f4..20b9ad241802 100644
> >>>--- a/drivers/gpu/drm/i915/display/intel_bw.h
> >>>+++ b/drivers/gpu/drm/i915/display/intel_bw.h
> >>>@@ -25,6 +25,7 @@ struct intel_bw_state {
> >>>
> >>>void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> >>>int intel_bw_init(struct drm_i915_private *dev_priv);
> >>>+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> >>>int intel_bw_atomic_check(struct intel_atomic_state *state);
> >>>void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> >>> const struct intel_crtc_state *crtc_state);
> >>>diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> >>>index 3190aa27ffdc..756eb90b1bb1 100644
> >>>--- a/drivers/gpu/drm/i915/display/intel_display.c
> >>>+++ b/drivers/gpu/drm/i915/display/intel_display.c
> >>>@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
> >>>
> >>> intel_gmbus_teardown(i915);
> >>>
> >>>+ intel_bw_cleanup(i915);
> >>
> >>This doesn't seem to match the (reverse) order of
> >>intel_modeset_init()... but it's actually the gmbus_teardown() that is
> >>out of place. Did you check if it's not a wrong shutdown ordering?
> >>
> >
> >In intel_modeset_init(), intel_gmbus_setup() happens after
> >intel_bw_init().
> >I think the patch follows the reverse ordering properly.
> >Am I missing anything?
>
> I said it seems that it's the gmbus_teardown() that is out of place.
Hummm.
> Have you seen my comment above? Why are we duplicating the bw_state on
> the module-remove code path?
I am not exactly sure why duplicating of bw_state happens on removal.
Despite of this, I think we need to have a method to clean up
the resources allocated/initialized using drm_atotomic_private_obj_init()
from intel_bw_init() which is missing at the moment.
Moreover, I am getting below kmemleak trace on my NUC during module
load/unload sequence.
backtrace:
[<00000000fe2b0db8>] intel_bw_init+0x1a/0x50 [i915]
[<00000000ae7de386>] intel_modeset_init+0x197/0x1d60 [i915]
[<00000000b520b2d8>] i915_driver_probe+0xae6/0x1520 [i915]
[<00000000682b3100>] i915_pci_probe+0x3f/0x150 [i915]
[<00000000efd970df>] local_pci_probe+0x3d/0x90
[<00000000a05c08fe>] pci_device_probe+0xd5/0x160
[<000000004fdf5c22>] really_probe+0x1b1/0x300
[<0000000006397c43>] driver_probe_device+0x4b/0xe0
[<000000008ac9d085>] device_driver_attach+0x4a/0x50
[<000000004c50b157>] __driver_attach+0x67/0xb0
[<000000007e27c7f9>] bus_for_each_dev+0x71/0xb0
[<0000000042286228>] bus_add_driver+0x177/0x1f0
[<000000006b066a1f>] driver_register+0x56/0xf0
[<0000000023883b3a>] do_one_initcall+0x41/0x1df
[<00000000933062b0>] do_init_module+0x56/0x1f8
[<00000000dde25517>] load_module+0x201c/0x2700
Freeing up the resources during module unload sequence with
drm_atomic_private_obj_fini() fixes this.
Thanks,
Pankaj
>
> Lucas De Marchi
>
> >
> >Thanks,
> >Pankaj
> >
> >>thanks
> >>Lucas De Marchi
> >>
> >>>+
> >>> destroy_workqueue(i915->flip_wq);
> >>> destroy_workqueue(i915->modeset_wq);
> >>>
> >>>--
> >>>2.23.0
> >>>
> >>>_______________________________________________
> >>>Intel-gfx mailing list
> >>>Intel-gfx@lists.freedesktop.org
> >>>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-12 0:22 ` Lucas De Marchi
@ 2019-12-12 17:37 ` Matt Roper
-1 siblings, 0 replies; 25+ messages in thread
From: Matt Roper @ 2019-12-12 17:37 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Stanislav Lisovskiy, David Airlie, Bharadiya, Pankaj,
Stuart Summers, dri-devel, Rodrigo Vivi, intel-gfx
On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
> On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
> > On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
> > > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> > > >intel_bw_state allocated memory is not getting freed even after
> > > >module removal.
> > > >
> > > >kmemleak reported backtrace:
> > > >
> > > > [<0000000079019739>] kmemdup+0x17/0x40
> > > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> > > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> > > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> > > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> > > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> > > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> > > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> > > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> > > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> > > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> > > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> > > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> > > > [<00000000580e9566>] unbind_store+0xc3/0x120
> > > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> > > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
> > >
> > > what I find strange in this is that the last state was allocated by the
> > > "driver remove" code path.
> > >
> > > >
> > > >Call the drm_atomic_private_obj_fini(), which inturn calls the
> > > >intel_bw_destroy_state() to make sure the intel_bw_state memory is
> > > >freed properly.
> > > >
> > > >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
> > > >---
> > > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> > > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> > > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> > > >3 files changed, 8 insertions(+)
> > > >
> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> > > >index dcb66a33be9b..b228671d5a5d 100644
> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
> > > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
> > > >
> > > > return 0;
> > > >}
> > > >+
> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> > > >+{
> > > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> > > >+}
> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> > > >index 9db10af012f4..20b9ad241802 100644
> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
> > > >@@ -25,6 +25,7 @@ struct intel_bw_state {
> > > >
> > > >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> > > >int intel_bw_init(struct drm_i915_private *dev_priv);
> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> > > >int intel_bw_atomic_check(struct intel_atomic_state *state);
> > > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> > > > const struct intel_crtc_state *crtc_state);
> > > >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > >index 3190aa27ffdc..756eb90b1bb1 100644
> > > >--- a/drivers/gpu/drm/i915/display/intel_display.c
> > > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
> > > >
> > > > intel_gmbus_teardown(i915);
> > > >
> > > >+ intel_bw_cleanup(i915);
> > >
> > > This doesn't seem to match the (reverse) order of
> > > intel_modeset_init()... but it's actually the gmbus_teardown() that is
> > > out of place. Did you check if it's not a wrong shutdown ordering?
> > >
> >
> > In intel_modeset_init(), intel_gmbus_setup() happens after
> > intel_bw_init().
> > I think the patch follows the reverse ordering properly.
> > Am I missing anything?
>
> I said it seems that it's the gmbus_teardown() that is out of place.
> Have you seen my comment above? Why are we duplicating the bw_state on
> the module-remove code path?
I think that part is legitimate. Part of the module remove sequence
does an atomic commit to turn everything off. During atomic
transactions, we create duplicates of all modesetting state objects can
be modified; if/when the transaction succeeds, those duplicates are
swapped into the actual driver state and the old objects are destroyed.
Thus in cases like this where we forget to destroy a private object
state, that leaked state structure will be the one allocated during the
very last atomic transaction that happened (i.e., on the driver teardown
codepath).
Matt
>
> Lucas De Marchi
>
> >
> > Thanks,
> > Pankaj
> >
> > > thanks
> > > Lucas De Marchi
> > >
> > > >+
> > > > destroy_workqueue(i915->flip_wq);
> > > > destroy_workqueue(i915->modeset_wq);
> > > >
> > > >--
> > > >2.23.0
> > > >
> > > >_______________________________________________
> > > >Intel-gfx mailing list
> > > >Intel-gfx@lists.freedesktop.org
> > > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation
(916) 356-2795
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-12 17:37 ` Matt Roper
0 siblings, 0 replies; 25+ messages in thread
From: Matt Roper @ 2019-12-12 17:37 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: David Airlie, dri-devel, intel-gfx
On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
> On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
> > On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
> > > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> > > >intel_bw_state allocated memory is not getting freed even after
> > > >module removal.
> > > >
> > > >kmemleak reported backtrace:
> > > >
> > > > [<0000000079019739>] kmemdup+0x17/0x40
> > > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> > > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> > > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> > > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> > > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> > > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> > > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> > > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> > > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> > > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> > > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> > > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> > > > [<00000000580e9566>] unbind_store+0xc3/0x120
> > > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> > > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
> > >
> > > what I find strange in this is that the last state was allocated by the
> > > "driver remove" code path.
> > >
> > > >
> > > >Call the drm_atomic_private_obj_fini(), which inturn calls the
> > > >intel_bw_destroy_state() to make sure the intel_bw_state memory is
> > > >freed properly.
> > > >
> > > >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
> > > >---
> > > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> > > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> > > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> > > >3 files changed, 8 insertions(+)
> > > >
> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> > > >index dcb66a33be9b..b228671d5a5d 100644
> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
> > > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
> > > >
> > > > return 0;
> > > >}
> > > >+
> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> > > >+{
> > > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> > > >+}
> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> > > >index 9db10af012f4..20b9ad241802 100644
> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
> > > >@@ -25,6 +25,7 @@ struct intel_bw_state {
> > > >
> > > >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> > > >int intel_bw_init(struct drm_i915_private *dev_priv);
> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> > > >int intel_bw_atomic_check(struct intel_atomic_state *state);
> > > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> > > > const struct intel_crtc_state *crtc_state);
> > > >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > >index 3190aa27ffdc..756eb90b1bb1 100644
> > > >--- a/drivers/gpu/drm/i915/display/intel_display.c
> > > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
> > > >
> > > > intel_gmbus_teardown(i915);
> > > >
> > > >+ intel_bw_cleanup(i915);
> > >
> > > This doesn't seem to match the (reverse) order of
> > > intel_modeset_init()... but it's actually the gmbus_teardown() that is
> > > out of place. Did you check if it's not a wrong shutdown ordering?
> > >
> >
> > In intel_modeset_init(), intel_gmbus_setup() happens after
> > intel_bw_init().
> > I think the patch follows the reverse ordering properly.
> > Am I missing anything?
>
> I said it seems that it's the gmbus_teardown() that is out of place.
> Have you seen my comment above? Why are we duplicating the bw_state on
> the module-remove code path?
I think that part is legitimate. Part of the module remove sequence
does an atomic commit to turn everything off. During atomic
transactions, we create duplicates of all modesetting state objects can
be modified; if/when the transaction succeeds, those duplicates are
swapped into the actual driver state and the old objects are destroyed.
Thus in cases like this where we forget to destroy a private object
state, that leaked state structure will be the one allocated during the
very last atomic transaction that happened (i.e., on the driver teardown
codepath).
Matt
>
> Lucas De Marchi
>
> >
> > Thanks,
> > Pankaj
> >
> > > thanks
> > > Lucas De Marchi
> > >
> > > >+
> > > > destroy_workqueue(i915->flip_wq);
> > > > destroy_workqueue(i915->modeset_wq);
> > > >
> > > >--
> > > >2.23.0
> > > >
> > > >_______________________________________________
> > > >Intel-gfx mailing list
> > > >Intel-gfx@lists.freedesktop.org
> > > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation
(916) 356-2795
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx][PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-09 14:39 ` [Intel-gfx] [PATCH] " Pankaj Bharadiya
@ 2019-12-12 17:49 ` Matt Roper
-1 siblings, 0 replies; 25+ messages in thread
From: Matt Roper @ 2019-12-12 17:49 UTC (permalink / raw)
To: Pankaj Bharadiya
Cc: Stanislav Lisovskiy, David Airlie, Stuart Summers, dri-devel,
Rodrigo Vivi, intel-gfx
On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> intel_bw_state allocated memory is not getting freed even after
> module removal.
>
> kmemleak reported backtrace:
>
> [<0000000079019739>] kmemdup+0x17/0x40
> [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> [<00000000580e9566>] unbind_store+0xc3/0x120
> [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>
> Call the drm_atomic_private_obj_fini(), which inturn calls the
> intel_bw_destroy_state() to make sure the intel_bw_state memory is
> freed properly.
>
> Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
It looks like we'd also leak this object if intel_modeset_init() bails
out early due to failure to init a crtc. I.e., we call
drm_mode_config_cleanup() which cleans up any regular state objects that
may have been initialized by this point, but never destroy the bw_state
which was allocated earlier in the function.
Matt
> ---
> drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> 3 files changed, 8 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> index dcb66a33be9b..b228671d5a5d 100644
> --- a/drivers/gpu/drm/i915/display/intel_bw.c
> +++ b/drivers/gpu/drm/i915/display/intel_bw.c
> @@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>
> return 0;
> }
> +
> +void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> +{
> + drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> index 9db10af012f4..20b9ad241802 100644
> --- a/drivers/gpu/drm/i915/display/intel_bw.h
> +++ b/drivers/gpu/drm/i915/display/intel_bw.h
> @@ -25,6 +25,7 @@ struct intel_bw_state {
>
> void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> int intel_bw_init(struct drm_i915_private *dev_priv);
> +void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> int intel_bw_atomic_check(struct intel_atomic_state *state);
> void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> const struct intel_crtc_state *crtc_state);
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 3190aa27ffdc..756eb90b1bb1 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>
> intel_gmbus_teardown(i915);
>
> + intel_bw_cleanup(i915);
> +
> destroy_workqueue(i915->flip_wq);
> destroy_workqueue(i915->modeset_wq);
>
> --
> 2.23.0
>
--
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation
(916) 356-2795
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-12 17:49 ` Matt Roper
0 siblings, 0 replies; 25+ messages in thread
From: Matt Roper @ 2019-12-12 17:49 UTC (permalink / raw)
To: Pankaj Bharadiya; +Cc: David Airlie, dri-devel, intel-gfx
On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> intel_bw_state allocated memory is not getting freed even after
> module removal.
>
> kmemleak reported backtrace:
>
> [<0000000079019739>] kmemdup+0x17/0x40
> [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> [<00000000580e9566>] unbind_store+0xc3/0x120
> [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>
> Call the drm_atomic_private_obj_fini(), which inturn calls the
> intel_bw_destroy_state() to make sure the intel_bw_state memory is
> freed properly.
>
> Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
It looks like we'd also leak this object if intel_modeset_init() bails
out early due to failure to init a crtc. I.e., we call
drm_mode_config_cleanup() which cleans up any regular state objects that
may have been initialized by this point, but never destroy the bw_state
which was allocated earlier in the function.
Matt
> ---
> drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
> drivers/gpu/drm/i915/display/intel_bw.h | 1 +
> drivers/gpu/drm/i915/display/intel_display.c | 2 ++
> 3 files changed, 8 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
> index dcb66a33be9b..b228671d5a5d 100644
> --- a/drivers/gpu/drm/i915/display/intel_bw.c
> +++ b/drivers/gpu/drm/i915/display/intel_bw.c
> @@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>
> return 0;
> }
> +
> +void intel_bw_cleanup(struct drm_i915_private *dev_priv)
> +{
> + drm_atomic_private_obj_fini(&dev_priv->bw_obj);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
> index 9db10af012f4..20b9ad241802 100644
> --- a/drivers/gpu/drm/i915/display/intel_bw.h
> +++ b/drivers/gpu/drm/i915/display/intel_bw.h
> @@ -25,6 +25,7 @@ struct intel_bw_state {
>
> void intel_bw_init_hw(struct drm_i915_private *dev_priv);
> int intel_bw_init(struct drm_i915_private *dev_priv);
> +void intel_bw_cleanup(struct drm_i915_private *dev_priv);
> int intel_bw_atomic_check(struct intel_atomic_state *state);
> void intel_bw_crtc_update(struct intel_bw_state *bw_state,
> const struct intel_crtc_state *crtc_state);
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 3190aa27ffdc..756eb90b1bb1 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>
> intel_gmbus_teardown(i915);
>
> + intel_bw_cleanup(i915);
> +
> destroy_workqueue(i915->flip_wq);
> destroy_workqueue(i915->modeset_wq);
>
> --
> 2.23.0
>
--
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation
(916) 356-2795
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx][PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-12 17:49 ` [Intel-gfx] [PATCH] " Matt Roper
@ 2019-12-12 18:01 ` Ville Syrjälä
-1 siblings, 0 replies; 25+ messages in thread
From: Ville Syrjälä @ 2019-12-12 18:01 UTC (permalink / raw)
To: Matt Roper
Cc: Stanislav Lisovskiy, David Airlie, Pankaj Bharadiya,
Stuart Summers, dri-devel, Rodrigo Vivi, intel-gfx
On Thu, Dec 12, 2019 at 09:49:10AM -0800, Matt Roper wrote:
> On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> > intel_bw_state allocated memory is not getting freed even after
> > module removal.
> >
> > kmemleak reported backtrace:
> >
> > [<0000000079019739>] kmemdup+0x17/0x40
> > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> > [<00000000580e9566>] unbind_store+0xc3/0x120
> > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
> >
> > Call the drm_atomic_private_obj_fini(), which inturn calls the
> > intel_bw_destroy_state() to make sure the intel_bw_state memory is
> > freed properly.
> >
> > Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>
> It looks like we'd also leak this object if intel_modeset_init() bails
> out early due to failure to init a crtc. I.e., we call
> drm_mode_config_cleanup() which cleans up any regular state objects that
> may have been initialized by this point, but never destroy the bw_state
> which was allocated earlier in the function.
The question is why isn't the core cleaning those up for us? It already
puts them onto a list so it could easily do it. Looks like komeda has
already hand rolled exactly that.
--
Ville Syrjälä
Intel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-12 18:01 ` Ville Syrjälä
0 siblings, 0 replies; 25+ messages in thread
From: Ville Syrjälä @ 2019-12-12 18:01 UTC (permalink / raw)
To: Matt Roper; +Cc: David Airlie, dri-devel, intel-gfx
On Thu, Dec 12, 2019 at 09:49:10AM -0800, Matt Roper wrote:
> On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
> > intel_bw_state allocated memory is not getting freed even after
> > module removal.
> >
> > kmemleak reported backtrace:
> >
> > [<0000000079019739>] kmemdup+0x17/0x40
> > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
> > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
> > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
> > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
> > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
> > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
> > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
> > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
> > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
> > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
> > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
> > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
> > [<00000000580e9566>] unbind_store+0xc3/0x120
> > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
> > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
> >
> > Call the drm_atomic_private_obj_fini(), which inturn calls the
> > intel_bw_destroy_state() to make sure the intel_bw_state memory is
> > freed properly.
> >
> > Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>
> It looks like we'd also leak this object if intel_modeset_init() bails
> out early due to failure to init a crtc. I.e., we call
> drm_mode_config_cleanup() which cleans up any regular state objects that
> may have been initialized by this point, but never destroy the bw_state
> which was allocated earlier in the function.
The question is why isn't the core cleaning those up for us? It already
puts them onto a list so it could easily do it. Looks like komeda has
already hand rolled exactly that.
--
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-12 17:37 ` Matt Roper
@ 2019-12-12 20:34 ` Lucas De Marchi
-1 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-12 20:34 UTC (permalink / raw)
To: Matt Roper
Cc: Stanislav Lisovskiy, David Airlie, Bharadiya, Pankaj,
Stuart Summers, dri-devel, Rodrigo Vivi, intel-gfx
On Thu, Dec 12, 2019 at 09:37:17AM -0800, Matt Roper wrote:
>On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
>> On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>> > On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>> > > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>> > > >intel_bw_state allocated memory is not getting freed even after
>> > > >module removal.
>> > > >
>> > > >kmemleak reported backtrace:
>> > > >
>> > > > [<0000000079019739>] kmemdup+0x17/0x40
>> > > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>> > > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>> > > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>> > > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>> > > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>> > > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>> > > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>> > > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>> > > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>> > > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>> > > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>> > > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>> > > > [<00000000580e9566>] unbind_store+0xc3/0x120
>> > > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>> > > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>> > >
>> > > what I find strange in this is that the last state was allocated by the
>> > > "driver remove" code path.
>> > >
>> > > >
>> > > >Call the drm_atomic_private_obj_fini(), which inturn calls the
>> > > >intel_bw_destroy_state() to make sure the intel_bw_state memory is
>> > > >freed properly.
>> > > >
>> > > >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>> > > >---
>> > > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>> > > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>> > > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>> > > >3 files changed, 8 insertions(+)
>> > > >
>> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>> > > >index dcb66a33be9b..b228671d5a5d 100644
>> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>> > > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>> > > >
>> > > > return 0;
>> > > >}
>> > > >+
>> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>> > > >+{
>> > > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>> > > >+}
>> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>> > > >index 9db10af012f4..20b9ad241802 100644
>> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>> > > >@@ -25,6 +25,7 @@ struct intel_bw_state {
>> > > >
>> > > >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
>> > > >int intel_bw_init(struct drm_i915_private *dev_priv);
>> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>> > > >int intel_bw_atomic_check(struct intel_atomic_state *state);
>> > > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>> > > > const struct intel_crtc_state *crtc_state);
>> > > >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> > > >index 3190aa27ffdc..756eb90b1bb1 100644
>> > > >--- a/drivers/gpu/drm/i915/display/intel_display.c
>> > > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>> > > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>> > > >
>> > > > intel_gmbus_teardown(i915);
>> > > >
>> > > >+ intel_bw_cleanup(i915);
>> > >
>> > > This doesn't seem to match the (reverse) order of
>> > > intel_modeset_init()... but it's actually the gmbus_teardown() that is
>> > > out of place. Did you check if it's not a wrong shutdown ordering?
>> > >
>> >
>> > In intel_modeset_init(), intel_gmbus_setup() happens after
>> > intel_bw_init().
>> > I think the patch follows the reverse ordering properly.
>> > Am I missing anything?
>>
>> I said it seems that it's the gmbus_teardown() that is out of place.
>> Have you seen my comment above? Why are we duplicating the bw_state on
>> the module-remove code path?
>
>I think that part is legitimate. Part of the module remove sequence
>does an atomic commit to turn everything off. During atomic
>transactions, we create duplicates of all modesetting state objects can
>be modified; if/when the transaction succeeds, those duplicates are
>swapped into the actual driver state and the old objects are destroyed.
>Thus in cases like this where we forget to destroy a private object
>state, that leaked state structure will be the one allocated during the
>very last atomic transaction that happened (i.e., on the driver teardown
>codepath).
humn, that makes sense. The new duplicate state will replace the
previous one and hence why we see it in the backtrace, rather than one
allocated previously.
thanks
Lucas De Marchi
>
>
>Matt
>
>>
>> Lucas De Marchi
>>
>> >
>> > Thanks,
>> > Pankaj
>> >
>> > > thanks
>> > > Lucas De Marchi
>> > >
>> > > >+
>> > > > destroy_workqueue(i915->flip_wq);
>> > > > destroy_workqueue(i915->modeset_wq);
>> > > >
>> > > >--
>> > > >2.23.0
>> > > >
>> > > >_______________________________________________
>> > > >Intel-gfx mailing list
>> > > >Intel-gfx@lists.freedesktop.org
>> > > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>--
>Matt Roper
>Graphics Software Engineer
>VTT-OSGC Platform Enablement
>Intel Corporation
>(916) 356-2795
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-12 20:34 ` Lucas De Marchi
0 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-12 20:34 UTC (permalink / raw)
To: Matt Roper; +Cc: David Airlie, dri-devel, intel-gfx
On Thu, Dec 12, 2019 at 09:37:17AM -0800, Matt Roper wrote:
>On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
>> On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>> > On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>> > > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>> > > >intel_bw_state allocated memory is not getting freed even after
>> > > >module removal.
>> > > >
>> > > >kmemleak reported backtrace:
>> > > >
>> > > > [<0000000079019739>] kmemdup+0x17/0x40
>> > > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>> > > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>> > > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>> > > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>> > > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>> > > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>> > > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>> > > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>> > > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>> > > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>> > > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>> > > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>> > > > [<00000000580e9566>] unbind_store+0xc3/0x120
>> > > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>> > > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>> > >
>> > > what I find strange in this is that the last state was allocated by the
>> > > "driver remove" code path.
>> > >
>> > > >
>> > > >Call the drm_atomic_private_obj_fini(), which inturn calls the
>> > > >intel_bw_destroy_state() to make sure the intel_bw_state memory is
>> > > >freed properly.
>> > > >
>> > > >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>> > > >---
>> > > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>> > > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>> > > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>> > > >3 files changed, 8 insertions(+)
>> > > >
>> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>> > > >index dcb66a33be9b..b228671d5a5d 100644
>> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>> > > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>> > > >
>> > > > return 0;
>> > > >}
>> > > >+
>> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>> > > >+{
>> > > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>> > > >+}
>> > > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>> > > >index 9db10af012f4..20b9ad241802 100644
>> > > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>> > > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>> > > >@@ -25,6 +25,7 @@ struct intel_bw_state {
>> > > >
>> > > >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
>> > > >int intel_bw_init(struct drm_i915_private *dev_priv);
>> > > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>> > > >int intel_bw_atomic_check(struct intel_atomic_state *state);
>> > > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>> > > > const struct intel_crtc_state *crtc_state);
>> > > >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> > > >index 3190aa27ffdc..756eb90b1bb1 100644
>> > > >--- a/drivers/gpu/drm/i915/display/intel_display.c
>> > > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>> > > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>> > > >
>> > > > intel_gmbus_teardown(i915);
>> > > >
>> > > >+ intel_bw_cleanup(i915);
>> > >
>> > > This doesn't seem to match the (reverse) order of
>> > > intel_modeset_init()... but it's actually the gmbus_teardown() that is
>> > > out of place. Did you check if it's not a wrong shutdown ordering?
>> > >
>> >
>> > In intel_modeset_init(), intel_gmbus_setup() happens after
>> > intel_bw_init().
>> > I think the patch follows the reverse ordering properly.
>> > Am I missing anything?
>>
>> I said it seems that it's the gmbus_teardown() that is out of place.
>> Have you seen my comment above? Why are we duplicating the bw_state on
>> the module-remove code path?
>
>I think that part is legitimate. Part of the module remove sequence
>does an atomic commit to turn everything off. During atomic
>transactions, we create duplicates of all modesetting state objects can
>be modified; if/when the transaction succeeds, those duplicates are
>swapped into the actual driver state and the old objects are destroyed.
>Thus in cases like this where we forget to destroy a private object
>state, that leaked state structure will be the one allocated during the
>very last atomic transaction that happened (i.e., on the driver teardown
>codepath).
humn, that makes sense. The new duplicate state will replace the
previous one and hence why we see it in the backtrace, rather than one
allocated previously.
thanks
Lucas De Marchi
>
>
>Matt
>
>>
>> Lucas De Marchi
>>
>> >
>> > Thanks,
>> > Pankaj
>> >
>> > > thanks
>> > > Lucas De Marchi
>> > >
>> > > >+
>> > > > destroy_workqueue(i915->flip_wq);
>> > > > destroy_workqueue(i915->modeset_wq);
>> > > >
>> > > >--
>> > > >2.23.0
>> > > >
>> > > >_______________________________________________
>> > > >Intel-gfx mailing list
>> > > >Intel-gfx@lists.freedesktop.org
>> > > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
>--
>Matt Roper
>Graphics Software Engineer
>VTT-OSGC Platform Enablement
>Intel Corporation
>(916) 356-2795
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-12 20:34 ` Lucas De Marchi
@ 2019-12-17 19:39 ` Lucas De Marchi
-1 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-17 19:39 UTC (permalink / raw)
To: Matt Roper
Cc: Stanislav Lisovskiy, David Airlie, Bharadiya, Pankaj,
Stuart Summers, dri-devel, Rodrigo Vivi, intel-gfx
On Thu, Dec 12, 2019 at 12:34:49PM -0800, Lucas De Marchi wrote:
>On Thu, Dec 12, 2019 at 09:37:17AM -0800, Matt Roper wrote:
>>On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
>>>On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>>>> On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>>>> > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>>>> > >intel_bw_state allocated memory is not getting freed even after
>>>> > >module removal.
>>>> > >
>>>> > >kmemleak reported backtrace:
>>>> > >
>>>> > > [<0000000079019739>] kmemdup+0x17/0x40
>>>> > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>>>> > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>>>> > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>>>> > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>>>> > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>>>> > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>>>> > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>>>> > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>>>> > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>>>> > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>>>> > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>>>> > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>>>> > > [<00000000580e9566>] unbind_store+0xc3/0x120
>>>> > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>>>> > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>>>> >
>>>> > what I find strange in this is that the last state was allocated by the
>>>> > "driver remove" code path.
>>>> >
>>>> > >
>>>> > >Call the drm_atomic_private_obj_fini(), which inturn calls the
>>>> > >intel_bw_destroy_state() to make sure the intel_bw_state memory is
>>>> > >freed properly.
>>>> > >
>>>> > >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>>>> > >---
>>>> > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>>>> > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>>>> > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>>>> > >3 files changed, 8 insertions(+)
>>>> > >
>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>>>> > >index dcb66a33be9b..b228671d5a5d 100644
>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>>>> > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>>>> > >
>>>> > > return 0;
>>>> > >}
>>>> > >+
>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>>>> > >+{
>>>> > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>>>> > >+}
>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>>>> > >index 9db10af012f4..20b9ad241802 100644
>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>>>> > >@@ -25,6 +25,7 @@ struct intel_bw_state {
>>>> > >
>>>> > >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
>>>> > >int intel_bw_init(struct drm_i915_private *dev_priv);
>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>>>> > >int intel_bw_atomic_check(struct intel_atomic_state *state);
>>>> > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>>>> > > const struct intel_crtc_state *crtc_state);
>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>>>> > >index 3190aa27ffdc..756eb90b1bb1 100644
>>>> > >--- a/drivers/gpu/drm/i915/display/intel_display.c
>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>>>> > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>>>> > >
>>>> > > intel_gmbus_teardown(i915);
>>>> > >
>>>> > >+ intel_bw_cleanup(i915);
>>>> >
>>>> > This doesn't seem to match the (reverse) order of
>>>> > intel_modeset_init()... but it's actually the gmbus_teardown() that is
>>>> > out of place. Did you check if it's not a wrong shutdown ordering?
>>>> >
>>>>
>>>> In intel_modeset_init(), intel_gmbus_setup() happens after
>>>> intel_bw_init().
>>>> I think the patch follows the reverse ordering properly.
>>>> Am I missing anything?
>>>
>>>I said it seems that it's the gmbus_teardown() that is out of place.
>>>Have you seen my comment above? Why are we duplicating the bw_state on
>>>the module-remove code path?
>>
>>I think that part is legitimate. Part of the module remove sequence
>>does an atomic commit to turn everything off. During atomic
>>transactions, we create duplicates of all modesetting state objects can
>>be modified; if/when the transaction succeeds, those duplicates are
>>swapped into the actual driver state and the old objects are destroyed.
>>Thus in cases like this where we forget to destroy a private object
>>state, that leaked state structure will be the one allocated during the
>>very last atomic transaction that happened (i.e., on the driver teardown
>>codepath).
>
>humn, that makes sense. The new duplicate state will replace the
>previous one and hence why we see it in the backtrace, rather than one
>allocated previously.
>
>thanks
>Lucas De Marchi
and...
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>
>>
>>
>>Matt
>>
>>>
>>>Lucas De Marchi
>>>
>>>>
>>>> Thanks,
>>>> Pankaj
>>>>
>>>> > thanks
>>>> > Lucas De Marchi
>>>> >
>>>> > >+
>>>> > > destroy_workqueue(i915->flip_wq);
>>>> > > destroy_workqueue(i915->modeset_wq);
>>>> > >
>>>> > >--
>>>> > >2.23.0
>>>> > >
>>>> > >_______________________________________________
>>>> > >Intel-gfx mailing list
>>>> > >Intel-gfx@lists.freedesktop.org
>>>> > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>
>>--
>>Matt Roper
>>Graphics Software Engineer
>>VTT-OSGC Platform Enablement
>>Intel Corporation
>>(916) 356-2795
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-17 19:39 ` Lucas De Marchi
0 siblings, 0 replies; 25+ messages in thread
From: Lucas De Marchi @ 2019-12-17 19:39 UTC (permalink / raw)
To: Matt Roper; +Cc: David Airlie, dri-devel, intel-gfx
On Thu, Dec 12, 2019 at 12:34:49PM -0800, Lucas De Marchi wrote:
>On Thu, Dec 12, 2019 at 09:37:17AM -0800, Matt Roper wrote:
>>On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
>>>On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>>>> On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>>>> > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>>>> > >intel_bw_state allocated memory is not getting freed even after
>>>> > >module removal.
>>>> > >
>>>> > >kmemleak reported backtrace:
>>>> > >
>>>> > > [<0000000079019739>] kmemdup+0x17/0x40
>>>> > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>>>> > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>>>> > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>>>> > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>>>> > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>>>> > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>>>> > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>>>> > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>>>> > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>>>> > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>>>> > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>>>> > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>>>> > > [<00000000580e9566>] unbind_store+0xc3/0x120
>>>> > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>>>> > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>>>> >
>>>> > what I find strange in this is that the last state was allocated by the
>>>> > "driver remove" code path.
>>>> >
>>>> > >
>>>> > >Call the drm_atomic_private_obj_fini(), which inturn calls the
>>>> > >intel_bw_destroy_state() to make sure the intel_bw_state memory is
>>>> > >freed properly.
>>>> > >
>>>> > >Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com>
>>>> > >---
>>>> > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>>>> > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>>>> > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>>>> > >3 files changed, 8 insertions(+)
>>>> > >
>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c
>>>> > >index dcb66a33be9b..b228671d5a5d 100644
>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>>>> > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private *dev_priv)
>>>> > >
>>>> > > return 0;
>>>> > >}
>>>> > >+
>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv)
>>>> > >+{
>>>> > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>>>> > >+}
>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h b/drivers/gpu/drm/i915/display/intel_bw.h
>>>> > >index 9db10af012f4..20b9ad241802 100644
>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>>>> > >@@ -25,6 +25,7 @@ struct intel_bw_state {
>>>> > >
>>>> > >void intel_bw_init_hw(struct drm_i915_private *dev_priv);
>>>> > >int intel_bw_init(struct drm_i915_private *dev_priv);
>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>>>> > >int intel_bw_atomic_check(struct intel_atomic_state *state);
>>>> > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>>>> > > const struct intel_crtc_state *crtc_state);
>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>>>> > >index 3190aa27ffdc..756eb90b1bb1 100644
>>>> > >--- a/drivers/gpu/drm/i915/display/intel_display.c
>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>>>> > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
>>>> > >
>>>> > > intel_gmbus_teardown(i915);
>>>> > >
>>>> > >+ intel_bw_cleanup(i915);
>>>> >
>>>> > This doesn't seem to match the (reverse) order of
>>>> > intel_modeset_init()... but it's actually the gmbus_teardown() that is
>>>> > out of place. Did you check if it's not a wrong shutdown ordering?
>>>> >
>>>>
>>>> In intel_modeset_init(), intel_gmbus_setup() happens after
>>>> intel_bw_init().
>>>> I think the patch follows the reverse ordering properly.
>>>> Am I missing anything?
>>>
>>>I said it seems that it's the gmbus_teardown() that is out of place.
>>>Have you seen my comment above? Why are we duplicating the bw_state on
>>>the module-remove code path?
>>
>>I think that part is legitimate. Part of the module remove sequence
>>does an atomic commit to turn everything off. During atomic
>>transactions, we create duplicates of all modesetting state objects can
>>be modified; if/when the transaction succeeds, those duplicates are
>>swapped into the actual driver state and the old objects are destroyed.
>>Thus in cases like this where we forget to destroy a private object
>>state, that leaked state structure will be the one allocated during the
>>very last atomic transaction that happened (i.e., on the driver teardown
>>codepath).
>
>humn, that makes sense. The new duplicate state will replace the
>previous one and hence why we see it in the backtrace, rather than one
>allocated previously.
>
>thanks
>Lucas De Marchi
and...
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
>
>>
>>
>>Matt
>>
>>>
>>>Lucas De Marchi
>>>
>>>>
>>>> Thanks,
>>>> Pankaj
>>>>
>>>> > thanks
>>>> > Lucas De Marchi
>>>> >
>>>> > >+
>>>> > > destroy_workqueue(i915->flip_wq);
>>>> > > destroy_workqueue(i915->modeset_wq);
>>>> > >
>>>> > >--
>>>> > >2.23.0
>>>> > >
>>>> > >_______________________________________________
>>>> > >Intel-gfx mailing list
>>>> > >Intel-gfx@lists.freedesktop.org
>>>> > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>
>>--
>>Matt Roper
>>Graphics Software Engineer
>>VTT-OSGC Platform Enablement
>>Intel Corporation
>>(916) 356-2795
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-09 14:39 ` [Intel-gfx] [PATCH] " Pankaj Bharadiya
` (3 preceding siblings ...)
(?)
@ 2019-12-23 10:24 ` Patchwork
-1 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2019-12-23 10:24 UTC (permalink / raw)
To: Bharadiya,Pankaj; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/display: cleanup intel_bw_state on i915 module removal
URL : https://patchwork.freedesktop.org/series/70634/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_7521 -> Patchwork_15655
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/index.html
Known issues
------------
Here are the changes found in Patchwork_15655 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_exec_suspend@basic-s0:
- fi-tgl-y: [PASS][1] -> [INCOMPLETE][2] ([i915#472])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-tgl-y/igt@gem_exec_suspend@basic-s0.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-tgl-y/igt@gem_exec_suspend@basic-s0.html
* igt@gem_sync@basic-store-each:
- fi-ivb-3770: [PASS][3] -> [FAIL][4] ([i915#798])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-ivb-3770/igt@gem_sync@basic-store-each.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-ivb-3770/igt@gem_sync@basic-store-each.html
* igt@i915_selftest@live_gem_contexts:
- fi-byt-j1900: [PASS][5] -> [DMESG-FAIL][6] ([i915#722])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-byt-j1900/igt@i915_selftest@live_gem_contexts.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-byt-j1900/igt@i915_selftest@live_gem_contexts.html
* igt@kms_chamelium@hdmi-hpd-fast:
- fi-kbl-7500u: [PASS][7] -> [FAIL][8] ([fdo#111096] / [i915#323])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
#### Possible fixes ####
* igt@gem_exec_suspend@basic-s4-devices:
- fi-icl-guc: [INCOMPLETE][9] ([i915#140] / [i915#184]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-icl-guc/igt@gem_exec_suspend@basic-s4-devices.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-icl-guc/igt@gem_exec_suspend@basic-s4-devices.html
* igt@i915_selftest@live_blt:
- fi-ivb-3770: [DMESG-FAIL][11] ([i915#725]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-ivb-3770/igt@i915_selftest@live_blt.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-ivb-3770/igt@i915_selftest@live_blt.html
- fi-byt-j1900: [DMESG-FAIL][13] ([i915#725]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-byt-j1900/igt@i915_selftest@live_blt.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-byt-j1900/igt@i915_selftest@live_blt.html
#### Warnings ####
* igt@gem_exec_suspend@basic-s4-devices:
- fi-kbl-x1275: [DMESG-WARN][15] ([fdo#107139] / [i915#62] / [i915#92]) -> [DMESG-WARN][16] ([fdo#107139] / [i915#62] / [i915#92] / [i915#95])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-x1275/igt@gem_exec_suspend@basic-s4-devices.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-x1275/igt@gem_exec_suspend@basic-s4-devices.html
* igt@i915_selftest@live_blt:
- fi-hsw-4770: [DMESG-FAIL][17] ([i915#770]) -> [DMESG-FAIL][18] ([i915#725])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-hsw-4770/igt@i915_selftest@live_blt.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-hsw-4770/igt@i915_selftest@live_blt.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- fi-kbl-x1275: [DMESG-WARN][19] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][20] ([i915#62] / [i915#92]) +5 similar issues
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-x1275/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-x1275/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size:
- fi-kbl-x1275: [DMESG-WARN][21] ([i915#62] / [i915#92]) -> [DMESG-WARN][22] ([i915#62] / [i915#92] / [i915#95])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#107139]: https://bugs.freedesktop.org/show_bug.cgi?id=107139
[fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096
[i915#140]: https://gitlab.freedesktop.org/drm/intel/issues/140
[i915#184]: https://gitlab.freedesktop.org/drm/intel/issues/184
[i915#323]: https://gitlab.freedesktop.org/drm/intel/issues/323
[i915#472]: https://gitlab.freedesktop.org/drm/intel/issues/472
[i915#476]: https://gitlab.freedesktop.org/drm/intel/issues/476
[i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62
[i915#722]: https://gitlab.freedesktop.org/drm/intel/issues/722
[i915#725]: https://gitlab.freedesktop.org/drm/intel/issues/725
[i915#770]: https://gitlab.freedesktop.org/drm/intel/issues/770
[i915#798]: https://gitlab.freedesktop.org/drm/intel/issues/798
[i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92
[i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95
Participating hosts (50 -> 47)
------------------------------
Additional (1): fi-kbl-guc
Missing (4): fi-ctg-p8600 fi-byt-clapper fi-ilk-m540 fi-bsw-cyan
Build changes
-------------
* CI: CI-20190529 -> None
* Linux: CI_DRM_7521 -> Patchwork_15655
CI-20190529: 20190529
CI_DRM_7521: 9203f67985ebf27211aa1eabb77093302248c9fc @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_5341: 5fe683cdebde2d77d16ffc42c9fdf29a9f95bb82 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_15655: 3fd0b1c8a344b3dcd86df601234ae242aaf4f9b0 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
3fd0b1c8a344 drm/i915/display: cleanup intel_bw_state on i915 module removal
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* [Intel-gfx] ✓ Fi.CI.IGT: success for drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-09 14:39 ` [Intel-gfx] [PATCH] " Pankaj Bharadiya
` (4 preceding siblings ...)
(?)
@ 2019-12-23 17:32 ` Patchwork
-1 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2019-12-23 17:32 UTC (permalink / raw)
To: Bharadiya,Pankaj; +Cc: intel-gfx
== Series Details ==
Series: drm/i915/display: cleanup intel_bw_state on i915 module removal
URL : https://patchwork.freedesktop.org/series/70634/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_7521_full -> Patchwork_15655_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Known issues
------------
Here are the changes found in Patchwork_15655_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_ctx_isolation@vcs1-s3:
- shard-tglb: [PASS][1] -> [INCOMPLETE][2] ([i915#456])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb7/igt@gem_ctx_isolation@vcs1-s3.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb1/igt@gem_ctx_isolation@vcs1-s3.html
* igt@gem_exec_reloc@basic-gtt:
- shard-snb: [PASS][3] -> [DMESG-WARN][4] ([i915#478])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-snb2/igt@gem_exec_reloc@basic-gtt.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-snb1/igt@gem_exec_reloc@basic-gtt.html
* igt@gem_exec_schedule@preempt-queue-chain-blt:
- shard-tglb: [PASS][5] -> [INCOMPLETE][6] ([fdo#111606] / [fdo#111677])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb2/igt@gem_exec_schedule@preempt-queue-chain-blt.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb6/igt@gem_exec_schedule@preempt-queue-chain-blt.html
* igt@gem_exec_suspend@basic-s3:
- shard-tglb: [PASS][7] -> [INCOMPLETE][8] ([fdo#111736] / [i915#460])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb3/igt@gem_exec_suspend@basic-s3.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb4/igt@gem_exec_suspend@basic-s3.html
* igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrash-inactive:
- shard-hsw: [PASS][9] -> [TIMEOUT][10] ([i915#530])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-hsw4/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrash-inactive.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-hsw7/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrash-inactive.html
* igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing:
- shard-glk: [PASS][11] -> [TIMEOUT][12] ([i915#530])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-glk1/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-glk8/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html
* igt@gem_userptr_blits@dmabuf-sync:
- shard-snb: [PASS][13] -> [DMESG-WARN][14] ([fdo#111870]) +1 similar issue
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-snb6/igt@gem_userptr_blits@dmabuf-sync.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-snb2/igt@gem_userptr_blits@dmabuf-sync.html
* igt@i915_pm_backlight@fade_with_suspend:
- shard-skl: [PASS][15] -> [INCOMPLETE][16] ([i915#69])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl7/igt@i915_pm_backlight@fade_with_suspend.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl7/igt@i915_pm_backlight@fade_with_suspend.html
* igt@i915_pm_rpm@modeset-stress-extra-wait:
- shard-glk: [PASS][17] -> [DMESG-WARN][18] ([i915#118] / [i915#95])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-glk4/igt@i915_pm_rpm@modeset-stress-extra-wait.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-glk8/igt@i915_pm_rpm@modeset-stress-extra-wait.html
* igt@i915_pm_rpm@system-suspend-modeset:
- shard-skl: [PASS][19] -> [INCOMPLETE][20] ([i915#151] / [i915#69])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl8/igt@i915_pm_rpm@system-suspend-modeset.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl8/igt@i915_pm_rpm@system-suspend-modeset.html
- shard-tglb: [PASS][21] -> [INCOMPLETE][22] ([i915#456] / [i915#460]) +1 similar issue
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb4/igt@i915_pm_rpm@system-suspend-modeset.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb2/igt@i915_pm_rpm@system-suspend-modeset.html
* igt@i915_selftest@live_requests:
- shard-tglb: [PASS][23] -> [INCOMPLETE][24] ([fdo#112057])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb1/igt@i915_selftest@live_requests.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb6/igt@i915_selftest@live_requests.html
* igt@i915_suspend@forcewake:
- shard-apl: [PASS][25] -> [DMESG-WARN][26] ([i915#180])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-apl4/igt@i915_suspend@forcewake.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-apl6/igt@i915_suspend@forcewake.html
* igt@kms_ccs@pipe-b-crc-primary-rotation-180:
- shard-skl: [PASS][27] -> [INCOMPLETE][28] ([i915#667])
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl1/igt@kms_ccs@pipe-b-crc-primary-rotation-180.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl4/igt@kms_ccs@pipe-b-crc-primary-rotation-180.html
* igt@kms_cursor_crc@pipe-a-cursor-256x85-onscreen:
- shard-skl: [PASS][29] -> [FAIL][30] ([i915#54]) +2 similar issues
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl5/igt@kms_cursor_crc@pipe-a-cursor-256x85-onscreen.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl7/igt@kms_cursor_crc@pipe-a-cursor-256x85-onscreen.html
* igt@kms_cursor_crc@pipe-a-cursor-suspend:
- shard-kbl: [PASS][31] -> [DMESG-WARN][32] ([i915#180]) +6 similar issues
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-kbl3/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-skl: [PASS][33] -> [FAIL][34] ([i915#79])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl5/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl2/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@flip-vs-suspend:
- shard-skl: [PASS][35] -> [INCOMPLETE][36] ([i915#221])
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl10/igt@kms_flip@flip-vs-suspend.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl10/igt@kms_flip@flip-vs-suspend.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-onoff:
- shard-tglb: [PASS][37] -> [INCOMPLETE][38] ([i915#474] / [i915#667])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-onoff.html
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb9/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-onoff.html
* igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-render:
- shard-skl: [PASS][39] -> [DMESG-WARN][40] ([i915#109])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl9/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-render.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl10/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-render.html
* igt@kms_plane@pixel-format-pipe-a-planes-source-clamping:
- shard-skl: [PASS][41] -> [INCOMPLETE][42] ([i915#648] / [i915#667])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl8/igt@kms_plane@pixel-format-pipe-a-planes-source-clamping.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl2/igt@kms_plane@pixel-format-pipe-a-planes-source-clamping.html
#### Possible fixes ####
* igt@gem_ctx_shared@q-smoketest-bsd1:
- shard-tglb: [INCOMPLETE][43] ([fdo#111735]) -> [PASS][44]
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb9/igt@gem_ctx_shared@q-smoketest-bsd1.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb7/igt@gem_ctx_shared@q-smoketest-bsd1.html
* igt@gem_exec_parallel@fds:
- shard-tglb: [INCOMPLETE][45] ([i915#470]) -> [PASS][46]
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb6/igt@gem_exec_parallel@fds.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb6/igt@gem_exec_parallel@fds.html
* igt@gem_exec_schedule@preempt-other-bsd1:
- shard-iclb: [SKIP][47] ([fdo#109276]) -> [PASS][48] +2 similar issues
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-iclb8/igt@gem_exec_schedule@preempt-other-bsd1.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-iclb2/igt@gem_exec_schedule@preempt-other-bsd1.html
* igt@gem_exec_schedule@smoketest-all:
- shard-tglb: [INCOMPLETE][49] ([i915#463]) -> [PASS][50]
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb4/igt@gem_exec_schedule@smoketest-all.html
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb2/igt@gem_exec_schedule@smoketest-all.html
* igt@gem_exec_schedule@smoketest-vebox:
- shard-tglb: [INCOMPLETE][51] ([i915#707]) -> [PASS][52]
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb3/igt@gem_exec_schedule@smoketest-vebox.html
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb1/igt@gem_exec_schedule@smoketest-vebox.html
* igt@gem_exec_store@cachelines-vcs1:
- shard-iclb: [SKIP][53] ([fdo#112080]) -> [PASS][54]
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-iclb8/igt@gem_exec_store@cachelines-vcs1.html
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-iclb2/igt@gem_exec_store@cachelines-vcs1.html
* igt@gem_ppgtt@flink-and-close-vma-leak:
- shard-glk: [FAIL][55] ([i915#644]) -> [PASS][56]
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-glk2/igt@gem_ppgtt@flink-and-close-vma-leak.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-glk5/igt@gem_ppgtt@flink-and-close-vma-leak.html
* igt@gem_userptr_blits@sync-unmap-after-close:
- shard-snb: [DMESG-WARN][57] ([fdo#111870]) -> [PASS][58]
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-snb2/igt@gem_userptr_blits@sync-unmap-after-close.html
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-snb1/igt@gem_userptr_blits@sync-unmap-after-close.html
* igt@gem_workarounds@suspend-resume-fd:
- shard-kbl: [DMESG-WARN][59] ([i915#180]) -> [PASS][60] +3 similar issues
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-kbl2/igt@gem_workarounds@suspend-resume-fd.html
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-kbl4/igt@gem_workarounds@suspend-resume-fd.html
* igt@i915_selftest@mock_sanitycheck:
- shard-kbl: [DMESG-WARN][61] ([i915#747]) -> [PASS][62]
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-kbl1/igt@i915_selftest@mock_sanitycheck.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-kbl7/igt@i915_selftest@mock_sanitycheck.html
- shard-snb: [DMESG-WARN][63] ([i915#747]) -> [PASS][64]
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-snb1/igt@i915_selftest@mock_sanitycheck.html
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-snb6/igt@i915_selftest@mock_sanitycheck.html
* igt@i915_suspend@fence-restore-tiled2untiled:
- shard-tglb: [INCOMPLETE][65] ([i915#456] / [i915#460]) -> [PASS][66] +2 similar issues
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb1/igt@i915_suspend@fence-restore-tiled2untiled.html
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb4/igt@i915_suspend@fence-restore-tiled2untiled.html
* igt@kms_color@pipe-a-ctm-0-75:
- shard-skl: [DMESG-WARN][67] ([i915#109]) -> [PASS][68]
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl3/igt@kms_color@pipe-a-ctm-0-75.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl4/igt@kms_color@pipe-a-ctm-0-75.html
* igt@kms_cursor_crc@pipe-a-cursor-64x64-sliding:
- shard-skl: [FAIL][69] ([i915#54]) -> [PASS][70] +3 similar issues
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl8/igt@kms_cursor_crc@pipe-a-cursor-64x64-sliding.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl2/igt@kms_cursor_crc@pipe-a-cursor-64x64-sliding.html
* igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
- shard-glk: [FAIL][71] ([i915#72]) -> [PASS][72]
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-glk3/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-glk2/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
* igt@kms_draw_crc@draw-method-xrgb2101010-render-untiled:
- shard-tglb: [INCOMPLETE][73] ([fdo#112393] / [i915#667]) -> [PASS][74]
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb7/igt@kms_draw_crc@draw-method-xrgb2101010-render-untiled.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb3/igt@kms_draw_crc@draw-method-xrgb2101010-render-untiled.html
* igt@kms_flip@flip-vs-suspend-interruptible:
- shard-apl: [DMESG-WARN][75] ([i915#180]) -> [PASS][76] +2 similar issues
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-apl8/igt@kms_flip@flip-vs-suspend-interruptible.html
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-apl6/igt@kms_flip@flip-vs-suspend-interruptible.html
* igt@kms_flip@plain-flip-fb-recreate-interruptible:
- shard-skl: [FAIL][77] ([i915#34]) -> [PASS][78]
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl2/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl4/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt:
- shard-tglb: [FAIL][79] ([i915#49]) -> [PASS][80]
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb9/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt.html
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt.html
* igt@kms_plane@pixel-format-pipe-a-planes-source-clamping:
- shard-kbl: [INCOMPLETE][81] ([fdo#103665]) -> [PASS][82]
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-kbl4/igt@kms_plane@pixel-format-pipe-a-planes-source-clamping.html
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-kbl6/igt@kms_plane@pixel-format-pipe-a-planes-source-clamping.html
* igt@kms_plane_alpha_blend@pipe-b-coverage-7efc:
- shard-skl: [FAIL][83] ([fdo#108145] / [i915#265]) -> [PASS][84]
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl3/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl10/igt@kms_plane_alpha_blend@pipe-b-coverage-7efc.html
* igt@kms_psr2_su@frontbuffer:
- shard-tglb: [FAIL][85] ([fdo#111842]) -> [PASS][86]
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb8/igt@kms_psr2_su@frontbuffer.html
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb2/igt@kms_psr2_su@frontbuffer.html
* igt@kms_setmode@basic:
- shard-apl: [FAIL][87] ([i915#31]) -> [PASS][88]
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-apl6/igt@kms_setmode@basic.html
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-apl3/igt@kms_setmode@basic.html
#### Warnings ####
* igt@gem_ctx_isolation@vcs2-none:
- shard-tglb: [SKIP][89] ([fdo#111912] / [fdo#112080]) -> [SKIP][90] ([fdo#112080])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-tglb5/igt@gem_ctx_isolation@vcs2-none.html
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-tglb9/igt@gem_ctx_isolation@vcs2-none.html
* igt@gem_eio@kms:
- shard-snb: [INCOMPLETE][91] ([i915#82]) -> [DMESG-WARN][92] ([i915#443] / [i915#444])
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-snb4/igt@gem_eio@kms.html
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-snb6/igt@gem_eio@kms.html
* igt@gem_exec_reloc@basic-spin-bsd:
- shard-snb: [FAIL][93] ([i915#611]) -> [FAIL][94] ([i915#757]) +1 similar issue
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-snb5/igt@gem_exec_reloc@basic-spin-bsd.html
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-snb6/igt@gem_exec_reloc@basic-spin-bsd.html
* igt@kms_content_protection@lic:
- shard-kbl: [INCOMPLETE][95] ([fdo#103665]) -> [FAIL][96] ([fdo#110321])
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-kbl7/igt@kms_content_protection@lic.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-kbl2/igt@kms_content_protection@lic.html
* igt@kms_plane@pixel-format-pipe-a-planes:
- shard-skl: [INCOMPLETE][97] ([fdo#112347] / [fdo#112391] / [i915#648] / [i915#667]) -> [INCOMPLETE][98] ([i915#648] / [i915#667])
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl4/igt@kms_plane@pixel-format-pipe-a-planes.html
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl9/igt@kms_plane@pixel-format-pipe-a-planes.html
* igt@kms_plane@pixel-format-pipe-b-planes:
- shard-skl: [INCOMPLETE][99] ([fdo#112347] / [i915#648]) -> [INCOMPLETE][100] ([i915#648] / [i915#667]) +1 similar issue
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-skl8/igt@kms_plane@pixel-format-pipe-b-planes.html
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-skl1/igt@kms_plane@pixel-format-pipe-b-planes.html
* igt@runner@aborted:
- shard-snb: [FAIL][101] ([fdo#111249] / [k.org#204565]) -> [FAIL][102] ([i915#436])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7521/shard-snb1/igt@runner@aborted.html
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/shard-snb6/igt@runner@aborted.html
### Piglit changes ###
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
[fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
[fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
[fdo#109980]: https://bugs.freedesktop.org/show_bug.cgi?id=109980
[fdo#110321]: https://bugs.freedesktop.org/show_bug.cgi?id=110321
[fdo#111249]: https://bugs.freedesktop.org/show_bug.cgi?id=111249
[fdo#111606]: https://bugs.freedesktop.org/show_bug.cgi?id=111606
[fdo#111677]: https://bugs.freedesktop.org/show_bug.cgi?id=111677
[fdo#111735]: https://bugs.freedesktop.org/show_bug.cgi?id=111735
[fdo#111736]: https://bugs.freedesktop.org/show_bug.cgi?id=111736
[fdo#111842]: https://bugs.freedesktop.org/show_bug.cgi?id=111842
[fdo#111870]: https://bugs.freedesktop.org/show_bug.cgi?id=111870
[fdo#111912]: https://bugs.freedesktop.org/show_bug.cgi?id=111912
[fdo#112057]: https://bugs.freedesktop.org/show_bug.cgi?id=112057
[fdo#112080]: https://bugs.freedesktop.org/show_bug.cgi?id=112080
[fdo#112347]: https://bugs.freedesktop.org/show_bug.cgi?id=112347
[fdo#112391]: https://bugs.freedesktop.org/show_bug.cgi?id=112391
[fdo#112393]: https://bugs.freedesktop.org/show_bug.cgi?id=112393
[i915#109]: https://gitlab.freedesktop.org/drm/intel/issues/109
[i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
[i915#151]: https://gitlab.freedesktop.org/drm/intel/issues/151
[i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
[i915#221]: https://gitlab.freedesktop.org/drm/intel/issues/221
[i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
[i915#31]: https://gitlab.freedesktop.org/drm/intel/issues/31
[i915#34]: https://gitlab.freedesktop.org/drm/intel/issues/34
[i915#436]: https://gitlab.freedesktop.org/drm/intel/issues/436
[i915#443]: https://gitlab.freedesktop.org/drm/intel/issues/443
[i915#444]: https://gitlab.freedesktop.org/drm/intel/issues/444
[i915#456]: https://gitlab.freedesktop.org/drm/intel/issues/456
[i915#460]: https://gitlab.freedesktop.org/drm/intel/issues/460
[i915#463]: https://gitlab.freedesktop.org/drm/intel/issues/463
[i915#470]: https://gitlab.freedesktop.org/drm/intel/issues/470
[i915#474]: https://gitlab.freedesktop.org/drm/intel/issues/474
[i915#478]: https://gitlab.freedesktop.org/drm/intel/issues/478
[i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49
[i915#530]: https://gitlab.freedesktop.org/drm/intel/issues/530
[i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54
[i915#611]: https://gitlab.freedesktop.org/drm/intel/issues/611
[i915#644]: https://gitlab.freedesktop.org/drm/intel/issues/644
[i915#648]: https://gitlab.freedesktop.org/drm/intel/issues/648
[i915#667]: https://gitlab.freedesktop.org/drm/intel/issues/667
[i915#677]: https://gitlab.freedesktop.org/drm/intel/issues/677
[i915#69]: https://gitlab.freedesktop.org/drm/intel/issues/69
[i915#707]: https://gitlab.freedesktop.org/drm/intel/issues/707
[i915#72]: https://gitlab.freedesktop.org/drm/intel/issues/72
[i915#747]: https://gitlab.freedesktop.org/drm/intel/issues/747
[i915#757]: https://gitlab.freedesktop.org/drm/intel/issues/757
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
[i915#82]: https://gitlab.freedesktop.org/drm/intel/issues/82
[i915#822]: https://gitlab.freedesktop.org/drm/intel/issues/822
[i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95
[k.org#204565]: https://bugzilla.kernel.org/show_bug.cgi?id=204565
Participating hosts (11 -> 11)
------------------------------
No changes in participating hosts
Build changes
-------------
* CI: CI-20190529 -> None
* Linux: CI_DRM_7521 -> Patchwork_15655
CI-20190529: 20190529
CI_DRM_7521: 9203f67985ebf27211aa1eabb77093302248c9fc @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_5341: 5fe683cdebde2d77d16ffc42c9fdf29a9f95bb82 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_15655: 3fd0b1c8a344b3dcd86df601234ae242aaf4f9b0 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15655/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
* RE: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
2019-12-17 19:39 ` Lucas De Marchi
@ 2019-12-24 12:12 ` Shankar, Uma
-1 siblings, 0 replies; 25+ messages in thread
From: Shankar, Uma @ 2019-12-24 12:12 UTC (permalink / raw)
To: De Marchi, Lucas, Roper, Matthew D
Cc: Summers, Stuart, David Airlie, Laxminarayan Bharadiya, Pankaj,
intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
Lisovskiy, Stanislav, Vivi, Rodrigo
>-----Original Message-----
>From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of Lucas De
>Marchi
>Sent: Wednesday, December 18, 2019 1:09 AM
>To: Roper, Matthew D <matthew.d.roper@intel.com>
>Cc: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; David Airlie
><airlied@linux.ie>; Laxminarayan Bharadiya, Pankaj
><pankaj.laxminarayan.bharadiya@intel.com>; Summers, Stuart
><stuart.summers@intel.com>; dri-devel@lists.freedesktop.org; Vivi, Rodrigo
><rodrigo.vivi@intel.com>; intel-gfx@lists.freedesktop.org
>Subject: Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915
>module removal
>
>On Thu, Dec 12, 2019 at 12:34:49PM -0800, Lucas De Marchi wrote:
>>On Thu, Dec 12, 2019 at 09:37:17AM -0800, Matt Roper wrote:
>>>On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
>>>>On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>>>>> On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>>>>> > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>>>>> > >intel_bw_state allocated memory is not getting freed even after
>>>>> > >module removal.
>>>>> > >
>>>>> > >kmemleak reported backtrace:
>>>>> > >
>>>>> > > [<0000000079019739>] kmemdup+0x17/0x40
>>>>> > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>>>>> > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>>>>> > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>>>>> > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>>>>> > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>>>>> > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>>>>> > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>>>>> > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>>>>> > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>>>>> > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>>>>> > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>>>>> > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>>>>> > > [<00000000580e9566>] unbind_store+0xc3/0x120
>>>>> > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>>>>> > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>>>>> >
>>>>> > what I find strange in this is that the last state was allocated
>>>>> > by the "driver remove" code path.
>>>>> >
>>>>> > >
>>>>> > >Call the drm_atomic_private_obj_fini(), which inturn calls the
>>>>> > >intel_bw_destroy_state() to make sure the intel_bw_state memory
>>>>> > >is freed properly.
>>>>> > >
>>>>> > >Signed-off-by: Pankaj Bharadiya
>>>>> > ><pankaj.laxminarayan.bharadiya@intel.com>
>>>>> > >---
>>>>> > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>>>>> > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>>>>> > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>>>>> > >3 files changed, 8 insertions(+)
>>>>> > >
>>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >b/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >index dcb66a33be9b..b228671d5a5d 100644
>>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private
>>>>> > >*dev_priv)
>>>>> > >
>>>>> > > return 0;
>>>>> > >}
>>>>> > >+
>>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv) {
>>>>> > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>>>>> > >+}
>>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >b/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >index 9db10af012f4..20b9ad241802 100644
>>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >@@ -25,6 +25,7 @@ struct intel_bw_state {
>>>>> > >
>>>>> > >void intel_bw_init_hw(struct drm_i915_private *dev_priv); int
>>>>> > >intel_bw_init(struct drm_i915_private *dev_priv);
>>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>>>>> > >int intel_bw_atomic_check(struct intel_atomic_state *state);
>>>>> > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>>>>> > > const struct intel_crtc_state *crtc_state); diff --git
>>>>> > >a/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >b/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >index 3190aa27ffdc..756eb90b1bb1 100644
>>>>> > >--- a/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct
>>>>> > >drm_i915_private *i915)
>>>>> > >
>>>>> > > intel_gmbus_teardown(i915);
>>>>> > >
>>>>> > >+ intel_bw_cleanup(i915);
>>>>> >
>>>>> > This doesn't seem to match the (reverse) order of
>>>>> > intel_modeset_init()... but it's actually the gmbus_teardown()
>>>>> > that is out of place. Did you check if it's not a wrong shutdown ordering?
>>>>> >
>>>>>
>>>>> In intel_modeset_init(), intel_gmbus_setup() happens after
>>>>> intel_bw_init().
>>>>> I think the patch follows the reverse ordering properly.
>>>>> Am I missing anything?
>>>>
>>>>I said it seems that it's the gmbus_teardown() that is out of place.
>>>>Have you seen my comment above? Why are we duplicating the bw_state
>>>>on the module-remove code path?
>>>
>>>I think that part is legitimate. Part of the module remove sequence
>>>does an atomic commit to turn everything off. During atomic
>>>transactions, we create duplicates of all modesetting state objects
>>>can be modified; if/when the transaction succeeds, those duplicates
>>>are swapped into the actual driver state and the old objects are destroyed.
>>>Thus in cases like this where we forget to destroy a private object
>>>state, that leaked state structure will be the one allocated during
>>>the very last atomic transaction that happened (i.e., on the driver
>>>teardown codepath).
>>
>>humn, that makes sense. The new duplicate state will replace the
>>previous one and hence why we see it in the backtrace, rather than one
>>allocated previously.
>>
>>thanks
>>Lucas De Marchi
>
>and...
>
>
>Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
>
>Lucas De Marchi
Pushed the changes to dinq. Thanks for the patch and reviews.
Regards,
Uma Shankar
>>
>>>
>>>
>>>Matt
>>>
>>>>
>>>>Lucas De Marchi
>>>>
>>>>>
>>>>> Thanks,
>>>>> Pankaj
>>>>>
>>>>> > thanks
>>>>> > Lucas De Marchi
>>>>> >
>>>>> > >+
>>>>> > > destroy_workqueue(i915->flip_wq);
>>>>> > > destroy_workqueue(i915->modeset_wq);
>>>>> > >
>>>>> > >--
>>>>> > >2.23.0
>>>>> > >
>>>>> > >_______________________________________________
>>>>> > >Intel-gfx mailing list
>>>>> > >Intel-gfx@lists.freedesktop.org
>>>>> > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>>
>>>--
>>>Matt Roper
>>>Graphics Software Engineer
>>>VTT-OSGC Platform Enablement
>>>Intel Corporation
>>>(916) 356-2795
>_______________________________________________
>dri-devel mailing list
>dri-devel@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal
@ 2019-12-24 12:12 ` Shankar, Uma
0 siblings, 0 replies; 25+ messages in thread
From: Shankar, Uma @ 2019-12-24 12:12 UTC (permalink / raw)
To: De Marchi, Lucas, Roper, Matthew D
Cc: David Airlie, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org
>-----Original Message-----
>From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of Lucas De
>Marchi
>Sent: Wednesday, December 18, 2019 1:09 AM
>To: Roper, Matthew D <matthew.d.roper@intel.com>
>Cc: Lisovskiy, Stanislav <stanislav.lisovskiy@intel.com>; David Airlie
><airlied@linux.ie>; Laxminarayan Bharadiya, Pankaj
><pankaj.laxminarayan.bharadiya@intel.com>; Summers, Stuart
><stuart.summers@intel.com>; dri-devel@lists.freedesktop.org; Vivi, Rodrigo
><rodrigo.vivi@intel.com>; intel-gfx@lists.freedesktop.org
>Subject: Re: [Intel-gfx] [PATCH] drm/i915/display: cleanup intel_bw_state on i915
>module removal
>
>On Thu, Dec 12, 2019 at 12:34:49PM -0800, Lucas De Marchi wrote:
>>On Thu, Dec 12, 2019 at 09:37:17AM -0800, Matt Roper wrote:
>>>On Wed, Dec 11, 2019 at 04:22:50PM -0800, Lucas De Marchi wrote:
>>>>On Wed, Dec 11, 2019 at 12:10:41PM +0530, Bharadiya,Pankaj wrote:
>>>>> On Tue, Dec 10, 2019 at 09:57:39PM -0800, Lucas De Marchi wrote:
>>>>> > On Mon, Dec 09, 2019 at 08:09:02PM +0530, Pankaj Bharadiya wrote:
>>>>> > >intel_bw_state allocated memory is not getting freed even after
>>>>> > >module removal.
>>>>> > >
>>>>> > >kmemleak reported backtrace:
>>>>> > >
>>>>> > > [<0000000079019739>] kmemdup+0x17/0x40
>>>>> > > [<00000000d58c1b9d>] intel_bw_duplicate_state+0x1b/0x40 [i915]
>>>>> > > [<000000007423ed0c>] drm_atomic_get_private_obj_state+0xca/0x140
>>>>> > > [<00000000100e3533>] intel_bw_atomic_check+0x133/0x350 [i915]
>>>>> > > [<00000000126d0e0c>] intel_atomic_check+0x1ab7/0x20d0 [i915]
>>>>> > > [<00000000d5dfc004>] drm_atomic_check_only+0x563/0x810
>>>>> > > [<00000000c9379611>] drm_atomic_commit+0xe/0x50
>>>>> > > [<00000000ec82b765>] drm_atomic_helper_disable_all+0x133/0x160
>>>>> > > [<000000003c44760c>] drm_atomic_helper_shutdown+0x65/0xc0
>>>>> > > [<00000000414e3e5c>] i915_driver_remove+0xcb/0x130 [i915]
>>>>> > > [<00000000f8544c2a>] i915_pci_remove+0x19/0x40 [i915]
>>>>> > > [<000000002dcbd148>] pci_device_remove+0x36/0xb0
>>>>> > > [<000000003c8c6b0a>] device_release_driver_internal+0xe0/0x1c0
>>>>> > > [<00000000580e9566>] unbind_store+0xc3/0x120
>>>>> > > [<00000000869d0df5>] kernfs_fop_write+0x104/0x190
>>>>> > > [<000000004dc1a355>] vfs_write+0xb9/0x1d0
>>>>> >
>>>>> > what I find strange in this is that the last state was allocated
>>>>> > by the "driver remove" code path.
>>>>> >
>>>>> > >
>>>>> > >Call the drm_atomic_private_obj_fini(), which inturn calls the
>>>>> > >intel_bw_destroy_state() to make sure the intel_bw_state memory
>>>>> > >is freed properly.
>>>>> > >
>>>>> > >Signed-off-by: Pankaj Bharadiya
>>>>> > ><pankaj.laxminarayan.bharadiya@intel.com>
>>>>> > >---
>>>>> > >drivers/gpu/drm/i915/display/intel_bw.c | 5 +++++
>>>>> > >drivers/gpu/drm/i915/display/intel_bw.h | 1 +
>>>>> > >drivers/gpu/drm/i915/display/intel_display.c | 2 ++
>>>>> > >3 files changed, 8 insertions(+)
>>>>> > >
>>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >b/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >index dcb66a33be9b..b228671d5a5d 100644
>>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.c
>>>>> > >@@ -486,3 +486,8 @@ int intel_bw_init(struct drm_i915_private
>>>>> > >*dev_priv)
>>>>> > >
>>>>> > > return 0;
>>>>> > >}
>>>>> > >+
>>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv) {
>>>>> > >+ drm_atomic_private_obj_fini(&dev_priv->bw_obj);
>>>>> > >+}
>>>>> > >diff --git a/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >b/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >index 9db10af012f4..20b9ad241802 100644
>>>>> > >--- a/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_bw.h
>>>>> > >@@ -25,6 +25,7 @@ struct intel_bw_state {
>>>>> > >
>>>>> > >void intel_bw_init_hw(struct drm_i915_private *dev_priv); int
>>>>> > >intel_bw_init(struct drm_i915_private *dev_priv);
>>>>> > >+void intel_bw_cleanup(struct drm_i915_private *dev_priv);
>>>>> > >int intel_bw_atomic_check(struct intel_atomic_state *state);
>>>>> > >void intel_bw_crtc_update(struct intel_bw_state *bw_state,
>>>>> > > const struct intel_crtc_state *crtc_state); diff --git
>>>>> > >a/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >b/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >index 3190aa27ffdc..756eb90b1bb1 100644
>>>>> > >--- a/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >+++ b/drivers/gpu/drm/i915/display/intel_display.c
>>>>> > >@@ -17912,6 +17912,8 @@ void intel_modeset_driver_remove(struct
>>>>> > >drm_i915_private *i915)
>>>>> > >
>>>>> > > intel_gmbus_teardown(i915);
>>>>> > >
>>>>> > >+ intel_bw_cleanup(i915);
>>>>> >
>>>>> > This doesn't seem to match the (reverse) order of
>>>>> > intel_modeset_init()... but it's actually the gmbus_teardown()
>>>>> > that is out of place. Did you check if it's not a wrong shutdown ordering?
>>>>> >
>>>>>
>>>>> In intel_modeset_init(), intel_gmbus_setup() happens after
>>>>> intel_bw_init().
>>>>> I think the patch follows the reverse ordering properly.
>>>>> Am I missing anything?
>>>>
>>>>I said it seems that it's the gmbus_teardown() that is out of place.
>>>>Have you seen my comment above? Why are we duplicating the bw_state
>>>>on the module-remove code path?
>>>
>>>I think that part is legitimate. Part of the module remove sequence
>>>does an atomic commit to turn everything off. During atomic
>>>transactions, we create duplicates of all modesetting state objects
>>>can be modified; if/when the transaction succeeds, those duplicates
>>>are swapped into the actual driver state and the old objects are destroyed.
>>>Thus in cases like this where we forget to destroy a private object
>>>state, that leaked state structure will be the one allocated during
>>>the very last atomic transaction that happened (i.e., on the driver
>>>teardown codepath).
>>
>>humn, that makes sense. The new duplicate state will replace the
>>previous one and hence why we see it in the backtrace, rather than one
>>allocated previously.
>>
>>thanks
>>Lucas De Marchi
>
>and...
>
>
>Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
>
>Lucas De Marchi
Pushed the changes to dinq. Thanks for the patch and reviews.
Regards,
Uma Shankar
>>
>>>
>>>
>>>Matt
>>>
>>>>
>>>>Lucas De Marchi
>>>>
>>>>>
>>>>> Thanks,
>>>>> Pankaj
>>>>>
>>>>> > thanks
>>>>> > Lucas De Marchi
>>>>> >
>>>>> > >+
>>>>> > > destroy_workqueue(i915->flip_wq);
>>>>> > > destroy_workqueue(i915->modeset_wq);
>>>>> > >
>>>>> > >--
>>>>> > >2.23.0
>>>>> > >
>>>>> > >_______________________________________________
>>>>> > >Intel-gfx mailing list
>>>>> > >Intel-gfx@lists.freedesktop.org
>>>>> > >https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>>
>>>--
>>>Matt Roper
>>>Graphics Software Engineer
>>>VTT-OSGC Platform Enablement
>>>Intel Corporation
>>>(916) 356-2795
>_______________________________________________
>dri-devel mailing list
>dri-devel@lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2019-12-24 12:12 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-09 14:39 [Intel-gfx][PATCH] drm/i915/display: cleanup intel_bw_state on i915 module removal Pankaj Bharadiya
2019-12-09 14:39 ` [Intel-gfx] [PATCH] " Pankaj Bharadiya
2019-12-09 20:24 ` [Intel-gfx] ✗ Fi.CI.BAT: failure for " Patchwork
2019-12-11 5:57 ` [Intel-gfx] [PATCH] " Lucas De Marchi
2019-12-11 5:57 ` Lucas De Marchi
2019-12-11 6:40 ` Bharadiya,Pankaj
2019-12-11 6:40 ` Bharadiya,Pankaj
2019-12-12 0:22 ` Lucas De Marchi
2019-12-12 0:22 ` Lucas De Marchi
2019-12-12 10:28 ` Bharadiya,Pankaj
2019-12-12 10:28 ` Bharadiya,Pankaj
2019-12-12 17:37 ` Matt Roper
2019-12-12 17:37 ` Matt Roper
2019-12-12 20:34 ` Lucas De Marchi
2019-12-12 20:34 ` Lucas De Marchi
2019-12-17 19:39 ` Lucas De Marchi
2019-12-17 19:39 ` Lucas De Marchi
2019-12-24 12:12 ` Shankar, Uma
2019-12-24 12:12 ` Shankar, Uma
2019-12-12 17:49 ` [Intel-gfx][PATCH] " Matt Roper
2019-12-12 17:49 ` [Intel-gfx] [PATCH] " Matt Roper
2019-12-12 18:01 ` [Intel-gfx][PATCH] " Ville Syrjälä
2019-12-12 18:01 ` [Intel-gfx] [PATCH] " Ville Syrjälä
2019-12-23 10:24 ` [Intel-gfx] ✓ Fi.CI.BAT: success for " Patchwork
2019-12-23 17:32 ` [Intel-gfx] ✓ Fi.CI.IGT: " 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.