Message ID | 20231115082138.2649870-3-liushixin2@huawei.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | d63385a7d3099fedf201b0263282aebf9f9af3e8 |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | Fix invalid wait context of set_track_prepare() | expand |
On Wed, Nov 15, 2023 at 04:21:38PM +0800, Liu Shixin wrote: > set_track_prepare() will call __alloc_pages() which attempt to acquire > zone->lock(spinlocks), so move it outside object->lock(raw_spinlocks) > because it's not right to acquire spinlocks while holding raw_spinlocks > in RT mode. > > Signed-off-by: Liu Shixin <liushixin2@huawei.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Thanks for the quick fixes.
diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 22bab3738a9e..5501363d6b31 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -1152,6 +1152,7 @@ EXPORT_SYMBOL_GPL(kmemleak_free_percpu); void __ref kmemleak_update_trace(const void *ptr) { struct kmemleak_object *object; + depot_stack_handle_t trace_handle; unsigned long flags; pr_debug("%s(0x%px)\n", __func__, ptr); @@ -1168,8 +1169,9 @@ void __ref kmemleak_update_trace(const void *ptr) return; } + trace_handle = set_track_prepare(); raw_spin_lock_irqsave(&object->lock, flags); - object->trace_handle = set_track_prepare(); + object->trace_handle = trace_handle; raw_spin_unlock_irqrestore(&object->lock, flags); put_object(object);
set_track_prepare() will call __alloc_pages() which attempt to acquire zone->lock(spinlocks), so move it outside object->lock(raw_spinlocks) because it's not right to acquire spinlocks while holding raw_spinlocks in RT mode. Signed-off-by: Liu Shixin <liushixin2@huawei.com> --- mm/kmemleak.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)