* [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock @ 2023-09-25 13:13 ` Andrzej Hajda 0 siblings, 0 replies; 15+ messages in thread From: Andrzej Hajda @ 2023-09-25 13:13 UTC (permalink / raw) To: linux-kernel, intel-gfx, linux-mm, Thomas Gleixner Cc: Andrzej Hajda, Nirmoy Das After spinlock release object can be modified/freed by concurrent thread. Using it in such case is error prone, even for printing object state. To avoid such situation local copy of the object is created if necessary. Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> --- v2: add missing switch breaks --- lib/debugobjects.c | 206 +++++++++++++++++++++------------------------ 1 file changed, 97 insertions(+), 109 deletions(-) diff --git a/lib/debugobjects.c b/lib/debugobjects.c index a517256a270b71..3afff2f668fc1e 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) static void __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) { - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; debug_objects_fill_pool(); @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack case ODEBUG_STATE_INACTIVE: obj->state = ODEBUG_STATE_INIT; break; - - case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "init"); - debug_object_fixup(descr->fixup_init, addr, state); - return; - - case ODEBUG_STATE_DESTROYED: - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "init"); - return; default: - break; + o = *obj; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); + + if (obj) + return; + + debug_print_object(&o, "init"); + if (o.state == ODEBUG_STATE_ACTIVE) + debug_object_fixup(descr->fixup_init, addr, o.state); } /** @@ -700,12 +695,9 @@ EXPORT_SYMBOL_GPL(debug_object_init_on_stack); */ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) { - struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - int ret; if (!debug_objects_enabled) return 0; @@ -717,49 +709,47 @@ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) raw_spin_lock_irqsave(&db->lock, flags); obj = lookup_object_or_alloc(addr, db, descr, false, true); - if (likely(!IS_ERR_OR_NULL(obj))) { - bool print_object = false; - + if (unlikely(!obj)) { + raw_spin_unlock_irqrestore(&db->lock, flags); + debug_objects_oom(); + return 0; + } else if (likely(!IS_ERR(obj))) { switch (obj->state) { case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: obj->state = ODEBUG_STATE_ACTIVE; - ret = 0; break; - case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "activate"); - ret = debug_object_fixup(descr->fixup_activate, addr, state); - return ret ? 0 : -EINVAL; - case ODEBUG_STATE_DESTROYED: - print_object = true; - ret = -EINVAL; + o = *obj; + obj = NULL; break; default: - ret = 0; break; } - raw_spin_unlock_irqrestore(&db->lock, flags); - if (print_object) - debug_print_object(obj, "activate"); - return ret; + } else { + o.object = addr; + o.state = ODEBUG_STATE_NOTAVAILABLE; + o.descr = descr; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); - /* If NULL the allocation has hit OOM */ - if (!obj) { - debug_objects_oom(); + if (obj) return 0; - } - /* Object is neither static nor tracked. It's not initialized */ debug_print_object(&o, "activate"); - ret = debug_object_fixup(descr->fixup_activate, addr, ODEBUG_STATE_NOTAVAILABLE); - return ret ? 0 : -EINVAL; + + switch (o.state) { + case ODEBUG_STATE_ACTIVE: + case ODEBUG_STATE_NOTAVAILABLE: + if (debug_object_fixup(descr->fixup_activate, addr, o.state)) + return 0; + fallthrough; + default: + return -EINVAL; + } } EXPORT_SYMBOL_GPL(debug_object_activate); @@ -771,9 +761,8 @@ EXPORT_SYMBOL_GPL(debug_object_activate); void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) { struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - bool print_object = false; if (!debug_objects_enabled) return; @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: case ODEBUG_STATE_ACTIVE: - if (!obj->astate) + if (!obj->astate) { obj->state = ODEBUG_STATE_INACTIVE; - else - print_object = true; - break; - + break; + } + fallthrough; case ODEBUG_STATE_DESTROYED: - print_object = true; + o = *obj; + obj = NULL; break; default: break; } + } else { + o.object = addr; + o.state = ODEBUG_STATE_NOTAVAILABLE; + o.descr = descr; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); - if (!obj) { - struct debug_obj o = { .object = addr, - .state = ODEBUG_STATE_NOTAVAILABLE, - .descr = descr }; + if (!obj) debug_print_object(&o, "deactivate"); - } else if (print_object) { - debug_print_object(obj, "deactivate"); - } } EXPORT_SYMBOL_GPL(debug_object_deactivate); @@ -822,11 +810,9 @@ EXPORT_SYMBOL_GPL(debug_object_deactivate); */ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) { - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - bool print_object = false; if (!debug_objects_enabled) return; @@ -836,8 +822,10 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) raw_spin_lock_irqsave(&db->lock, flags); obj = lookup_object(addr, db); - if (!obj) - goto out_unlock; + if (!obj) { + raw_spin_unlock_irqrestore(&db->lock, flags); + return; + } switch (obj->state) { case ODEBUG_STATE_NONE: @@ -846,22 +834,23 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) obj->state = ODEBUG_STATE_DESTROYED; break; case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "destroy"); - debug_object_fixup(descr->fixup_destroy, addr, state); - return; - case ODEBUG_STATE_DESTROYED: - print_object = true; + o = *obj; + obj = NULL; break; default: break; } -out_unlock: + raw_spin_unlock_irqrestore(&db->lock, flags); - if (print_object) - debug_print_object(obj, "destroy"); + + if (obj) + return; + + debug_print_object(&o, "destroy"); + + if (o.state == ODEBUG_STATE_ACTIVE) + debug_object_fixup(descr->fixup_destroy, addr, o.state); } EXPORT_SYMBOL_GPL(debug_object_destroy); @@ -872,9 +861,8 @@ EXPORT_SYMBOL_GPL(debug_object_destroy); */ void debug_object_free(void *addr, const struct debug_obj_descr *descr) { - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; if (!debug_objects_enabled) @@ -885,24 +873,29 @@ void debug_object_free(void *addr, const struct debug_obj_descr *descr) raw_spin_lock_irqsave(&db->lock, flags); obj = lookup_object(addr, db); - if (!obj) - goto out_unlock; + if (!obj) { + raw_spin_unlock_irqrestore(&db->lock, flags); + return; + } switch (obj->state) { case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "free"); - debug_object_fixup(descr->fixup_free, addr, state); - return; + o = *obj; + obj = NULL; + break; default: hlist_del(&obj->node); - raw_spin_unlock_irqrestore(&db->lock, flags); + } + + raw_spin_unlock_irqrestore(&db->lock, flags); + + if (obj) { free_object(obj); return; } -out_unlock: - raw_spin_unlock_irqrestore(&db->lock, flags); + + debug_print_object(&o, "free"); + debug_object_fixup(descr->fixup_free, addr, o.state); } EXPORT_SYMBOL_GPL(debug_object_free); @@ -955,9 +948,8 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, unsigned int expect, unsigned int next) { struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - bool print_object = false; if (!debug_objects_enabled) return; @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, if (obj) { switch (obj->state) { case ODEBUG_STATE_ACTIVE: - if (obj->astate == expect) + if (obj->astate == expect) { obj->astate = next; - else - print_object = true; - break; - + break; + } + fallthrough; default: - print_object = true; + o = *obj; + obj = NULL; break; } + } else { + o.object = addr; + o.state = ODEBUG_STATE_NOTAVAILABLE; + o.descr = descr; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); - if (!obj) { - struct debug_obj o = { .object = addr, - .state = ODEBUG_STATE_NOTAVAILABLE, - .descr = descr }; + if (!obj) debug_print_object(&o, "active_state"); - } else if (print_object) { - debug_print_object(obj, "active_state"); - } } EXPORT_SYMBOL_GPL(debug_object_active_state); @@ -999,11 +990,9 @@ EXPORT_SYMBOL_GPL(debug_object_active_state); static void __debug_check_no_obj_freed(const void *address, unsigned long size) { unsigned long flags, oaddr, saddr, eaddr, paddr, chunks; - const struct debug_obj_descr *descr; - enum debug_obj_state state; struct debug_bucket *db; struct hlist_node *tmp; - struct debug_obj *obj; + struct debug_obj *obj, o; int cnt, objs_checked = 0; saddr = (unsigned long) address; @@ -1026,12 +1015,11 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size) switch (obj->state) { case ODEBUG_STATE_ACTIVE: - descr = obj->descr; - state = obj->state; + o = *obj; raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "free"); - debug_object_fixup(descr->fixup_free, - (void *) oaddr, state); + debug_print_object(&o, "free"); + debug_object_fixup(o.descr->fixup_free, + (void *) oaddr, o.state); goto repeat; default: hlist_del(&obj->node); -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2] debugobjects: stop accessing objects after releasing spinlock @ 2023-09-25 13:13 ` Andrzej Hajda 0 siblings, 0 replies; 15+ messages in thread From: Andrzej Hajda @ 2023-09-25 13:13 UTC (permalink / raw) To: linux-kernel, intel-gfx, linux-mm, Thomas Gleixner Cc: Andrzej Hajda, Andi Shyti, Nirmoy Das, Janusz Krzysztofik After spinlock release object can be modified/freed by concurrent thread. Using it in such case is error prone, even for printing object state. To avoid such situation local copy of the object is created if necessary. Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> --- v2: add missing switch breaks --- lib/debugobjects.c | 206 +++++++++++++++++++++------------------------ 1 file changed, 97 insertions(+), 109 deletions(-) diff --git a/lib/debugobjects.c b/lib/debugobjects.c index a517256a270b71..3afff2f668fc1e 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) static void __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) { - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; debug_objects_fill_pool(); @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack case ODEBUG_STATE_INACTIVE: obj->state = ODEBUG_STATE_INIT; break; - - case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "init"); - debug_object_fixup(descr->fixup_init, addr, state); - return; - - case ODEBUG_STATE_DESTROYED: - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "init"); - return; default: - break; + o = *obj; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); + + if (obj) + return; + + debug_print_object(&o, "init"); + if (o.state == ODEBUG_STATE_ACTIVE) + debug_object_fixup(descr->fixup_init, addr, o.state); } /** @@ -700,12 +695,9 @@ EXPORT_SYMBOL_GPL(debug_object_init_on_stack); */ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) { - struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - int ret; if (!debug_objects_enabled) return 0; @@ -717,49 +709,47 @@ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) raw_spin_lock_irqsave(&db->lock, flags); obj = lookup_object_or_alloc(addr, db, descr, false, true); - if (likely(!IS_ERR_OR_NULL(obj))) { - bool print_object = false; - + if (unlikely(!obj)) { + raw_spin_unlock_irqrestore(&db->lock, flags); + debug_objects_oom(); + return 0; + } else if (likely(!IS_ERR(obj))) { switch (obj->state) { case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: obj->state = ODEBUG_STATE_ACTIVE; - ret = 0; break; - case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "activate"); - ret = debug_object_fixup(descr->fixup_activate, addr, state); - return ret ? 0 : -EINVAL; - case ODEBUG_STATE_DESTROYED: - print_object = true; - ret = -EINVAL; + o = *obj; + obj = NULL; break; default: - ret = 0; break; } - raw_spin_unlock_irqrestore(&db->lock, flags); - if (print_object) - debug_print_object(obj, "activate"); - return ret; + } else { + o.object = addr; + o.state = ODEBUG_STATE_NOTAVAILABLE; + o.descr = descr; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); - /* If NULL the allocation has hit OOM */ - if (!obj) { - debug_objects_oom(); + if (obj) return 0; - } - /* Object is neither static nor tracked. It's not initialized */ debug_print_object(&o, "activate"); - ret = debug_object_fixup(descr->fixup_activate, addr, ODEBUG_STATE_NOTAVAILABLE); - return ret ? 0 : -EINVAL; + + switch (o.state) { + case ODEBUG_STATE_ACTIVE: + case ODEBUG_STATE_NOTAVAILABLE: + if (debug_object_fixup(descr->fixup_activate, addr, o.state)) + return 0; + fallthrough; + default: + return -EINVAL; + } } EXPORT_SYMBOL_GPL(debug_object_activate); @@ -771,9 +761,8 @@ EXPORT_SYMBOL_GPL(debug_object_activate); void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) { struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - bool print_object = false; if (!debug_objects_enabled) return; @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: case ODEBUG_STATE_ACTIVE: - if (!obj->astate) + if (!obj->astate) { obj->state = ODEBUG_STATE_INACTIVE; - else - print_object = true; - break; - + break; + } + fallthrough; case ODEBUG_STATE_DESTROYED: - print_object = true; + o = *obj; + obj = NULL; break; default: break; } + } else { + o.object = addr; + o.state = ODEBUG_STATE_NOTAVAILABLE; + o.descr = descr; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); - if (!obj) { - struct debug_obj o = { .object = addr, - .state = ODEBUG_STATE_NOTAVAILABLE, - .descr = descr }; + if (!obj) debug_print_object(&o, "deactivate"); - } else if (print_object) { - debug_print_object(obj, "deactivate"); - } } EXPORT_SYMBOL_GPL(debug_object_deactivate); @@ -822,11 +810,9 @@ EXPORT_SYMBOL_GPL(debug_object_deactivate); */ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) { - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - bool print_object = false; if (!debug_objects_enabled) return; @@ -836,8 +822,10 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) raw_spin_lock_irqsave(&db->lock, flags); obj = lookup_object(addr, db); - if (!obj) - goto out_unlock; + if (!obj) { + raw_spin_unlock_irqrestore(&db->lock, flags); + return; + } switch (obj->state) { case ODEBUG_STATE_NONE: @@ -846,22 +834,23 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) obj->state = ODEBUG_STATE_DESTROYED; break; case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "destroy"); - debug_object_fixup(descr->fixup_destroy, addr, state); - return; - case ODEBUG_STATE_DESTROYED: - print_object = true; + o = *obj; + obj = NULL; break; default: break; } -out_unlock: + raw_spin_unlock_irqrestore(&db->lock, flags); - if (print_object) - debug_print_object(obj, "destroy"); + + if (obj) + return; + + debug_print_object(&o, "destroy"); + + if (o.state == ODEBUG_STATE_ACTIVE) + debug_object_fixup(descr->fixup_destroy, addr, o.state); } EXPORT_SYMBOL_GPL(debug_object_destroy); @@ -872,9 +861,8 @@ EXPORT_SYMBOL_GPL(debug_object_destroy); */ void debug_object_free(void *addr, const struct debug_obj_descr *descr) { - enum debug_obj_state state; struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; if (!debug_objects_enabled) @@ -885,24 +873,29 @@ void debug_object_free(void *addr, const struct debug_obj_descr *descr) raw_spin_lock_irqsave(&db->lock, flags); obj = lookup_object(addr, db); - if (!obj) - goto out_unlock; + if (!obj) { + raw_spin_unlock_irqrestore(&db->lock, flags); + return; + } switch (obj->state) { case ODEBUG_STATE_ACTIVE: - state = obj->state; - raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "free"); - debug_object_fixup(descr->fixup_free, addr, state); - return; + o = *obj; + obj = NULL; + break; default: hlist_del(&obj->node); - raw_spin_unlock_irqrestore(&db->lock, flags); + } + + raw_spin_unlock_irqrestore(&db->lock, flags); + + if (obj) { free_object(obj); return; } -out_unlock: - raw_spin_unlock_irqrestore(&db->lock, flags); + + debug_print_object(&o, "free"); + debug_object_fixup(descr->fixup_free, addr, o.state); } EXPORT_SYMBOL_GPL(debug_object_free); @@ -955,9 +948,8 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, unsigned int expect, unsigned int next) { struct debug_bucket *db; - struct debug_obj *obj; + struct debug_obj *obj, o; unsigned long flags; - bool print_object = false; if (!debug_objects_enabled) return; @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, if (obj) { switch (obj->state) { case ODEBUG_STATE_ACTIVE: - if (obj->astate == expect) + if (obj->astate == expect) { obj->astate = next; - else - print_object = true; - break; - + break; + } + fallthrough; default: - print_object = true; + o = *obj; + obj = NULL; break; } + } else { + o.object = addr; + o.state = ODEBUG_STATE_NOTAVAILABLE; + o.descr = descr; + obj = NULL; } raw_spin_unlock_irqrestore(&db->lock, flags); - if (!obj) { - struct debug_obj o = { .object = addr, - .state = ODEBUG_STATE_NOTAVAILABLE, - .descr = descr }; + if (!obj) debug_print_object(&o, "active_state"); - } else if (print_object) { - debug_print_object(obj, "active_state"); - } } EXPORT_SYMBOL_GPL(debug_object_active_state); @@ -999,11 +990,9 @@ EXPORT_SYMBOL_GPL(debug_object_active_state); static void __debug_check_no_obj_freed(const void *address, unsigned long size) { unsigned long flags, oaddr, saddr, eaddr, paddr, chunks; - const struct debug_obj_descr *descr; - enum debug_obj_state state; struct debug_bucket *db; struct hlist_node *tmp; - struct debug_obj *obj; + struct debug_obj *obj, o; int cnt, objs_checked = 0; saddr = (unsigned long) address; @@ -1026,12 +1015,11 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size) switch (obj->state) { case ODEBUG_STATE_ACTIVE: - descr = obj->descr; - state = obj->state; + o = *obj; raw_spin_unlock_irqrestore(&db->lock, flags); - debug_print_object(obj, "free"); - debug_object_fixup(descr->fixup_free, - (void *) oaddr, state); + debug_print_object(&o, "free"); + debug_object_fixup(o.descr->fixup_free, + (void *) oaddr, o.state); goto repeat; default: hlist_del(&obj->node); -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for debugobjects: stop accessing objects after releasing spinlock (rev2) 2023-09-25 13:13 ` Andrzej Hajda (?) @ 2023-09-26 2:03 ` Patchwork -1 siblings, 0 replies; 15+ messages in thread From: Patchwork @ 2023-09-26 2:03 UTC (permalink / raw) To: Andrzej Hajda; +Cc: intel-gfx == Series Details == Series: debugobjects: stop accessing objects after releasing spinlock (rev2) URL : https://patchwork.freedesktop.org/series/124185/ State : warning == Summary == Error: dim checkpatch failed 4b916ef4f19b debugobjects: stop accessing objects after releasing spinlock -:85: WARNING:LIKELY_MISUSE: nested (un)?likely() calls, IS_ERR already uses unlikely() internally #85: FILE: lib/debugobjects.c:716: + } else if (likely(!IS_ERR(obj))) { -:390: CHECK:SPACING: No space is necessary after a cast #390: FILE: lib/debugobjects.c:1022: + (void *) oaddr, o.state); total: 0 errors, 1 warnings, 1 checks, 363 lines checked ^ permalink raw reply [flat|nested] 15+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for debugobjects: stop accessing objects after releasing spinlock (rev2) 2023-09-25 13:13 ` Andrzej Hajda (?) (?) @ 2023-09-26 2:16 ` Patchwork -1 siblings, 0 replies; 15+ messages in thread From: Patchwork @ 2023-09-26 2:16 UTC (permalink / raw) To: Andrzej Hajda; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 9009 bytes --] == Series Details == Series: debugobjects: stop accessing objects after releasing spinlock (rev2) URL : https://patchwork.freedesktop.org/series/124185/ State : success == Summary == CI Bug Log - changes from CI_DRM_13679 -> Patchwork_124185v2 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/index.html Participating hosts (37 -> 39) ------------------------------ Additional (3): fi-kbl-soraka bat-dg2-8 fi-pnv-d510 Missing (1): fi-snb-2520m Known issues ------------ Here are the changes found in Patchwork_124185v2 that come from known issues: ### CI changes ### #### Issues hit #### * boot: - fi-hsw-4770: [PASS][1] -> [FAIL][2] ([i915#8293]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/fi-hsw-4770/boot.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/fi-hsw-4770/boot.html ### IGT changes ### #### Issues hit #### * igt@gem_huc_copy@huc-copy: - fi-kbl-soraka: NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#2190]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html * igt@gem_lmem_swapping@basic: - fi-kbl-soraka: NOTRUN -> [SKIP][4] ([fdo#109271] / [i915#4613]) +3 other tests skip [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/fi-kbl-soraka/igt@gem_lmem_swapping@basic.html * igt@gem_mmap@basic: - bat-dg2-8: NOTRUN -> [SKIP][5] ([i915#4083]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@gem_mmap@basic.html * igt@gem_mmap_gtt@basic: - bat-dg2-8: NOTRUN -> [SKIP][6] ([i915#4077]) +2 other tests skip [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@gem_mmap_gtt@basic.html * igt@gem_tiled_pread_basic: - bat-dg2-8: NOTRUN -> [SKIP][7] ([i915#4079]) +1 other test skip [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@gem_tiled_pread_basic.html * igt@i915_pm_rps@basic-api: - bat-dg2-8: NOTRUN -> [SKIP][8] ([i915#6621]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@i915_pm_rps@basic-api.html * igt@i915_selftest@live@gt_pm: - fi-kbl-soraka: NOTRUN -> [DMESG-FAIL][9] ([i915#1886] / [i915#7913]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/fi-kbl-soraka/igt@i915_selftest@live@gt_pm.html * igt@i915_suspend@basic-s3-without-i915: - bat-dg2-8: NOTRUN -> [SKIP][10] ([i915#6645]) [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@i915_suspend@basic-s3-without-i915.html * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy: - bat-dg2-8: NOTRUN -> [SKIP][11] ([i915#5190]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html * igt@kms_addfb_basic@basic-y-tiled-legacy: - bat-dg2-8: NOTRUN -> [SKIP][12] ([i915#4215] / [i915#5190]) [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_addfb_basic@basic-y-tiled-legacy.html * igt@kms_addfb_basic@framebuffer-vs-set-tiling: - bat-dg2-8: NOTRUN -> [SKIP][13] ([i915#4212]) +6 other tests skip [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_addfb_basic@framebuffer-vs-set-tiling.html * igt@kms_addfb_basic@tile-pitch-mismatch: - bat-dg2-8: NOTRUN -> [SKIP][14] ([i915#4212] / [i915#5608]) [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_addfb_basic@tile-pitch-mismatch.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy: - bat-dg2-8: NOTRUN -> [SKIP][15] ([i915#4103] / [i915#4213] / [i915#5608]) +1 other test skip [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html * igt@kms_dsc@dsc-basic: - fi-kbl-soraka: NOTRUN -> [SKIP][16] ([fdo#109271]) +9 other tests skip [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/fi-kbl-soraka/igt@kms_dsc@dsc-basic.html * igt@kms_force_connector_basic@force-load-detect: - bat-dg2-8: NOTRUN -> [SKIP][17] ([fdo#109285]) [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_force_connector_basic@force-load-detect.html * igt@kms_force_connector_basic@prune-stale-modes: - bat-dg2-8: NOTRUN -> [SKIP][18] ([i915#5274]) [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_force_connector_basic@prune-stale-modes.html * igt@kms_pipe_crc_basic@suspend-read-crc: - fi-kbl-x1275: NOTRUN -> [SKIP][19] ([fdo#109271]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/fi-kbl-x1275/igt@kms_pipe_crc_basic@suspend-read-crc.html * igt@kms_psr@cursor_plane_move: - bat-dg2-8: NOTRUN -> [SKIP][20] ([i915#1072]) +3 other tests skip [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_psr@cursor_plane_move.html * igt@kms_psr@primary_page_flip: - fi-pnv-d510: NOTRUN -> [SKIP][21] ([fdo#109271]) +31 other tests skip [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/fi-pnv-d510/igt@kms_psr@primary_page_flip.html * igt@kms_setmode@basic-clone-single-crtc: - bat-dg2-8: NOTRUN -> [SKIP][22] ([i915#3555]) [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@kms_setmode@basic-clone-single-crtc.html * igt@prime_vgem@basic-fence-flip: - bat-dg2-8: NOTRUN -> [SKIP][23] ([i915#3708]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@prime_vgem@basic-fence-flip.html * igt@prime_vgem@basic-fence-mmap: - bat-dg2-8: NOTRUN -> [SKIP][24] ([i915#3708] / [i915#4077]) +1 other test skip [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@prime_vgem@basic-fence-mmap.html * igt@prime_vgem@basic-write: - bat-dg2-8: NOTRUN -> [SKIP][25] ([i915#3291] / [i915#3708]) +2 other tests skip [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/bat-dg2-8/igt@prime_vgem@basic-write.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [Intel XE#485]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/485 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285 [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072 [i915#1886]: https://gitlab.freedesktop.org/drm/intel/issues/1886 [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190 [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291 [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555 [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708 [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077 [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079 [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083 [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103 [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212 [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213 [i915#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215 [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613 [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190 [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274 [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354 [i915#5608]: https://gitlab.freedesktop.org/drm/intel/issues/5608 [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621 [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645 [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913 [i915#7952]: https://gitlab.freedesktop.org/drm/intel/issues/7952 [i915#8293]: https://gitlab.freedesktop.org/drm/intel/issues/8293 Build changes ------------- * Linux: CI_DRM_13679 -> Patchwork_124185v2 CI-20190529: 20190529 CI_DRM_13679: 6dad88365b6dfbe68e8b527c421369d2c6620049 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7502: ac56ba97248b33668fbe771882360bd7b274cc9a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_124185v2: 6dad88365b6dfbe68e8b527c421369d2c6620049 @ git://anongit.freedesktop.org/gfx-ci/linux ### Linux commits d34ccd6eaa84 debugobjects: stop accessing objects after releasing spinlock == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/index.html [-- Attachment #2: Type: text/html, Size: 10674 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* [Intel-gfx] ✓ Fi.CI.IGT: success for debugobjects: stop accessing objects after releasing spinlock (rev2) 2023-09-25 13:13 ` Andrzej Hajda ` (2 preceding siblings ...) (?) @ 2023-09-26 9:50 ` Patchwork -1 siblings, 0 replies; 15+ messages in thread From: Patchwork @ 2023-09-26 9:50 UTC (permalink / raw) To: Andrzej Hajda; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 60514 bytes --] == Series Details == Series: debugobjects: stop accessing objects after releasing spinlock (rev2) URL : https://patchwork.freedesktop.org/series/124185/ State : success == Summary == CI Bug Log - changes from CI_DRM_13679_full -> Patchwork_124185v2_full ==================================================== Summary ------- **SUCCESS** No regressions found. Participating hosts (10 -> 10) ------------------------------ No changes in participating hosts Known issues ------------ Here are the changes found in Patchwork_124185v2_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@api_intel_bb@blit-reloc-keep-cache: - shard-rkl: NOTRUN -> [SKIP][1] ([i915#8411]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@api_intel_bb@blit-reloc-keep-cache.html * igt@drm_fdinfo@all-busy-idle-check-all: - shard-mtlp: NOTRUN -> [SKIP][2] ([i915#8414]) [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@drm_fdinfo@all-busy-idle-check-all.html * igt@drm_fdinfo@isolation@bcs0: - shard-dg2: NOTRUN -> [SKIP][3] ([i915#8414]) +11 other tests skip [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@drm_fdinfo@isolation@bcs0.html * igt@gem_basic@multigpu-create-close: - shard-tglu: NOTRUN -> [SKIP][4] ([i915#7697]) [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@gem_basic@multigpu-create-close.html * igt@gem_close_race@multigpu-basic-process: - shard-dg2: NOTRUN -> [SKIP][5] ([i915#7697]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@gem_close_race@multigpu-basic-process.html * igt@gem_ctx_persistence@engines-hang@ccs0: - shard-mtlp: [PASS][6] -> [ABORT][7] ([i915#9262]) +3 other tests abort [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-mtlp-5/igt@gem_ctx_persistence@engines-hang@ccs0.html [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-4/igt@gem_ctx_persistence@engines-hang@ccs0.html * igt@gem_ctx_persistence@heartbeat-hang: - shard-dg2: NOTRUN -> [SKIP][8] ([i915#8555]) +1 other test skip [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@gem_ctx_persistence@heartbeat-hang.html * igt@gem_ctx_persistence@legacy-engines-persistence: - shard-snb: NOTRUN -> [SKIP][9] ([fdo#109271] / [i915#1099]) +2 other tests skip [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-snb7/igt@gem_ctx_persistence@legacy-engines-persistence.html * igt@gem_ctx_sseu@engines: - shard-tglu: NOTRUN -> [SKIP][10] ([i915#280]) [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@gem_ctx_sseu@engines.html * igt@gem_ctx_sseu@invalid-args: - shard-rkl: NOTRUN -> [SKIP][11] ([i915#280]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@gem_ctx_sseu@invalid-args.html * igt@gem_eio@hibernate: - shard-dg1: [PASS][12] -> [ABORT][13] ([i915#7975] / [i915#8213]) [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg1-12/igt@gem_eio@hibernate.html [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-14/igt@gem_eio@hibernate.html - shard-dg2: NOTRUN -> [ABORT][14] ([i915#7975] / [i915#8213]) [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@gem_eio@hibernate.html * igt@gem_eio@reset-stress: - shard-snb: NOTRUN -> [FAIL][15] ([i915#8898]) [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-snb7/igt@gem_eio@reset-stress.html * igt@gem_eio@unwedge-stress: - shard-dg1: [PASS][16] -> [FAIL][17] ([i915#5784]) [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg1-19/igt@gem_eio@unwedge-stress.html [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-19/igt@gem_eio@unwedge-stress.html * igt@gem_exec_balancer@bonded-true-hang: - shard-dg2: NOTRUN -> [SKIP][18] ([i915#4812]) +1 other test skip [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@gem_exec_balancer@bonded-true-hang.html * igt@gem_exec_balancer@sliced: - shard-mtlp: NOTRUN -> [SKIP][19] ([i915#4812]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-6/igt@gem_exec_balancer@sliced.html * igt@gem_exec_fair@basic-none-solo@rcs0: - shard-apl: [PASS][20] -> [FAIL][21] ([i915#2842]) [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-apl4/igt@gem_exec_fair@basic-none-solo@rcs0.html [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-apl2/igt@gem_exec_fair@basic-none-solo@rcs0.html * igt@gem_exec_fair@basic-none@vcs0: - shard-rkl: [PASS][22] -> [FAIL][23] ([i915#2842]) [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-1/igt@gem_exec_fair@basic-none@vcs0.html [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-7/igt@gem_exec_fair@basic-none@vcs0.html * igt@gem_exec_fair@basic-pace-share@rcs0: - shard-tglu: [PASS][24] -> [FAIL][25] ([i915#2842]) [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-tglu-5/igt@gem_exec_fair@basic-pace-share@rcs0.html [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-2/igt@gem_exec_fair@basic-pace-share@rcs0.html * igt@gem_exec_fair@basic-pace-solo@rcs0: - shard-rkl: NOTRUN -> [FAIL][26] ([i915#2842]) [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@gem_exec_fair@basic-pace-solo@rcs0.html * igt@gem_exec_fair@basic-throttle: - shard-dg2: NOTRUN -> [SKIP][27] ([i915#3539]) +1 other test skip [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@gem_exec_fair@basic-throttle.html * igt@gem_exec_flush@basic-wb-ro-default: - shard-dg2: NOTRUN -> [SKIP][28] ([i915#3539] / [i915#4852]) +1 other test skip [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@gem_exec_flush@basic-wb-ro-default.html * igt@gem_exec_reloc@basic-cpu-gtt: - shard-dg2: NOTRUN -> [SKIP][29] ([i915#3281]) +6 other tests skip [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@gem_exec_reloc@basic-cpu-gtt.html * igt@gem_exec_reloc@basic-wc-gtt-noreloc: - shard-mtlp: NOTRUN -> [SKIP][30] ([i915#3281]) +2 other tests skip [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@gem_exec_reloc@basic-wc-gtt-noreloc.html * igt@gem_exec_schedule@preempt-queue: - shard-dg2: NOTRUN -> [SKIP][31] ([i915#4537] / [i915#4812]) [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@gem_exec_schedule@preempt-queue.html * igt@gem_exec_schedule@semaphore-power: - shard-mtlp: NOTRUN -> [SKIP][32] ([i915#4537] / [i915#4812]) [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-5/igt@gem_exec_schedule@semaphore-power.html * igt@gem_fence_thrash@bo-copy: - shard-dg2: NOTRUN -> [SKIP][33] ([i915#4860]) +1 other test skip [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@gem_fence_thrash@bo-copy.html * igt@gem_lmem_evict@dontneed-evict-race: - shard-glk: NOTRUN -> [SKIP][34] ([fdo#109271] / [i915#4613]) [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-glk1/igt@gem_lmem_evict@dontneed-evict-race.html - shard-tglu: NOTRUN -> [SKIP][35] ([i915#4613] / [i915#7582]) [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@gem_lmem_evict@dontneed-evict-race.html * igt@gem_lmem_swapping@smem-oom@lmem0: - shard-dg2: [PASS][36] -> [DMESG-WARN][37] ([i915#4936] / [i915#5493]) [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg2-10/igt@gem_lmem_swapping@smem-oom@lmem0.html [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@gem_lmem_swapping@smem-oom@lmem0.html * igt@gem_mmap_gtt@fault-concurrent-y: - shard-dg2: NOTRUN -> [SKIP][38] ([i915#4077]) +12 other tests skip [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@gem_mmap_gtt@fault-concurrent-y.html * igt@gem_mmap_wc@copy: - shard-mtlp: NOTRUN -> [SKIP][39] ([i915#4083]) [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@gem_mmap_wc@copy.html * igt@gem_mmap_wc@write-wc-read-gtt: - shard-dg2: NOTRUN -> [SKIP][40] ([i915#4083]) +4 other tests skip [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@gem_mmap_wc@write-wc-read-gtt.html * igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted: - shard-dg2: NOTRUN -> [SKIP][41] ([i915#4270]) +3 other tests skip [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted.html * igt@gem_pxp@fail-invalid-protected-context: - shard-tglu: NOTRUN -> [SKIP][42] ([i915#4270]) [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@gem_pxp@fail-invalid-protected-context.html * igt@gem_readwrite@beyond-eob: - shard-dg2: NOTRUN -> [SKIP][43] ([i915#3282]) +3 other tests skip [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@gem_readwrite@beyond-eob.html * igt@gem_render_copy@yf-tiled-to-vebox-yf-tiled: - shard-mtlp: NOTRUN -> [SKIP][44] ([i915#8428]) +2 other tests skip [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@gem_render_copy@yf-tiled-to-vebox-yf-tiled.html * igt@gem_softpin@evict-snoop: - shard-tglu: NOTRUN -> [SKIP][45] ([fdo#109312]) [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@gem_softpin@evict-snoop.html * igt@gem_tiled_pread_basic: - shard-dg2: NOTRUN -> [SKIP][46] ([i915#4079]) [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-2/igt@gem_tiled_pread_basic.html * igt@gem_userptr_blits@coherency-sync: - shard-dg2: NOTRUN -> [SKIP][47] ([i915#3297]) +1 other test skip [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-2/igt@gem_userptr_blits@coherency-sync.html * igt@gem_userptr_blits@map-fixed-invalidate: - shard-dg2: NOTRUN -> [SKIP][48] ([i915#3297] / [i915#4880]) [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@gem_userptr_blits@map-fixed-invalidate.html * igt@gem_userptr_blits@unsync-overlap: - shard-mtlp: NOTRUN -> [SKIP][49] ([i915#3297]) +1 other test skip [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@gem_userptr_blits@unsync-overlap.html * igt@gem_userptr_blits@unsync-unmap-cycles: - shard-rkl: NOTRUN -> [SKIP][50] ([i915#3297]) [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@gem_userptr_blits@unsync-unmap-cycles.html * igt@gen7_exec_parse@basic-allocation: - shard-dg2: NOTRUN -> [SKIP][51] ([fdo#109289]) [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@gen7_exec_parse@basic-allocation.html * igt@gen9_exec_parse@allowed-all: - shard-dg2: NOTRUN -> [SKIP][52] ([i915#2856]) +5 other tests skip [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@gen9_exec_parse@allowed-all.html * igt@i915_pm_rpm@modeset-lpsp: - shard-dg2: NOTRUN -> [SKIP][53] ([i915#1397]) [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@i915_pm_rpm@modeset-lpsp.html * igt@i915_pm_rpm@modeset-lpsp-stress: - shard-dg1: [PASS][54] -> [SKIP][55] ([i915#1397]) [54]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg1-19/igt@i915_pm_rpm@modeset-lpsp-stress.html [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-18/igt@i915_pm_rpm@modeset-lpsp-stress.html * igt@i915_pm_rps@min-max-config-loaded: - shard-dg2: NOTRUN -> [SKIP][56] ([i915#6621]) [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@i915_pm_rps@min-max-config-loaded.html * igt@i915_query@query-topology-known-pci-ids: - shard-rkl: NOTRUN -> [SKIP][57] ([fdo#109303]) [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@i915_query@query-topology-known-pci-ids.html * igt@i915_selftest@mock@memory_region: - shard-dg2: NOTRUN -> [DMESG-WARN][58] ([i915#9311]) [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@i915_selftest@mock@memory_region.html * igt@i915_suspend@debugfs-reader: - shard-mtlp: NOTRUN -> [ABORT][59] ([i915#9262]) [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@i915_suspend@debugfs-reader.html * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-4-rc_ccs-cc: - shard-dg2: NOTRUN -> [SKIP][60] ([i915#8502] / [i915#8709]) +11 other tests skip [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-4-rc_ccs-cc.html * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-4-y-rc_ccs: - shard-dg1: NOTRUN -> [SKIP][61] ([i915#8502]) +7 other tests skip [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-14/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-4-y-rc_ccs.html * igt@kms_async_flips@crc@pipe-b-hdmi-a-3: - shard-dg1: NOTRUN -> [FAIL][62] ([i915#8247]) +3 other tests fail [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-12/igt@kms_async_flips@crc@pipe-b-hdmi-a-3.html * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels: - shard-dg2: NOTRUN -> [SKIP][63] ([i915#1769] / [i915#3555]) [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html * igt@kms_big_fb@4-tiled-16bpp-rotate-270: - shard-mtlp: NOTRUN -> [SKIP][64] ([fdo#111614]) [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-5/igt@kms_big_fb@4-tiled-16bpp-rotate-270.html * igt@kms_big_fb@4-tiled-64bpp-rotate-180: - shard-mtlp: [PASS][65] -> [FAIL][66] ([i915#5138]) +1 other test fail [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-mtlp-3/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-4/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html * igt@kms_big_fb@linear-32bpp-rotate-90: - shard-rkl: NOTRUN -> [SKIP][67] ([fdo#111614] / [i915#3638]) [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_big_fb@linear-32bpp-rotate-90.html * igt@kms_big_fb@x-tiled-32bpp-rotate-270: - shard-dg2: NOTRUN -> [SKIP][68] ([fdo#111614]) +6 other tests skip [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html * igt@kms_big_fb@y-tiled-64bpp-rotate-0: - shard-dg2: NOTRUN -> [SKIP][69] ([i915#5190]) +16 other tests skip [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html * igt@kms_big_fb@y-tiled-8bpp-rotate-180: - shard-mtlp: NOTRUN -> [SKIP][70] ([fdo#111615]) +1 other test skip [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@kms_big_fb@y-tiled-8bpp-rotate-180.html * igt@kms_big_fb@yf-tiled-64bpp-rotate-180: - shard-rkl: NOTRUN -> [SKIP][71] ([fdo#110723]) [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html * igt@kms_big_fb@yf-tiled-8bpp-rotate-0: - shard-dg2: NOTRUN -> [SKIP][72] ([i915#4538] / [i915#5190]) +5 other tests skip [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_big_fb@yf-tiled-8bpp-rotate-0.html * igt@kms_ccs@pipe-a-bad-rotation-90-4_tiled_dg2_rc_ccs: - shard-tglu: NOTRUN -> [SKIP][73] ([i915#3689] / [i915#5354] / [i915#6095]) +2 other tests skip [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_ccs@pipe-a-bad-rotation-90-4_tiled_dg2_rc_ccs.html * igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_ccs: - shard-mtlp: NOTRUN -> [SKIP][74] ([i915#5354] / [i915#6095]) +3 other tests skip [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_ccs.html * igt@kms_ccs@pipe-b-crc-primary-rotation-180-yf_tiled_ccs: - shard-tglu: NOTRUN -> [SKIP][75] ([fdo#111615] / [i915#3689] / [i915#5354] / [i915#6095]) [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_ccs@pipe-b-crc-primary-rotation-180-yf_tiled_ccs.html * igt@kms_ccs@pipe-b-crc-sprite-planes-basic-4_tiled_dg2_rc_ccs_cc: - shard-rkl: NOTRUN -> [SKIP][76] ([i915#5354] / [i915#6095]) +2 other tests skip [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_ccs@pipe-b-crc-sprite-planes-basic-4_tiled_dg2_rc_ccs_cc.html * igt@kms_ccs@pipe-b-crc-sprite-planes-basic-y_tiled_gen12_rc_ccs_cc: - shard-dg2: NOTRUN -> [SKIP][77] ([i915#3689] / [i915#3886] / [i915#5354]) +8 other tests skip [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_ccs@pipe-b-crc-sprite-planes-basic-y_tiled_gen12_rc_ccs_cc.html * igt@kms_ccs@pipe-c-bad-pixel-format-4_tiled_mtl_rc_ccs: - shard-rkl: NOTRUN -> [SKIP][78] ([i915#5354]) +4 other tests skip [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_ccs@pipe-c-bad-pixel-format-4_tiled_mtl_rc_ccs.html * igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_rc_ccs_cc: - shard-snb: NOTRUN -> [SKIP][79] ([fdo#109271]) +198 other tests skip [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-snb7/igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_rc_ccs_cc.html * igt@kms_ccs@pipe-c-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs: - shard-glk: NOTRUN -> [SKIP][80] ([fdo#109271] / [i915#3886]) [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-glk1/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs.html - shard-tglu: NOTRUN -> [SKIP][81] ([i915#3689] / [i915#3886] / [i915#5354] / [i915#6095]) [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs.html * igt@kms_ccs@pipe-d-crc-primary-basic-yf_tiled_ccs: - shard-dg2: NOTRUN -> [SKIP][82] ([i915#3689] / [i915#5354]) +22 other tests skip [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_ccs@pipe-d-crc-primary-basic-yf_tiled_ccs.html * igt@kms_ccs@pipe-d-random-ccs-data-4_tiled_mtl_rc_ccs: - shard-tglu: NOTRUN -> [SKIP][83] ([i915#5354] / [i915#6095]) +1 other test skip [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_ccs@pipe-d-random-ccs-data-4_tiled_mtl_rc_ccs.html * igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3: - shard-dg2: NOTRUN -> [SKIP][84] ([i915#4087] / [i915#7213]) +3 other tests skip [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html * igt@kms_chamelium_color@ctm-green-to-red: - shard-mtlp: NOTRUN -> [SKIP][85] ([fdo#111827]) [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@kms_chamelium_color@ctm-green-to-red.html * igt@kms_chamelium_color@ctm-negative: - shard-glk: NOTRUN -> [SKIP][86] ([fdo#109271]) +10 other tests skip [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-glk1/igt@kms_chamelium_color@ctm-negative.html - shard-tglu: NOTRUN -> [SKIP][87] ([fdo#111827]) [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_chamelium_color@ctm-negative.html * igt@kms_chamelium_color@degamma: - shard-dg2: NOTRUN -> [SKIP][88] ([fdo#111827]) +1 other test skip [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_chamelium_color@degamma.html * igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe: - shard-dg2: NOTRUN -> [SKIP][89] ([i915#7828]) +11 other tests skip [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe.html * igt@kms_chamelium_hpd@hdmi-hpd-with-enabled-mode: - shard-rkl: NOTRUN -> [SKIP][90] ([i915#7828]) [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_chamelium_hpd@hdmi-hpd-with-enabled-mode.html * igt@kms_color@deep-color: - shard-rkl: NOTRUN -> [SKIP][91] ([i915#3555]) +1 other test skip [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-2/igt@kms_color@deep-color.html * igt@kms_content_protection@content_type_change: - shard-dg2: NOTRUN -> [SKIP][92] ([i915#7118]) [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@kms_content_protection@content_type_change.html * igt@kms_content_protection@dp-mst-type-0: - shard-dg2: NOTRUN -> [SKIP][93] ([i915#3299]) +1 other test skip [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_content_protection@dp-mst-type-0.html * igt@kms_content_protection@lic: - shard-rkl: NOTRUN -> [SKIP][94] ([i915#7118]) [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_content_protection@lic.html * igt@kms_cursor_crc@cursor-offscreen-max-size: - shard-tglu: NOTRUN -> [SKIP][95] ([i915#3555]) [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_cursor_crc@cursor-offscreen-max-size.html * igt@kms_cursor_crc@cursor-onscreen-512x170: - shard-mtlp: NOTRUN -> [SKIP][96] ([i915#3359]) [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-1/igt@kms_cursor_crc@cursor-onscreen-512x170.html * igt@kms_cursor_crc@cursor-onscreen-max-size: - shard-dg2: NOTRUN -> [SKIP][97] ([i915#3555]) +5 other tests skip [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_cursor_crc@cursor-onscreen-max-size.html * igt@kms_cursor_crc@cursor-rapid-movement-512x170: - shard-dg2: NOTRUN -> [SKIP][98] ([i915#3359]) +2 other tests skip [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html * igt@kms_cursor_legacy@cursorb-vs-flipb-legacy: - shard-dg2: NOTRUN -> [SKIP][99] ([fdo#109274] / [i915#5354]) +6 other tests skip [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@kms_cursor_legacy@cursorb-vs-flipb-legacy.html * igt@kms_cursor_legacy@cursorb-vs-flipb-toggle: - shard-dg2: NOTRUN -> [SKIP][100] ([fdo#109274] / [fdo#111767] / [i915#5354]) [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions: - shard-glk: [PASS][101] -> [FAIL][102] ([i915#2346]) [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-glk1/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-glk2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle: - shard-dg2: NOTRUN -> [SKIP][103] ([i915#4103] / [i915#4213]) [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html * igt@kms_dirtyfb@dirtyfb-ioctl@drrs-hdmi-a-2: - shard-dg2: NOTRUN -> [SKIP][104] ([i915#9226] / [i915#9261]) +1 other test skip [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-2/igt@kms_dirtyfb@dirtyfb-ioctl@drrs-hdmi-a-2.html - shard-rkl: NOTRUN -> [SKIP][105] ([i915#9226] / [i915#9261]) +1 other test skip [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_dirtyfb@dirtyfb-ioctl@drrs-hdmi-a-2.html * igt@kms_dirtyfb@dirtyfb-ioctl@fbc-hdmi-a-2: - shard-dg2: NOTRUN -> [SKIP][106] ([i915#9227]) [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-2/igt@kms_dirtyfb@dirtyfb-ioctl@fbc-hdmi-a-2.html - shard-rkl: NOTRUN -> [SKIP][107] ([i915#9227]) [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_dirtyfb@dirtyfb-ioctl@fbc-hdmi-a-2.html * igt@kms_draw_crc@draw-method-mmap-gtt: - shard-dg2: NOTRUN -> [SKIP][108] ([i915#8812]) [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@kms_draw_crc@draw-method-mmap-gtt.html * igt@kms_dsc@dsc-with-bpc-formats: - shard-dg2: NOTRUN -> [SKIP][109] ([i915#3555] / [i915#3840]) [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_dsc@dsc-with-bpc-formats.html * igt@kms_flip@2x-absolute-wf_vblank: - shard-mtlp: NOTRUN -> [SKIP][110] ([i915#3637]) +1 other test skip [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-6/igt@kms_flip@2x-absolute-wf_vblank.html * igt@kms_flip@2x-busy-flip: - shard-tglu: NOTRUN -> [SKIP][111] ([fdo#109274] / [i915#3637]) +1 other test skip [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_flip@2x-busy-flip.html * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible: - shard-dg2: NOTRUN -> [SKIP][112] ([fdo#109274] / [fdo#111767]) [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html * igt@kms_flip@2x-flip-vs-modeset: - shard-dg2: NOTRUN -> [SKIP][113] ([fdo#109274]) +3 other tests skip [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@kms_flip@2x-flip-vs-modeset.html * igt@kms_flip@2x-wf_vblank-ts-check: - shard-rkl: NOTRUN -> [SKIP][114] ([fdo#111825]) [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_flip@2x-wf_vblank-ts-check.html * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-default-mode: - shard-mtlp: NOTRUN -> [SKIP][115] ([i915#2672] / [i915#3555]) +1 other test skip [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-default-mode.html * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode: - shard-dg2: NOTRUN -> [SKIP][116] ([i915#2672]) +3 other tests skip [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode.html * igt@kms_force_connector_basic@force-load-detect: - shard-dg2: NOTRUN -> [SKIP][117] ([fdo#109285]) [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_force_connector_basic@force-load-detect.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu: - shard-dg2: NOTRUN -> [FAIL][118] ([i915#6880]) [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-gtt: - shard-mtlp: NOTRUN -> [SKIP][119] ([i915#8708]) [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt: - shard-dg2: NOTRUN -> [SKIP][120] ([i915#5354]) +54 other tests skip [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render: - shard-rkl: NOTRUN -> [SKIP][121] ([fdo#111825] / [i915#1825]) +4 other tests skip [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt: - shard-dg2: NOTRUN -> [SKIP][122] ([i915#8708]) +14 other tests skip [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-gtt: - shard-tglu: NOTRUN -> [SKIP][123] ([fdo#109280]) +5 other tests skip [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-cpu: - shard-dg2: [PASS][124] -> [FAIL][125] ([i915#6880]) [124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-cpu.html [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-cpu.html * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-pgflip-blt: - shard-rkl: NOTRUN -> [SKIP][126] ([i915#3023]) +1 other test skip [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-pgflip-blt.html * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-wc: - shard-mtlp: NOTRUN -> [SKIP][127] ([i915#1825]) +3 other tests skip [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-mmap-wc.html * igt@kms_frontbuffer_tracking@fbcpsr-tiling-y: - shard-dg2: NOTRUN -> [SKIP][128] ([i915#5460]) [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move: - shard-tglu: NOTRUN -> [SKIP][129] ([fdo#110189]) +4 other tests skip [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html * igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary: - shard-dg2: NOTRUN -> [SKIP][130] ([i915#3458]) +21 other tests skip [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html * igt@kms_hdr@static-toggle: - shard-dg2: NOTRUN -> [SKIP][131] ([i915#3555] / [i915#8228]) +1 other test skip [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@kms_hdr@static-toggle.html * igt@kms_panel_fitting@atomic-fastset: - shard-dg2: NOTRUN -> [SKIP][132] ([i915#6301]) [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_panel_fitting@atomic-fastset.html * igt@kms_panel_fitting@legacy: - shard-rkl: NOTRUN -> [SKIP][133] ([i915#6301]) [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_panel_fitting@legacy.html * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1: - shard-snb: NOTRUN -> [DMESG-WARN][134] ([i915#8841]) +5 other tests dmesg-warn [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-snb1/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html * igt@kms_plane_multiple@tiling-yf: - shard-dg2: NOTRUN -> [SKIP][135] ([i915#3555] / [i915#8806]) [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@kms_plane_multiple@tiling-yf.html * igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-1: - shard-dg2: NOTRUN -> [SKIP][136] ([i915#5176]) +3 other tests skip [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-1.html * igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-25@pipe-d-hdmi-a-3: - shard-dg1: NOTRUN -> [SKIP][137] ([i915#5176]) +19 other tests skip [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-12/igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-25@pipe-d-hdmi-a-3.html * igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-75@pipe-a-hdmi-a-1: - shard-rkl: NOTRUN -> [SKIP][138] ([i915#5176]) +9 other tests skip [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-7/igt@kms_plane_scaling@plane-downscale-with-rotation-factor-0-75@pipe-a-hdmi-a-1.html * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-b-hdmi-a-2: - shard-rkl: NOTRUN -> [SKIP][139] ([i915#5235]) +3 other tests skip [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-b-hdmi-a-2.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-b-hdmi-a-1: - shard-dg1: NOTRUN -> [SKIP][140] ([i915#5235]) +3 other tests skip [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-19/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-b-hdmi-a-1.html * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-dp-4: - shard-dg2: NOTRUN -> [SKIP][141] ([i915#5235]) +7 other tests skip [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-c-dp-4.html * igt@kms_prime@basic-crc-hybrid: - shard-tglu: NOTRUN -> [SKIP][142] ([i915#6524]) [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_prime@basic-crc-hybrid.html * igt@kms_prime@basic-crc-vgem: - shard-dg2: NOTRUN -> [SKIP][143] ([i915#6524] / [i915#6805]) [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@kms_prime@basic-crc-vgem.html * igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf: - shard-rkl: NOTRUN -> [SKIP][144] ([i915#658]) [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-sf.html * igt@kms_psr2_sf@cursor-plane-move-continuous-sf: - shard-glk: NOTRUN -> [SKIP][145] ([fdo#109271] / [i915#658]) [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-glk1/igt@kms_psr2_sf@cursor-plane-move-continuous-sf.html - shard-tglu: NOTRUN -> [SKIP][146] ([i915#658]) [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@kms_psr2_sf@cursor-plane-move-continuous-sf.html * igt@kms_psr2_su@page_flip-xrgb8888: - shard-dg2: NOTRUN -> [SKIP][147] ([i915#658]) [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@kms_psr2_su@page_flip-xrgb8888.html * igt@kms_psr@dpms: - shard-dg2: NOTRUN -> [SKIP][148] ([i915#1072]) +9 other tests skip [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_psr@dpms.html * igt@kms_psr@primary_render: - shard-rkl: NOTRUN -> [SKIP][149] ([i915#1072]) [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_psr@primary_render.html * igt@kms_psr_stress_test@invalidate-primary-flip-overlay: - shard-dg2: NOTRUN -> [SKIP][150] ([i915#5461] / [i915#658]) [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html * igt@kms_rotation_crc@primary-rotation-90: - shard-dg2: NOTRUN -> [SKIP][151] ([i915#4235]) [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@kms_rotation_crc@primary-rotation-90.html * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90: - shard-dg2: NOTRUN -> [SKIP][152] ([i915#4235] / [i915#5190]) [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html * igt@kms_rotation_crc@sprite-rotation-270: - shard-rkl: [PASS][153] -> [INCOMPLETE][154] ([i915#8875]) [153]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-4/igt@kms_rotation_crc@sprite-rotation-270.html [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-1/igt@kms_rotation_crc@sprite-rotation-270.html * igt@kms_setmode@basic@pipe-a-vga-1: - shard-snb: NOTRUN -> [FAIL][155] ([i915#5465]) +1 other test fail [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-snb7/igt@kms_setmode@basic@pipe-a-vga-1.html * igt@kms_universal_plane@cursor-fb-leak-pipe-b: - shard-snb: [PASS][156] -> [FAIL][157] ([i915#9196]) [156]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-snb1/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-snb7/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html * igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend: - shard-dg2: [PASS][158] -> [FAIL][159] ([fdo#103375]) +1 other test fail [158]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg2-11/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html * igt@kms_vblank@pipe-c-wait-forked-busy-hang: - shard-rkl: NOTRUN -> [SKIP][160] ([i915#4070] / [i915#6768]) [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_vblank@pipe-c-wait-forked-busy-hang.html * igt@kms_writeback@writeback-pixel-formats: - shard-rkl: NOTRUN -> [SKIP][161] ([i915#2437]) [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_writeback@writeback-pixel-formats.html * igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem: - shard-dg2: NOTRUN -> [CRASH][162] ([i915#9351]) [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html * igt@prime_vgem@basic-read: - shard-dg2: NOTRUN -> [SKIP][163] ([i915#3291] / [i915#3708]) [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-7/igt@prime_vgem@basic-read.html * igt@prime_vgem@coherency-gtt: - shard-dg2: NOTRUN -> [SKIP][164] ([i915#3708] / [i915#4077]) [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@prime_vgem@coherency-gtt.html * igt@prime_vgem@fence-read-hang: - shard-dg2: NOTRUN -> [SKIP][165] ([i915#3708]) +1 other test skip [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-10/igt@prime_vgem@fence-read-hang.html * igt@prime_vgem@fence-write-hang: - shard-mtlp: NOTRUN -> [SKIP][166] ([i915#3708]) [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-5/igt@prime_vgem@fence-write-hang.html * igt@tools_test@sysfs_l3_parity: - shard-rkl: NOTRUN -> [SKIP][167] ([fdo#109307]) [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@tools_test@sysfs_l3_parity.html * igt@v3d/v3d_create_bo@create-bo-0: - shard-rkl: NOTRUN -> [SKIP][168] ([fdo#109315]) [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@v3d/v3d_create_bo@create-bo-0.html * igt@v3d/v3d_submit_cl@bad-bo: - shard-tglu: NOTRUN -> [SKIP][169] ([fdo#109315] / [i915#2575]) +2 other tests skip [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@v3d/v3d_submit_cl@bad-bo.html * igt@v3d/v3d_submit_csd@bad-bo: - shard-mtlp: NOTRUN -> [SKIP][170] ([i915#2575]) +1 other test skip [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-5/igt@v3d/v3d_submit_csd@bad-bo.html * igt@v3d/v3d_submit_csd@job-perfmon: - shard-dg2: NOTRUN -> [SKIP][171] ([i915#2575]) +12 other tests skip [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-3/igt@v3d/v3d_submit_csd@job-perfmon.html * igt@vc4/vc4_create_bo@create-bo-0: - shard-rkl: NOTRUN -> [SKIP][172] ([i915#7711]) +2 other tests skip [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@vc4/vc4_create_bo@create-bo-0.html * igt@vc4/vc4_wait_seqno@bad-seqno-1ns: - shard-dg2: NOTRUN -> [SKIP][173] ([i915#7711]) +9 other tests skip [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@vc4/vc4_wait_seqno@bad-seqno-1ns.html #### Possible fixes #### * igt@api_intel_bb@object-noreloc-keep-cache-simple: - shard-mtlp: [ABORT][174] ([i915#9262]) -> [PASS][175] +2 other tests pass [174]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-mtlp-7/igt@api_intel_bb@object-noreloc-keep-cache-simple.html [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-6/igt@api_intel_bb@object-noreloc-keep-cache-simple.html * igt@drm_fdinfo@most-busy-check-all@rcs0: - shard-rkl: [FAIL][176] ([i915#7742]) -> [PASS][177] [176]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-6/igt@drm_fdinfo@most-busy-check-all@rcs0.html [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html * igt@gem_ctx_isolation@preservation-s3@ccs0: - shard-mtlp: [DMESG-WARN][178] ([i915#9262]) -> [PASS][179] +1 other test pass [178]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-mtlp-1/igt@gem_ctx_isolation@preservation-s3@ccs0.html [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-3/igt@gem_ctx_isolation@preservation-s3@ccs0.html * igt@gem_eio@hibernate: - shard-tglu: [ABORT][180] ([i915#7975] / [i915#8213] / [i915#8398]) -> [PASS][181] [180]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-tglu-10/igt@gem_eio@hibernate.html [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-7/igt@gem_eio@hibernate.html * igt@gem_exec_fair@basic-deadline: - shard-rkl: [FAIL][182] ([i915#2846]) -> [PASS][183] [182]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-7/igt@gem_exec_fair@basic-deadline.html [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@gem_exec_fair@basic-deadline.html * igt@gem_exec_fair@basic-pace@vecs0: - shard-rkl: [FAIL][184] ([i915#2842]) -> [PASS][185] [184]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-6/igt@gem_exec_fair@basic-pace@vecs0.html [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@gem_exec_fair@basic-pace@vecs0.html * igt@gem_exec_schedule@noreorder@ccs0: - shard-mtlp: [DMESG-FAIL][186] ([i915#8962] / [i915#9121]) -> [PASS][187] [186]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-mtlp-4/igt@gem_exec_schedule@noreorder@ccs0.html [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-8/igt@gem_exec_schedule@noreorder@ccs0.html * igt@gem_exec_schedule@noreorder@rcs0: - shard-mtlp: [DMESG-WARN][188] ([i915#9121]) -> [PASS][189] [188]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-mtlp-4/igt@gem_exec_schedule@noreorder@rcs0.html [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-mtlp-8/igt@gem_exec_schedule@noreorder@rcs0.html * igt@gem_exec_suspend@basic-s4-devices@lmem0: - shard-dg2: [ABORT][190] ([i915#7975] / [i915#8213]) -> [PASS][191] [190]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg2-1/igt@gem_exec_suspend@basic-s4-devices@lmem0.html [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-11/igt@gem_exec_suspend@basic-s4-devices@lmem0.html * igt@gem_spin_batch@user-each: - shard-apl: [FAIL][192] ([i915#2898]) -> [PASS][193] [192]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-apl2/igt@gem_spin_batch@user-each.html [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-apl6/igt@gem_spin_batch@user-each.html * igt@i915_pm_rc6_residency@rc6-idle@bcs0: - shard-dg1: [FAIL][194] ([i915#3591]) -> [PASS][195] [194]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg1-19/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-18/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html * igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait: - shard-rkl: [SKIP][196] ([i915#1397]) -> [PASS][197] [196]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-7/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-2/igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait.html * igt@i915_selftest@live@gt_heartbeat: - shard-apl: [DMESG-FAIL][198] ([i915#5334]) -> [PASS][199] [198]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-apl3/igt@i915_selftest@live@gt_heartbeat.html [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-apl1/igt@i915_selftest@live@gt_heartbeat.html * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip: - shard-tglu: [FAIL][200] ([i915#3743]) -> [PASS][201] [200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-tglu-5/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-2/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size: - shard-apl: [FAIL][202] ([i915#2346]) -> [PASS][203] +1 other test pass [202]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-apl3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-apl1/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt: - shard-dg2: [FAIL][204] ([i915#6880]) -> [PASS][205] +2 other tests pass [204]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html * igt@kms_plane@plane-panning-bottom-right-suspend@pipe-b-planes: - shard-dg2: [INCOMPLETE][206] -> [PASS][207] [206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg2-2/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-b-planes.html [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg2-2/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-b-planes.html * igt@kms_rotation_crc@multiplane-rotation: - shard-rkl: [INCOMPLETE][208] ([i915#8875]) -> [PASS][209] [208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-6/igt@kms_rotation_crc@multiplane-rotation.html [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-4/igt@kms_rotation_crc@multiplane-rotation.html * igt@kms_universal_plane@cursor-fb-leak-pipe-c: - shard-tglu: [FAIL][210] ([i915#9196]) -> [PASS][211] [210]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-tglu-3/igt@kms_universal_plane@cursor-fb-leak-pipe-c.html [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-tglu-8/igt@kms_universal_plane@cursor-fb-leak-pipe-c.html #### Warnings #### * igt@kms_content_protection@mei_interface: - shard-dg1: [SKIP][212] ([i915#7116]) -> [SKIP][213] ([fdo#109300]) [212]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg1-15/igt@kms_content_protection@mei_interface.html [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-12/igt@kms_content_protection@mei_interface.html * igt@kms_multipipe_modeset@basic-max-pipe-crc-check: - shard-rkl: [SKIP][214] ([i915#4070] / [i915#4816]) -> [SKIP][215] ([i915#4816]) [214]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-rkl-6/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-rkl-7/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html * igt@kms_psr@primary_page_flip: - shard-dg1: [SKIP][216] ([i915#1072]) -> [SKIP][217] ([i915#1072] / [i915#4078]) [216]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13679/shard-dg1-15/igt@kms_psr@primary_page_flip.html [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_124185v2/shard-dg1-12/igt@kms_psr@primary_page_flip.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274 [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280 [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285 [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289 [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300 [fdo#109303]: https://bugs.freedesktop.org/show_bug.cgi?id=109303 [fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307 [fdo#109312]: https://bugs.freedesktop.org/show_bug.cgi?id=109312 [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315 [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189 [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723 [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614 [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615 [fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767 [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825 [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827 [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072 [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099 [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397 [i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769 [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825 [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839 [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346 [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437 [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575 [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672 [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280 [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842 [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846 [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856 [i915#2898]: https://gitlab.freedesktop.org/drm/intel/issues/2898 [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023 [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281 [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282 [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291 [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297 [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299 [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359 [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458 [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539 [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555 [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591 [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637 [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638 [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689 [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708 [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743 [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840 [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886 [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070 [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077 [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078 [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079 [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083 [i915#4087]: https://gitlab.freedesktop.org/drm/intel/issues/4087 [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103 [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213 [i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235 [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270 [i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537 [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538 [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613 [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812 [i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816 [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852 [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860 [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880 [i915#4936]: https://gitlab.freedesktop.org/drm/intel/issues/4936 [i915#5138]: https://gitlab.freedesktop.org/drm/intel/issues/5138 [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176 [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190 [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235 [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334 [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354 [i915#5460]: https://gitlab.freedesktop.org/drm/intel/issues/5460 [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461 [i915#5465]: https://gitlab.freedesktop.org/drm/intel/issues/5465 [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493 [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784 [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095 [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301 [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524 [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658 [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621 [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768 [i915#6805]: https://gitlab.freedesktop.org/drm/intel/issues/6805 [i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880 [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116 [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118 [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213 [i915#7582]: https://gitlab.freedesktop.org/drm/intel/issues/7582 [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697 [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711 [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742 [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828 [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975 [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213 [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228 [i915#8247]: https://gitlab.freedesktop.org/drm/intel/issues/8247 [i915#8398]: https://gitlab.freedesktop.org/drm/intel/issues/8398 [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411 [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414 [i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428 [i915#8502]: https://gitlab.freedesktop.org/drm/intel/issues/8502 [i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555 [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708 [i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709 [i915#8806]: https://gitlab.freedesktop.org/drm/intel/issues/8806 [i915#8812]: https://gitlab.freedesktop.org/drm/intel/issues/8812 [i915#8841]: https://gitlab.freedesktop.org/drm/intel/issues/8841 [i915#8875]: https://gitlab.freedesktop.org/drm/intel/issues/8875 [i915#8898]: https://gitlab.freedesktop.org/drm/intel/issues/8898 [i915#8962]: https://gitlab.freedesktop.org/drm/intel/issues/8962 [i915#9121]: https://gitlab.freedesktop.org/drm/intel/issues/9121 [i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196 [i915#9226]: https://gitlab.freedesktop.org/drm/intel/issues/9226 [i915#9227]: https://gitlab.freedesktop.org/drm/intel/issues/9227 [i915#9261]: https://gitlab.freedesktop.org/drm/intel/issues/9261 [i915#9262]: https://gitlab.freedesktop.org/drm/intel/issues/9262 [i915#9311]: https://gitlab.freedesktop.org/drm/intel/issues/9311 [i915#9351]: https://gitlab.freedesktop.org/drm/intel/issues/9351 Build changes ------------- * Linux: CI_DRM_13679 -> Patchwork_124185v2 CI-20190529: 20190529 CI_DRM_13679: 6dad88365b6dfbe68e8b527c421369d2c6620049 @ git://anongit.freedesktop.org/gfx-ci/linux IGT_7502: ac56ba97248b33668fbe771882360bd7b274cc9a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_124185v2: 6dad88365b6dfbe68e8b527c421369d2c6620049 @ 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_124185v2/index.html [-- Attachment #2: Type: text/html, Size: 73251 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock 2023-09-25 13:13 ` Andrzej Hajda @ 2023-10-10 12:02 ` Andrzej Hajda -1 siblings, 0 replies; 15+ messages in thread From: Andrzej Hajda @ 2023-10-10 12:02 UTC (permalink / raw) To: linux-kernel, intel-gfx, linux-mm, Thomas Gleixner; +Cc: Nirmoy Das On 25.09.2023 15:13, Andrzej Hajda wrote: > After spinlock release object can be modified/freed by concurrent thread. > Using it in such case is error prone, even for printing object state. > To avoid such situation local copy of the object is created if necessary. > > Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> > --- > v2: add missing switch breaks > --- Ping, any volunteer to review? Regards Andrzej > lib/debugobjects.c | 206 +++++++++++++++++++++------------------------ > 1 file changed, 97 insertions(+), 109 deletions(-) > > diff --git a/lib/debugobjects.c b/lib/debugobjects.c > index a517256a270b71..3afff2f668fc1e 100644 > --- a/lib/debugobjects.c > +++ b/lib/debugobjects.c > @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) > static void > __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > > debug_objects_fill_pool(); > @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack > case ODEBUG_STATE_INACTIVE: > obj->state = ODEBUG_STATE_INIT; > break; > - > - case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - debug_object_fixup(descr->fixup_init, addr, state); > - return; > - > - case ODEBUG_STATE_DESTROYED: > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - return; > default: > - break; > + o = *obj; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > + > + if (obj) > + return; > + > + debug_print_object(&o, "init"); > + if (o.state == ODEBUG_STATE_ACTIVE) > + debug_object_fixup(descr->fixup_init, addr, o.state); > } > > /** > @@ -700,12 +695,9 @@ EXPORT_SYMBOL_GPL(debug_object_init_on_stack); > */ > int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > { > - struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - int ret; > > if (!debug_objects_enabled) > return 0; > @@ -717,49 +709,47 @@ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object_or_alloc(addr, db, descr, false, true); > - if (likely(!IS_ERR_OR_NULL(obj))) { > - bool print_object = false; > - > + if (unlikely(!obj)) { > + raw_spin_unlock_irqrestore(&db->lock, flags); > + debug_objects_oom(); > + return 0; > + } else if (likely(!IS_ERR(obj))) { > switch (obj->state) { > case ODEBUG_STATE_INIT: > case ODEBUG_STATE_INACTIVE: > obj->state = ODEBUG_STATE_ACTIVE; > - ret = 0; > break; > - > case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "activate"); > - ret = debug_object_fixup(descr->fixup_activate, addr, state); > - return ret ? 0 : -EINVAL; > - > case ODEBUG_STATE_DESTROYED: > - print_object = true; > - ret = -EINVAL; > + o = *obj; > + obj = NULL; > break; > default: > - ret = 0; > break; > } > - raw_spin_unlock_irqrestore(&db->lock, flags); > - if (print_object) > - debug_print_object(obj, "activate"); > - return ret; > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - /* If NULL the allocation has hit OOM */ > - if (!obj) { > - debug_objects_oom(); > + if (obj) > return 0; > - } > > - /* Object is neither static nor tracked. It's not initialized */ > debug_print_object(&o, "activate"); > - ret = debug_object_fixup(descr->fixup_activate, addr, ODEBUG_STATE_NOTAVAILABLE); > - return ret ? 0 : -EINVAL; > + > + switch (o.state) { > + case ODEBUG_STATE_ACTIVE: > + case ODEBUG_STATE_NOTAVAILABLE: > + if (debug_object_fixup(descr->fixup_activate, addr, o.state)) > + return 0; > + fallthrough; > + default: > + return -EINVAL; > + } > } > EXPORT_SYMBOL_GPL(debug_object_activate); > > @@ -771,9 +761,8 @@ EXPORT_SYMBOL_GPL(debug_object_activate); > void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > { > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - bool print_object = false; > > if (!debug_objects_enabled) > return; > @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > case ODEBUG_STATE_INIT: > case ODEBUG_STATE_INACTIVE: > case ODEBUG_STATE_ACTIVE: > - if (!obj->astate) > + if (!obj->astate) { > obj->state = ODEBUG_STATE_INACTIVE; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > case ODEBUG_STATE_DESTROYED: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > default: > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > - if (!obj) { > - struct debug_obj o = { .object = addr, > - .state = ODEBUG_STATE_NOTAVAILABLE, > - .descr = descr }; > > + if (!obj) > debug_print_object(&o, "deactivate"); > - } else if (print_object) { > - debug_print_object(obj, "deactivate"); > - } > } > EXPORT_SYMBOL_GPL(debug_object_deactivate); > > @@ -822,11 +810,9 @@ EXPORT_SYMBOL_GPL(debug_object_deactivate); > */ > void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - bool print_object = false; > > if (!debug_objects_enabled) > return; > @@ -836,8 +822,10 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > - if (!obj) > - goto out_unlock; > + if (!obj) { > + raw_spin_unlock_irqrestore(&db->lock, flags); > + return; > + } > > switch (obj->state) { > case ODEBUG_STATE_NONE: > @@ -846,22 +834,23 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > obj->state = ODEBUG_STATE_DESTROYED; > break; > case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "destroy"); > - debug_object_fixup(descr->fixup_destroy, addr, state); > - return; > - > case ODEBUG_STATE_DESTROYED: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > default: > break; > } > -out_unlock: > + > raw_spin_unlock_irqrestore(&db->lock, flags); > - if (print_object) > - debug_print_object(obj, "destroy"); > + > + if (obj) > + return; > + > + debug_print_object(&o, "destroy"); > + > + if (o.state == ODEBUG_STATE_ACTIVE) > + debug_object_fixup(descr->fixup_destroy, addr, o.state); > } > EXPORT_SYMBOL_GPL(debug_object_destroy); > > @@ -872,9 +861,8 @@ EXPORT_SYMBOL_GPL(debug_object_destroy); > */ > void debug_object_free(void *addr, const struct debug_obj_descr *descr) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > > if (!debug_objects_enabled) > @@ -885,24 +873,29 @@ void debug_object_free(void *addr, const struct debug_obj_descr *descr) > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > - if (!obj) > - goto out_unlock; > + if (!obj) { > + raw_spin_unlock_irqrestore(&db->lock, flags); > + return; > + } > > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "free"); > - debug_object_fixup(descr->fixup_free, addr, state); > - return; > + o = *obj; > + obj = NULL; > + break; > default: > hlist_del(&obj->node); > - raw_spin_unlock_irqrestore(&db->lock, flags); > + } > + > + raw_spin_unlock_irqrestore(&db->lock, flags); > + > + if (obj) { > free_object(obj); > return; > } > -out_unlock: > - raw_spin_unlock_irqrestore(&db->lock, flags); > + > + debug_print_object(&o, "free"); > + debug_object_fixup(descr->fixup_free, addr, o.state); > } > EXPORT_SYMBOL_GPL(debug_object_free); > > @@ -955,9 +948,8 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > unsigned int expect, unsigned int next) > { > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - bool print_object = false; > > if (!debug_objects_enabled) > return; > @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > if (obj) { > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - if (obj->astate == expect) > + if (obj->astate == expect) { > obj->astate = next; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > default: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > - if (!obj) { > - struct debug_obj o = { .object = addr, > - .state = ODEBUG_STATE_NOTAVAILABLE, > - .descr = descr }; > > + if (!obj) > debug_print_object(&o, "active_state"); > - } else if (print_object) { > - debug_print_object(obj, "active_state"); > - } > } > EXPORT_SYMBOL_GPL(debug_object_active_state); > > @@ -999,11 +990,9 @@ EXPORT_SYMBOL_GPL(debug_object_active_state); > static void __debug_check_no_obj_freed(const void *address, unsigned long size) > { > unsigned long flags, oaddr, saddr, eaddr, paddr, chunks; > - const struct debug_obj_descr *descr; > - enum debug_obj_state state; > struct debug_bucket *db; > struct hlist_node *tmp; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > int cnt, objs_checked = 0; > > saddr = (unsigned long) address; > @@ -1026,12 +1015,11 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size) > > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - descr = obj->descr; > - state = obj->state; > + o = *obj; > raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "free"); > - debug_object_fixup(descr->fixup_free, > - (void *) oaddr, state); > + debug_print_object(&o, "free"); > + debug_object_fixup(o.descr->fixup_free, > + (void *) oaddr, o.state); > goto repeat; > default: > hlist_del(&obj->node); ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2] debugobjects: stop accessing objects after releasing spinlock @ 2023-10-10 12:02 ` Andrzej Hajda 0 siblings, 0 replies; 15+ messages in thread From: Andrzej Hajda @ 2023-10-10 12:02 UTC (permalink / raw) To: linux-kernel, intel-gfx, linux-mm, Thomas Gleixner Cc: Andi Shyti, Nirmoy Das, Janusz Krzysztofik On 25.09.2023 15:13, Andrzej Hajda wrote: > After spinlock release object can be modified/freed by concurrent thread. > Using it in such case is error prone, even for printing object state. > To avoid such situation local copy of the object is created if necessary. > > Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> > --- > v2: add missing switch breaks > --- Ping, any volunteer to review? Regards Andrzej > lib/debugobjects.c | 206 +++++++++++++++++++++------------------------ > 1 file changed, 97 insertions(+), 109 deletions(-) > > diff --git a/lib/debugobjects.c b/lib/debugobjects.c > index a517256a270b71..3afff2f668fc1e 100644 > --- a/lib/debugobjects.c > +++ b/lib/debugobjects.c > @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) > static void > __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > > debug_objects_fill_pool(); > @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack > case ODEBUG_STATE_INACTIVE: > obj->state = ODEBUG_STATE_INIT; > break; > - > - case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - debug_object_fixup(descr->fixup_init, addr, state); > - return; > - > - case ODEBUG_STATE_DESTROYED: > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - return; > default: > - break; > + o = *obj; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > + > + if (obj) > + return; > + > + debug_print_object(&o, "init"); > + if (o.state == ODEBUG_STATE_ACTIVE) > + debug_object_fixup(descr->fixup_init, addr, o.state); > } > > /** > @@ -700,12 +695,9 @@ EXPORT_SYMBOL_GPL(debug_object_init_on_stack); > */ > int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > { > - struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - int ret; > > if (!debug_objects_enabled) > return 0; > @@ -717,49 +709,47 @@ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object_or_alloc(addr, db, descr, false, true); > - if (likely(!IS_ERR_OR_NULL(obj))) { > - bool print_object = false; > - > + if (unlikely(!obj)) { > + raw_spin_unlock_irqrestore(&db->lock, flags); > + debug_objects_oom(); > + return 0; > + } else if (likely(!IS_ERR(obj))) { > switch (obj->state) { > case ODEBUG_STATE_INIT: > case ODEBUG_STATE_INACTIVE: > obj->state = ODEBUG_STATE_ACTIVE; > - ret = 0; > break; > - > case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "activate"); > - ret = debug_object_fixup(descr->fixup_activate, addr, state); > - return ret ? 0 : -EINVAL; > - > case ODEBUG_STATE_DESTROYED: > - print_object = true; > - ret = -EINVAL; > + o = *obj; > + obj = NULL; > break; > default: > - ret = 0; > break; > } > - raw_spin_unlock_irqrestore(&db->lock, flags); > - if (print_object) > - debug_print_object(obj, "activate"); > - return ret; > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - /* If NULL the allocation has hit OOM */ > - if (!obj) { > - debug_objects_oom(); > + if (obj) > return 0; > - } > > - /* Object is neither static nor tracked. It's not initialized */ > debug_print_object(&o, "activate"); > - ret = debug_object_fixup(descr->fixup_activate, addr, ODEBUG_STATE_NOTAVAILABLE); > - return ret ? 0 : -EINVAL; > + > + switch (o.state) { > + case ODEBUG_STATE_ACTIVE: > + case ODEBUG_STATE_NOTAVAILABLE: > + if (debug_object_fixup(descr->fixup_activate, addr, o.state)) > + return 0; > + fallthrough; > + default: > + return -EINVAL; > + } > } > EXPORT_SYMBOL_GPL(debug_object_activate); > > @@ -771,9 +761,8 @@ EXPORT_SYMBOL_GPL(debug_object_activate); > void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > { > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - bool print_object = false; > > if (!debug_objects_enabled) > return; > @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > case ODEBUG_STATE_INIT: > case ODEBUG_STATE_INACTIVE: > case ODEBUG_STATE_ACTIVE: > - if (!obj->astate) > + if (!obj->astate) { > obj->state = ODEBUG_STATE_INACTIVE; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > case ODEBUG_STATE_DESTROYED: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > default: > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > - if (!obj) { > - struct debug_obj o = { .object = addr, > - .state = ODEBUG_STATE_NOTAVAILABLE, > - .descr = descr }; > > + if (!obj) > debug_print_object(&o, "deactivate"); > - } else if (print_object) { > - debug_print_object(obj, "deactivate"); > - } > } > EXPORT_SYMBOL_GPL(debug_object_deactivate); > > @@ -822,11 +810,9 @@ EXPORT_SYMBOL_GPL(debug_object_deactivate); > */ > void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - bool print_object = false; > > if (!debug_objects_enabled) > return; > @@ -836,8 +822,10 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > - if (!obj) > - goto out_unlock; > + if (!obj) { > + raw_spin_unlock_irqrestore(&db->lock, flags); > + return; > + } > > switch (obj->state) { > case ODEBUG_STATE_NONE: > @@ -846,22 +834,23 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > obj->state = ODEBUG_STATE_DESTROYED; > break; > case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "destroy"); > - debug_object_fixup(descr->fixup_destroy, addr, state); > - return; > - > case ODEBUG_STATE_DESTROYED: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > default: > break; > } > -out_unlock: > + > raw_spin_unlock_irqrestore(&db->lock, flags); > - if (print_object) > - debug_print_object(obj, "destroy"); > + > + if (obj) > + return; > + > + debug_print_object(&o, "destroy"); > + > + if (o.state == ODEBUG_STATE_ACTIVE) > + debug_object_fixup(descr->fixup_destroy, addr, o.state); > } > EXPORT_SYMBOL_GPL(debug_object_destroy); > > @@ -872,9 +861,8 @@ EXPORT_SYMBOL_GPL(debug_object_destroy); > */ > void debug_object_free(void *addr, const struct debug_obj_descr *descr) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > > if (!debug_objects_enabled) > @@ -885,24 +873,29 @@ void debug_object_free(void *addr, const struct debug_obj_descr *descr) > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > - if (!obj) > - goto out_unlock; > + if (!obj) { > + raw_spin_unlock_irqrestore(&db->lock, flags); > + return; > + } > > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "free"); > - debug_object_fixup(descr->fixup_free, addr, state); > - return; > + o = *obj; > + obj = NULL; > + break; > default: > hlist_del(&obj->node); > - raw_spin_unlock_irqrestore(&db->lock, flags); > + } > + > + raw_spin_unlock_irqrestore(&db->lock, flags); > + > + if (obj) { > free_object(obj); > return; > } > -out_unlock: > - raw_spin_unlock_irqrestore(&db->lock, flags); > + > + debug_print_object(&o, "free"); > + debug_object_fixup(descr->fixup_free, addr, o.state); > } > EXPORT_SYMBOL_GPL(debug_object_free); > > @@ -955,9 +948,8 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > unsigned int expect, unsigned int next) > { > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > - bool print_object = false; > > if (!debug_objects_enabled) > return; > @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > if (obj) { > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - if (obj->astate == expect) > + if (obj->astate == expect) { > obj->astate = next; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > default: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > - if (!obj) { > - struct debug_obj o = { .object = addr, > - .state = ODEBUG_STATE_NOTAVAILABLE, > - .descr = descr }; > > + if (!obj) > debug_print_object(&o, "active_state"); > - } else if (print_object) { > - debug_print_object(obj, "active_state"); > - } > } > EXPORT_SYMBOL_GPL(debug_object_active_state); > > @@ -999,11 +990,9 @@ EXPORT_SYMBOL_GPL(debug_object_active_state); > static void __debug_check_no_obj_freed(const void *address, unsigned long size) > { > unsigned long flags, oaddr, saddr, eaddr, paddr, chunks; > - const struct debug_obj_descr *descr; > - enum debug_obj_state state; > struct debug_bucket *db; > struct hlist_node *tmp; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > int cnt, objs_checked = 0; > > saddr = (unsigned long) address; > @@ -1026,12 +1015,11 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size) > > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - descr = obj->descr; > - state = obj->state; > + o = *obj; > raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "free"); > - debug_object_fixup(descr->fixup_free, > - (void *) oaddr, state); > + debug_print_object(&o, "free"); > + debug_object_fixup(o.descr->fixup_free, > + (void *) oaddr, o.state); > goto repeat; > default: > hlist_del(&obj->node); ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock 2023-10-10 12:02 ` Andrzej Hajda @ 2023-10-10 12:10 ` Andi Shyti -1 siblings, 0 replies; 15+ messages in thread From: Andi Shyti @ 2023-10-10 12:10 UTC (permalink / raw) To: Andrzej Hajda Cc: intel-gfx, linux-kernel, linux-mm, Thomas Gleixner, Nirmoy Das Hi Andrzej, On Tue, Oct 10, 2023 at 02:02:54PM +0200, Andrzej Hajda wrote: > On 25.09.2023 15:13, Andrzej Hajda wrote: > > After spinlock release object can be modified/freed by concurrent thread. > > Using it in such case is error prone, even for printing object state. > > To avoid such situation local copy of the object is created if necessary. > > > > Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> > > --- > > v2: add missing switch breaks > > --- > > Ping, any volunteer to review? ops... sorry... this slipped from my review list. Will look at it soon Andi > Regards > Andrzej > > > > > > lib/debugobjects.c | 206 +++++++++++++++++++++------------------------ > > 1 file changed, 97 insertions(+), 109 deletions(-) > > > > diff --git a/lib/debugobjects.c b/lib/debugobjects.c > > index a517256a270b71..3afff2f668fc1e 100644 > > --- a/lib/debugobjects.c > > +++ b/lib/debugobjects.c > > @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) > > static void > > __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) > > { > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > debug_objects_fill_pool(); > > @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack > > case ODEBUG_STATE_INACTIVE: > > obj->state = ODEBUG_STATE_INIT; > > break; > > - > > - case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "init"); > > - debug_object_fixup(descr->fixup_init, addr, state); > > - return; > > - > > - case ODEBUG_STATE_DESTROYED: > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "init"); > > - return; > > default: > > - break; > > + o = *obj; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > + > > + if (obj) > > + return; > > + > > + debug_print_object(&o, "init"); > > + if (o.state == ODEBUG_STATE_ACTIVE) > > + debug_object_fixup(descr->fixup_init, addr, o.state); > > } > > /** > > @@ -700,12 +695,9 @@ EXPORT_SYMBOL_GPL(debug_object_init_on_stack); > > */ > > int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > > { > > - struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - int ret; > > if (!debug_objects_enabled) > > return 0; > > @@ -717,49 +709,47 @@ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object_or_alloc(addr, db, descr, false, true); > > - if (likely(!IS_ERR_OR_NULL(obj))) { > > - bool print_object = false; > > - > > + if (unlikely(!obj)) { > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + debug_objects_oom(); > > + return 0; > > + } else if (likely(!IS_ERR(obj))) { > > switch (obj->state) { > > case ODEBUG_STATE_INIT: > > case ODEBUG_STATE_INACTIVE: > > obj->state = ODEBUG_STATE_ACTIVE; > > - ret = 0; > > break; > > - > > case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "activate"); > > - ret = debug_object_fixup(descr->fixup_activate, addr, state); > > - return ret ? 0 : -EINVAL; > > - > > case ODEBUG_STATE_DESTROYED: > > - print_object = true; > > - ret = -EINVAL; > > + o = *obj; > > + obj = NULL; > > break; > > default: > > - ret = 0; > > break; > > } > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (print_object) > > - debug_print_object(obj, "activate"); > > - return ret; > > + } else { > > + o.object = addr; > > + o.state = ODEBUG_STATE_NOTAVAILABLE; > > + o.descr = descr; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - /* If NULL the allocation has hit OOM */ > > - if (!obj) { > > - debug_objects_oom(); > > + if (obj) > > return 0; > > - } > > - /* Object is neither static nor tracked. It's not initialized */ > > debug_print_object(&o, "activate"); > > - ret = debug_object_fixup(descr->fixup_activate, addr, ODEBUG_STATE_NOTAVAILABLE); > > - return ret ? 0 : -EINVAL; > > + > > + switch (o.state) { > > + case ODEBUG_STATE_ACTIVE: > > + case ODEBUG_STATE_NOTAVAILABLE: > > + if (debug_object_fixup(descr->fixup_activate, addr, o.state)) > > + return 0; > > + fallthrough; > > + default: > > + return -EINVAL; > > + } > > } > > EXPORT_SYMBOL_GPL(debug_object_activate); > > @@ -771,9 +761,8 @@ EXPORT_SYMBOL_GPL(debug_object_activate); > > void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > > { > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - bool print_object = false; > > if (!debug_objects_enabled) > > return; > > @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > > case ODEBUG_STATE_INIT: > > case ODEBUG_STATE_INACTIVE: > > case ODEBUG_STATE_ACTIVE: > > - if (!obj->astate) > > + if (!obj->astate) { > > obj->state = ODEBUG_STATE_INACTIVE; > > - else > > - print_object = true; > > - break; > > - > > + break; > > + } > > + fallthrough; > > case ODEBUG_STATE_DESTROYED: > > - print_object = true; > > + o = *obj; > > + obj = NULL; > > break; > > default: > > break; > > } > > + } else { > > + o.object = addr; > > + o.state = ODEBUG_STATE_NOTAVAILABLE; > > + o.descr = descr; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (!obj) { > > - struct debug_obj o = { .object = addr, > > - .state = ODEBUG_STATE_NOTAVAILABLE, > > - .descr = descr }; > > + if (!obj) > > debug_print_object(&o, "deactivate"); > > - } else if (print_object) { > > - debug_print_object(obj, "deactivate"); > > - } > > } > > EXPORT_SYMBOL_GPL(debug_object_deactivate); > > @@ -822,11 +810,9 @@ EXPORT_SYMBOL_GPL(debug_object_deactivate); > > */ > > void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > > { > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - bool print_object = false; > > if (!debug_objects_enabled) > > return; > > @@ -836,8 +822,10 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > > - if (!obj) > > - goto out_unlock; > > + if (!obj) { > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + return; > > + } > > switch (obj->state) { > > case ODEBUG_STATE_NONE: > > @@ -846,22 +834,23 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > > obj->state = ODEBUG_STATE_DESTROYED; > > break; > > case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "destroy"); > > - debug_object_fixup(descr->fixup_destroy, addr, state); > > - return; > > - > > case ODEBUG_STATE_DESTROYED: > > - print_object = true; > > + o = *obj; > > + obj = NULL; > > break; > > default: > > break; > > } > > -out_unlock: > > + > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (print_object) > > - debug_print_object(obj, "destroy"); > > + > > + if (obj) > > + return; > > + > > + debug_print_object(&o, "destroy"); > > + > > + if (o.state == ODEBUG_STATE_ACTIVE) > > + debug_object_fixup(descr->fixup_destroy, addr, o.state); > > } > > EXPORT_SYMBOL_GPL(debug_object_destroy); > > @@ -872,9 +861,8 @@ EXPORT_SYMBOL_GPL(debug_object_destroy); > > */ > > void debug_object_free(void *addr, const struct debug_obj_descr *descr) > > { > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > if (!debug_objects_enabled) > > @@ -885,24 +873,29 @@ void debug_object_free(void *addr, const struct debug_obj_descr *descr) > > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > > - if (!obj) > > - goto out_unlock; > > + if (!obj) { > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + return; > > + } > > switch (obj->state) { > > case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "free"); > > - debug_object_fixup(descr->fixup_free, addr, state); > > - return; > > + o = *obj; > > + obj = NULL; > > + break; > > default: > > hlist_del(&obj->node); > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > + } > > + > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + > > + if (obj) { > > free_object(obj); > > return; > > } > > -out_unlock: > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > + > > + debug_print_object(&o, "free"); > > + debug_object_fixup(descr->fixup_free, addr, o.state); > > } > > EXPORT_SYMBOL_GPL(debug_object_free); > > @@ -955,9 +948,8 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > > unsigned int expect, unsigned int next) > > { > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - bool print_object = false; > > if (!debug_objects_enabled) > > return; > > @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > > if (obj) { > > switch (obj->state) { > > case ODEBUG_STATE_ACTIVE: > > - if (obj->astate == expect) > > + if (obj->astate == expect) { > > obj->astate = next; > > - else > > - print_object = true; > > - break; > > - > > + break; > > + } > > + fallthrough; > > default: > > - print_object = true; > > + o = *obj; > > + obj = NULL; > > break; > > } > > + } else { > > + o.object = addr; > > + o.state = ODEBUG_STATE_NOTAVAILABLE; > > + o.descr = descr; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (!obj) { > > - struct debug_obj o = { .object = addr, > > - .state = ODEBUG_STATE_NOTAVAILABLE, > > - .descr = descr }; > > + if (!obj) > > debug_print_object(&o, "active_state"); > > - } else if (print_object) { > > - debug_print_object(obj, "active_state"); > > - } > > } > > EXPORT_SYMBOL_GPL(debug_object_active_state); > > @@ -999,11 +990,9 @@ EXPORT_SYMBOL_GPL(debug_object_active_state); > > static void __debug_check_no_obj_freed(const void *address, unsigned long size) > > { > > unsigned long flags, oaddr, saddr, eaddr, paddr, chunks; > > - const struct debug_obj_descr *descr; > > - enum debug_obj_state state; > > struct debug_bucket *db; > > struct hlist_node *tmp; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > int cnt, objs_checked = 0; > > saddr = (unsigned long) address; > > @@ -1026,12 +1015,11 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size) > > switch (obj->state) { > > case ODEBUG_STATE_ACTIVE: > > - descr = obj->descr; > > - state = obj->state; > > + o = *obj; > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "free"); > > - debug_object_fixup(descr->fixup_free, > > - (void *) oaddr, state); > > + debug_print_object(&o, "free"); > > + debug_object_fixup(o.descr->fixup_free, > > + (void *) oaddr, o.state); > > goto repeat; > > default: > > hlist_del(&obj->node); ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2] debugobjects: stop accessing objects after releasing spinlock @ 2023-10-10 12:10 ` Andi Shyti 0 siblings, 0 replies; 15+ messages in thread From: Andi Shyti @ 2023-10-10 12:10 UTC (permalink / raw) To: Andrzej Hajda Cc: linux-kernel, intel-gfx, linux-mm, Thomas Gleixner, Andi Shyti, Nirmoy Das, Janusz Krzysztofik Hi Andrzej, On Tue, Oct 10, 2023 at 02:02:54PM +0200, Andrzej Hajda wrote: > On 25.09.2023 15:13, Andrzej Hajda wrote: > > After spinlock release object can be modified/freed by concurrent thread. > > Using it in such case is error prone, even for printing object state. > > To avoid such situation local copy of the object is created if necessary. > > > > Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com> > > --- > > v2: add missing switch breaks > > --- > > Ping, any volunteer to review? ops... sorry... this slipped from my review list. Will look at it soon Andi > Regards > Andrzej > > > > > > lib/debugobjects.c | 206 +++++++++++++++++++++------------------------ > > 1 file changed, 97 insertions(+), 109 deletions(-) > > > > diff --git a/lib/debugobjects.c b/lib/debugobjects.c > > index a517256a270b71..3afff2f668fc1e 100644 > > --- a/lib/debugobjects.c > > +++ b/lib/debugobjects.c > > @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) > > static void > > __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) > > { > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > debug_objects_fill_pool(); > > @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack > > case ODEBUG_STATE_INACTIVE: > > obj->state = ODEBUG_STATE_INIT; > > break; > > - > > - case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "init"); > > - debug_object_fixup(descr->fixup_init, addr, state); > > - return; > > - > > - case ODEBUG_STATE_DESTROYED: > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "init"); > > - return; > > default: > > - break; > > + o = *obj; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > + > > + if (obj) > > + return; > > + > > + debug_print_object(&o, "init"); > > + if (o.state == ODEBUG_STATE_ACTIVE) > > + debug_object_fixup(descr->fixup_init, addr, o.state); > > } > > /** > > @@ -700,12 +695,9 @@ EXPORT_SYMBOL_GPL(debug_object_init_on_stack); > > */ > > int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > > { > > - struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - int ret; > > if (!debug_objects_enabled) > > return 0; > > @@ -717,49 +709,47 @@ int debug_object_activate(void *addr, const struct debug_obj_descr *descr) > > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object_or_alloc(addr, db, descr, false, true); > > - if (likely(!IS_ERR_OR_NULL(obj))) { > > - bool print_object = false; > > - > > + if (unlikely(!obj)) { > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + debug_objects_oom(); > > + return 0; > > + } else if (likely(!IS_ERR(obj))) { > > switch (obj->state) { > > case ODEBUG_STATE_INIT: > > case ODEBUG_STATE_INACTIVE: > > obj->state = ODEBUG_STATE_ACTIVE; > > - ret = 0; > > break; > > - > > case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "activate"); > > - ret = debug_object_fixup(descr->fixup_activate, addr, state); > > - return ret ? 0 : -EINVAL; > > - > > case ODEBUG_STATE_DESTROYED: > > - print_object = true; > > - ret = -EINVAL; > > + o = *obj; > > + obj = NULL; > > break; > > default: > > - ret = 0; > > break; > > } > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (print_object) > > - debug_print_object(obj, "activate"); > > - return ret; > > + } else { > > + o.object = addr; > > + o.state = ODEBUG_STATE_NOTAVAILABLE; > > + o.descr = descr; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - /* If NULL the allocation has hit OOM */ > > - if (!obj) { > > - debug_objects_oom(); > > + if (obj) > > return 0; > > - } > > - /* Object is neither static nor tracked. It's not initialized */ > > debug_print_object(&o, "activate"); > > - ret = debug_object_fixup(descr->fixup_activate, addr, ODEBUG_STATE_NOTAVAILABLE); > > - return ret ? 0 : -EINVAL; > > + > > + switch (o.state) { > > + case ODEBUG_STATE_ACTIVE: > > + case ODEBUG_STATE_NOTAVAILABLE: > > + if (debug_object_fixup(descr->fixup_activate, addr, o.state)) > > + return 0; > > + fallthrough; > > + default: > > + return -EINVAL; > > + } > > } > > EXPORT_SYMBOL_GPL(debug_object_activate); > > @@ -771,9 +761,8 @@ EXPORT_SYMBOL_GPL(debug_object_activate); > > void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > > { > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - bool print_object = false; > > if (!debug_objects_enabled) > > return; > > @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > > case ODEBUG_STATE_INIT: > > case ODEBUG_STATE_INACTIVE: > > case ODEBUG_STATE_ACTIVE: > > - if (!obj->astate) > > + if (!obj->astate) { > > obj->state = ODEBUG_STATE_INACTIVE; > > - else > > - print_object = true; > > - break; > > - > > + break; > > + } > > + fallthrough; > > case ODEBUG_STATE_DESTROYED: > > - print_object = true; > > + o = *obj; > > + obj = NULL; > > break; > > default: > > break; > > } > > + } else { > > + o.object = addr; > > + o.state = ODEBUG_STATE_NOTAVAILABLE; > > + o.descr = descr; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (!obj) { > > - struct debug_obj o = { .object = addr, > > - .state = ODEBUG_STATE_NOTAVAILABLE, > > - .descr = descr }; > > + if (!obj) > > debug_print_object(&o, "deactivate"); > > - } else if (print_object) { > > - debug_print_object(obj, "deactivate"); > > - } > > } > > EXPORT_SYMBOL_GPL(debug_object_deactivate); > > @@ -822,11 +810,9 @@ EXPORT_SYMBOL_GPL(debug_object_deactivate); > > */ > > void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > > { > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - bool print_object = false; > > if (!debug_objects_enabled) > > return; > > @@ -836,8 +822,10 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > > - if (!obj) > > - goto out_unlock; > > + if (!obj) { > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + return; > > + } > > switch (obj->state) { > > case ODEBUG_STATE_NONE: > > @@ -846,22 +834,23 @@ void debug_object_destroy(void *addr, const struct debug_obj_descr *descr) > > obj->state = ODEBUG_STATE_DESTROYED; > > break; > > case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "destroy"); > > - debug_object_fixup(descr->fixup_destroy, addr, state); > > - return; > > - > > case ODEBUG_STATE_DESTROYED: > > - print_object = true; > > + o = *obj; > > + obj = NULL; > > break; > > default: > > break; > > } > > -out_unlock: > > + > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (print_object) > > - debug_print_object(obj, "destroy"); > > + > > + if (obj) > > + return; > > + > > + debug_print_object(&o, "destroy"); > > + > > + if (o.state == ODEBUG_STATE_ACTIVE) > > + debug_object_fixup(descr->fixup_destroy, addr, o.state); > > } > > EXPORT_SYMBOL_GPL(debug_object_destroy); > > @@ -872,9 +861,8 @@ EXPORT_SYMBOL_GPL(debug_object_destroy); > > */ > > void debug_object_free(void *addr, const struct debug_obj_descr *descr) > > { > > - enum debug_obj_state state; > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > if (!debug_objects_enabled) > > @@ -885,24 +873,29 @@ void debug_object_free(void *addr, const struct debug_obj_descr *descr) > > raw_spin_lock_irqsave(&db->lock, flags); > > obj = lookup_object(addr, db); > > - if (!obj) > > - goto out_unlock; > > + if (!obj) { > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + return; > > + } > > switch (obj->state) { > > case ODEBUG_STATE_ACTIVE: > > - state = obj->state; > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "free"); > > - debug_object_fixup(descr->fixup_free, addr, state); > > - return; > > + o = *obj; > > + obj = NULL; > > + break; > > default: > > hlist_del(&obj->node); > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > + } > > + > > + raw_spin_unlock_irqrestore(&db->lock, flags); > > + > > + if (obj) { > > free_object(obj); > > return; > > } > > -out_unlock: > > - raw_spin_unlock_irqrestore(&db->lock, flags); > > + > > + debug_print_object(&o, "free"); > > + debug_object_fixup(descr->fixup_free, addr, o.state); > > } > > EXPORT_SYMBOL_GPL(debug_object_free); > > @@ -955,9 +948,8 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > > unsigned int expect, unsigned int next) > > { > > struct debug_bucket *db; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > unsigned long flags; > > - bool print_object = false; > > if (!debug_objects_enabled) > > return; > > @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > > if (obj) { > > switch (obj->state) { > > case ODEBUG_STATE_ACTIVE: > > - if (obj->astate == expect) > > + if (obj->astate == expect) { > > obj->astate = next; > > - else > > - print_object = true; > > - break; > > - > > + break; > > + } > > + fallthrough; > > default: > > - print_object = true; > > + o = *obj; > > + obj = NULL; > > break; > > } > > + } else { > > + o.object = addr; > > + o.state = ODEBUG_STATE_NOTAVAILABLE; > > + o.descr = descr; > > + obj = NULL; > > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - if (!obj) { > > - struct debug_obj o = { .object = addr, > > - .state = ODEBUG_STATE_NOTAVAILABLE, > > - .descr = descr }; > > + if (!obj) > > debug_print_object(&o, "active_state"); > > - } else if (print_object) { > > - debug_print_object(obj, "active_state"); > > - } > > } > > EXPORT_SYMBOL_GPL(debug_object_active_state); > > @@ -999,11 +990,9 @@ EXPORT_SYMBOL_GPL(debug_object_active_state); > > static void __debug_check_no_obj_freed(const void *address, unsigned long size) > > { > > unsigned long flags, oaddr, saddr, eaddr, paddr, chunks; > > - const struct debug_obj_descr *descr; > > - enum debug_obj_state state; > > struct debug_bucket *db; > > struct hlist_node *tmp; > > - struct debug_obj *obj; > > + struct debug_obj *obj, o; > > int cnt, objs_checked = 0; > > saddr = (unsigned long) address; > > @@ -1026,12 +1015,11 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size) > > switch (obj->state) { > > case ODEBUG_STATE_ACTIVE: > > - descr = obj->descr; > > - state = obj->state; > > + o = *obj; > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - debug_print_object(obj, "free"); > > - debug_object_fixup(descr->fixup_free, > > - (void *) oaddr, state); > > + debug_print_object(&o, "free"); > > + debug_object_fixup(o.descr->fixup_free, > > + (void *) oaddr, o.state); > > goto repeat; > > default: > > hlist_del(&obj->node); ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock 2023-09-25 13:13 ` Andrzej Hajda @ 2023-10-13 13:15 ` Thomas Gleixner -1 siblings, 0 replies; 15+ messages in thread From: Thomas Gleixner @ 2023-10-13 13:15 UTC (permalink / raw) To: Andrzej Hajda, linux-kernel, intel-gfx, linux-mm Cc: Andrzej Hajda, Nirmoy Das On Mon, Sep 25 2023 at 15:13, Andrzej Hajda wrote: > After spinlock release object can be modified/freed by concurrent thread. > Using it in such case is error prone, even for printing object state. It cannot be freed. If that happens then the calling code will have an UAF problem on the tracked item too. If there is a concurrent modification then again, the calling code is lacking serialization on the tracked object. debugobject fundamentally relies on the call site being consistent simply because it _cannot_ invoke the fixup callbacks with the hash bucket lock held. What's the actualy problem you are trying to solve here. The changelog does not explain anything except of handwaving about modified/freed. Thanks, tglx ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2] debugobjects: stop accessing objects after releasing spinlock @ 2023-10-13 13:15 ` Thomas Gleixner 0 siblings, 0 replies; 15+ messages in thread From: Thomas Gleixner @ 2023-10-13 13:15 UTC (permalink / raw) To: Andrzej Hajda, linux-kernel, intel-gfx, linux-mm Cc: Andrzej Hajda, Andi Shyti, Nirmoy Das, Janusz Krzysztofik On Mon, Sep 25 2023 at 15:13, Andrzej Hajda wrote: > After spinlock release object can be modified/freed by concurrent thread. > Using it in such case is error prone, even for printing object state. It cannot be freed. If that happens then the calling code will have an UAF problem on the tracked item too. If there is a concurrent modification then again, the calling code is lacking serialization on the tracked object. debugobject fundamentally relies on the call site being consistent simply because it _cannot_ invoke the fixup callbacks with the hash bucket lock held. What's the actualy problem you are trying to solve here. The changelog does not explain anything except of handwaving about modified/freed. Thanks, tglx ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock 2023-10-13 13:15 ` Thomas Gleixner (?) @ 2023-10-19 10:31 ` Andrzej Hajda 2023-10-23 16:11 ` Thomas Gleixner -1 siblings, 1 reply; 15+ messages in thread From: Andrzej Hajda @ 2023-10-19 10:31 UTC (permalink / raw) To: Thomas Gleixner, linux-kernel, intel-gfx, linux-mm; +Cc: Nirmoy Das On 13.10.2023 15:15, Thomas Gleixner wrote: > On Mon, Sep 25 2023 at 15:13, Andrzej Hajda wrote: >> After spinlock release object can be modified/freed by concurrent thread. >> Using it in such case is error prone, even for printing object state. > > It cannot be freed. If that happens then the calling code will have an > UAF problem on the tracked item too. Yes, and I have assumed that debugobjects are created also for detecting UAFs. They should be able to handle/detect 'issues due to incorrectly serialized concurrent accesses' scenarios as well, at least some of them. And even if it cannot recover it should at least provide reliable reporting. Now we can have scenario: 1. Thread tries to deactivate destroyed object, debugobjects detects it, spin lock is released, thread is preempted. 2. Other thread frees debugobject, then allocates new one on the same memory location, ie 'obj' variable from 1st thread point to it - it is possible because there is no locking. 3. Then preemption occurs, and 1st thread reports error for wrong object. This seems the most drastic for me, but also with lowest chances to happen due to delayed freeing, but there are also other more probable scenarios when we print the same object but in state different from the one when debugobject detected issue, due to modification by concurrent thread. > > If there is a concurrent modification then again, the calling code is > lacking serialization on the tracked object. > > debugobject fundamentally relies on the call site being consistent > simply because it _cannot_ invoke the fixup callbacks with the hash > bucket lock held. Hmm, if call site is consistent then 'fixup' seems unnecessary, together with debugobjects. I guess 'fixup' users should take care of locking on they own in such case, as it is currently, nothing changed. > > What's the actualy problem you are trying to solve here. The changelog > does not explain anything except of handwaving about modified/freed. Presented above. Regards Andrzej > > Thanks, > > tglx ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock 2023-10-19 10:31 ` [Intel-gfx] " Andrzej Hajda @ 2023-10-23 16:11 ` Thomas Gleixner 0 siblings, 0 replies; 15+ messages in thread From: Thomas Gleixner @ 2023-10-23 16:11 UTC (permalink / raw) To: Andrzej Hajda, linux-kernel, intel-gfx, linux-mm; +Cc: Nirmoy Das On Thu, Oct 19 2023 at 12:31, Andrzej Hajda wrote: > On 13.10.2023 15:15, Thomas Gleixner wrote: >> It cannot be freed. If that happens then the calling code will have an >> UAF problem on the tracked item too. > > Yes, and I have assumed that debugobjects are created also for detecting > UAFs. Kinda. > They should be able to handle/detect 'issues due to incorrectly > serialized concurrent accesses' scenarios as well, at least some of > them. And even if it cannot recover it should at least provide reliable > reporting. Fair enough. > Now we can have scenario: > 1. Thread tries to deactivate destroyed object, debugobjects detects it, > spin lock is released, thread is preempted. > 2. Other thread frees debugobject, then allocates new one on the same > memory location, ie 'obj' variable from 1st thread point to it - it is > possible because there is no locking. > 3. Then preemption occurs, and 1st thread reports error for wrong object. > > This seems the most drastic for me, but also with lowest chances to > happen due to delayed freeing, but there are also other more probable > scenarios when we print the same object but in state different from the > one when debugobject detected issue, due to modification by concurrent > thread. Now I understand what you mean. This information should be in the changelog, no? Let me stare at the patch once more. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock 2023-09-25 13:13 ` Andrzej Hajda @ 2023-10-24 12:56 ` Thomas Gleixner -1 siblings, 0 replies; 15+ messages in thread From: Thomas Gleixner @ 2023-10-24 12:56 UTC (permalink / raw) To: Andrzej Hajda, linux-kernel, intel-gfx, linux-mm Cc: Andrzej Hajda, Nirmoy Das On Mon, Sep 25 2023 at 15:13, Andrzej Hajda wrote: > @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) > static void > __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > > debug_objects_fill_pool(); > @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack > case ODEBUG_STATE_INACTIVE: > obj->state = ODEBUG_STATE_INIT; > break; > - > - case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - debug_object_fixup(descr->fixup_init, addr, state); > - return; > - > - case ODEBUG_STATE_DESTROYED: > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - return; > default: > - break; > + o = *obj; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > + > + if (obj) > + return; Hmm. I'd rather write is this way: case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: obj->state = ODEBUG_STATE_INIT; raw_spin_unlock_irqrestore(&db->lock, flags); return; default: break; } o = *obj; raw_spin_unlock_irqrestore(&db->lock, flags); debug_print_object(&o, "init"); if (o.state == ODEBUG_STATE_ACTIVE) debug_object_fixup(descr->fixup_init, addr, o.state); This spares the 'obj' pointer modification and the conditional. The extra raw_spin_unlock_irqrestore() is not the end of the world. > void debug_object_activate(void *addr, const struct debug_obj_descr *descr) ... > default: > - ret = 0; > break; > } > - raw_spin_unlock_irqrestore(&db->lock, flags); > - if (print_object) > - debug_print_object(obj, "activate"); > - return ret; > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; Hrmm. Just keep the struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; around and get rid of this else clause. > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - /* If NULL the allocation has hit OOM */ > - if (!obj) { > - debug_objects_oom(); > + if (obj) > return 0; Plus a similar change as above to get rid of this conditional and just have the failure path here. > @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > case ODEBUG_STATE_INIT: > case ODEBUG_STATE_INACTIVE: > case ODEBUG_STATE_ACTIVE: > - if (!obj->astate) > + if (!obj->astate) { > obj->state = ODEBUG_STATE_INACTIVE; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > case ODEBUG_STATE_DESTROYED: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > default: > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } Same here. struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; ... if (obj) { switch (obj->state) { case ODEBUG_STATE_DESTROYED: o = *obj; break; case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: case ODEBUG_STATE_ACTIVE: if (obj->astate) { o = *obj; break; } obj->state = ODEBUG_STATE_INACTIVE; fallthrough; default: raw_spin_unlock_irqrestore(&db->lock, flags); return; } } raw_spin_unlock_irqrestore(&db->lock, flags); debug_print_object(&o, "deactivate"); Hmm? > @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > if (obj) { > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - if (obj->astate == expect) > + if (obj->astate == expect) { > obj->astate = next; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > default: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } Same pattern here. Thanks, tglx ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2] debugobjects: stop accessing objects after releasing spinlock @ 2023-10-24 12:56 ` Thomas Gleixner 0 siblings, 0 replies; 15+ messages in thread From: Thomas Gleixner @ 2023-10-24 12:56 UTC (permalink / raw) To: Andrzej Hajda, linux-kernel, intel-gfx, linux-mm Cc: Andrzej Hajda, Andi Shyti, Nirmoy Das, Janusz Krzysztofik On Mon, Sep 25 2023 at 15:13, Andrzej Hajda wrote: > @@ -620,9 +620,8 @@ static void debug_objects_fill_pool(void) > static void > __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack) > { > - enum debug_obj_state state; > struct debug_bucket *db; > - struct debug_obj *obj; > + struct debug_obj *obj, o; > unsigned long flags; > > debug_objects_fill_pool(); > @@ -644,23 +643,19 @@ __debug_object_init(void *addr, const struct debug_obj_descr *descr, int onstack > case ODEBUG_STATE_INACTIVE: > obj->state = ODEBUG_STATE_INIT; > break; > - > - case ODEBUG_STATE_ACTIVE: > - state = obj->state; > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - debug_object_fixup(descr->fixup_init, addr, state); > - return; > - > - case ODEBUG_STATE_DESTROYED: > - raw_spin_unlock_irqrestore(&db->lock, flags); > - debug_print_object(obj, "init"); > - return; > default: > - break; > + o = *obj; > + obj = NULL; > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > + > + if (obj) > + return; Hmm. I'd rather write is this way: case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: obj->state = ODEBUG_STATE_INIT; raw_spin_unlock_irqrestore(&db->lock, flags); return; default: break; } o = *obj; raw_spin_unlock_irqrestore(&db->lock, flags); debug_print_object(&o, "init"); if (o.state == ODEBUG_STATE_ACTIVE) debug_object_fixup(descr->fixup_init, addr, o.state); This spares the 'obj' pointer modification and the conditional. The extra raw_spin_unlock_irqrestore() is not the end of the world. > void debug_object_activate(void *addr, const struct debug_obj_descr *descr) ... > default: > - ret = 0; > break; > } > - raw_spin_unlock_irqrestore(&db->lock, flags); > - if (print_object) > - debug_print_object(obj, "activate"); > - return ret; > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; Hrmm. Just keep the struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; around and get rid of this else clause. > } > > raw_spin_unlock_irqrestore(&db->lock, flags); > > - /* If NULL the allocation has hit OOM */ > - if (!obj) { > - debug_objects_oom(); > + if (obj) > return 0; Plus a similar change as above to get rid of this conditional and just have the failure path here. > @@ -788,30 +777,29 @@ void debug_object_deactivate(void *addr, const struct debug_obj_descr *descr) > case ODEBUG_STATE_INIT: > case ODEBUG_STATE_INACTIVE: > case ODEBUG_STATE_ACTIVE: > - if (!obj->astate) > + if (!obj->astate) { > obj->state = ODEBUG_STATE_INACTIVE; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > case ODEBUG_STATE_DESTROYED: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > default: > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } Same here. struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; ... if (obj) { switch (obj->state) { case ODEBUG_STATE_DESTROYED: o = *obj; break; case ODEBUG_STATE_INIT: case ODEBUG_STATE_INACTIVE: case ODEBUG_STATE_ACTIVE: if (obj->astate) { o = *obj; break; } obj->state = ODEBUG_STATE_INACTIVE; fallthrough; default: raw_spin_unlock_irqrestore(&db->lock, flags); return; } } raw_spin_unlock_irqrestore(&db->lock, flags); debug_print_object(&o, "deactivate"); Hmm? > @@ -970,28 +962,27 @@ debug_object_active_state(void *addr, const struct debug_obj_descr *descr, > if (obj) { > switch (obj->state) { > case ODEBUG_STATE_ACTIVE: > - if (obj->astate == expect) > + if (obj->astate == expect) { > obj->astate = next; > - else > - print_object = true; > - break; > - > + break; > + } > + fallthrough; > default: > - print_object = true; > + o = *obj; > + obj = NULL; > break; > } > + } else { > + o.object = addr; > + o.state = ODEBUG_STATE_NOTAVAILABLE; > + o.descr = descr; > + obj = NULL; > } Same pattern here. Thanks, tglx ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2023-10-24 12:56 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-09-25 13:13 [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock Andrzej Hajda 2023-09-25 13:13 ` Andrzej Hajda 2023-09-26 2:03 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for debugobjects: stop accessing objects after releasing spinlock (rev2) Patchwork 2023-09-26 2:16 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork 2023-09-26 9:50 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork 2023-10-10 12:02 ` [Intel-gfx] [PATCH v2] debugobjects: stop accessing objects after releasing spinlock Andrzej Hajda 2023-10-10 12:02 ` Andrzej Hajda 2023-10-10 12:10 ` [Intel-gfx] " Andi Shyti 2023-10-10 12:10 ` Andi Shyti 2023-10-13 13:15 ` [Intel-gfx] " Thomas Gleixner 2023-10-13 13:15 ` Thomas Gleixner 2023-10-19 10:31 ` [Intel-gfx] " Andrzej Hajda 2023-10-23 16:11 ` Thomas Gleixner 2023-10-24 12:56 ` Thomas Gleixner 2023-10-24 12:56 ` Thomas Gleixner
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.