Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:
- [High] Missing `sdt_might_sleep_end()` cleanup in the error path of wait 
macros (e.g., `___wait_var_event`, `___wait_event`, `___swait_event`) bypasses 
`dept_clean_stage()`, leaking the staged wait event state and corrupting DEPT 
tracking.
--

commit cf04720896ab037609320947c88e8faa57dbddd7
Author: Byungchul Park <[email protected]>

dept: apply timeout consideration to hashed-waitqueue wait

Now that CONFIG_DEPT_AGGRESSIVE_TIMEOUT_WAIT was introduced, apply the
consideration to hashed-waitqueue wait, assuming an input 'ret' in
___wait_var_event() macro is used as a timeout value.

> diff --git a/include/linux/wait_bit.h b/include/linux/wait_bit.h
> index 179a616ad245a..9885ac4e1ded5 100644
> --- a/include/linux/wait_bit.h
> +++ b/include/linux/wait_bit.h
> @@ -258,7 +258,7 @@ extern wait_queue_head_t *__var_waitqueue(void *p);
>       struct wait_bit_queue_entry __wbq_entry;                        \
>       long __ret = ret; /* explicit shadow */                         \
>                                                                       \
> -     sdt_might_sleep_start(NULL);                                    \
> +     sdt_might_sleep_start_timeout(NULL, __ret);                     \

[Severity: High]
Does this error path properly clean up the dept wait state?

Lower in the ___wait_var_event() macro, if a signal is received it jumps to
__out:

                if (___wait_is_interruptible(state) && __int) {         \
                        __ret = __int;                                  \
                        goto __out;                                     \
                }                                                       \
                
                ...
                
        sdt_might_sleep_end();                                          \
__out:  __ret;                                                          \

Because the goto __out branch skips sdt_might_sleep_end(), does it leave a 
dangling stage context in the dept subsystem's tracking graph?  

If the stage context remains populated, could a subsequent wait on the same
task be incorrectly seen as a nested stage, potentially corrupting dept
tracking or leading to false deadlock reports?

(Note: A similar goto __out pattern skipping sdt_might_sleep_end() also
exists in ___wait_event() in include/linux/wait.h and ___swait_event() in
include/linux/swait.h).

>       init_wait_var_entry(&__wbq_entry, var,                          \
>                           exclusive ? WQ_FLAG_EXCLUSIVE : 0);         \
>       for (;;) {                                                      \

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=19

Reply via email to