Re: [PATCH 1/2] hung_task: replace blocker_mutex with encoded blocker

From: Peter Zijlstra

Date: Wed Mar 25 2026 - 09:59:46 EST



I still fully and totally detest all of this :/

On Wed, Mar 25, 2026 at 09:33:22PM +0800, ruipengqi wrote:

> diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
> index 555e2b3a665a..61fa97da7989 100644
> --- a/kernel/locking/mutex.c
> +++ b/kernel/locking/mutex.c
> @@ -29,6 +29,7 @@
> #include <linux/interrupt.h>
> #include <linux/debug_locks.h>
> #include <linux/osq_lock.h>
> +#include <linux/hung_task.h>
>
> #define CREATE_TRACE_POINTS
> #include <trace/events/lock.h>
> @@ -191,7 +192,7 @@ __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter,
> struct list_head *list)
> {
> #ifdef CONFIG_DETECT_HUNG_TASK_BLOCKER
> - WRITE_ONCE(current->blocker_mutex, lock);
> + hung_task_set_blocker(lock, BLOCKER_TYPE_MUTEX);
> #endif
> debug_mutex_add_waiter(lock, waiter, current);
>
> @@ -209,7 +210,7 @@ __mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter)
>
> debug_mutex_remove_waiter(lock, waiter, current);
> #ifdef CONFIG_DETECT_HUNG_TASK_BLOCKER
> - WRITE_ONCE(current->blocker_mutex, NULL);
> + hung_task_clear_blocker();
> #endif

Your functions have stubs, you can get rid of those ugly #ifdefs