On 2020-10-27 07:03:38 [+0100], Mike Galbraith wrote: > On Mon, 2020-10-26 at 20:53 +0100, Sebastian Andrzej Siewior wrote: > > > > Could you try this, please? > > Nogo, first call of sched_setscheduler() is via kthread_create(). I > confirmed that nuking that (gratuitous user foot saving override) call > on top of moving sched_set_fifo() does shut it up, but that won't fly.
mkay. but this then, too. Let me try if I can figure out when this broke. diff --git a/kernel/kthread.c b/kernel/kthread.c index 3edaa380dc7b4..64d6afb127239 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -244,6 +244,7 @@ EXPORT_SYMBOL_GPL(kthread_parkme); static int kthread(void *_create) { /* Copy data: it's on kthread's stack */ + static const struct sched_param param = { .sched_priority = 0 }; struct kthread_create_info *create = _create; int (*threadfn)(void *data) = create->threadfn; void *data = create->data; @@ -273,6 +274,13 @@ static int kthread(void *_create) init_completion(&self->parked); current->vfork_done = &self->exited; + /* + * root may have changed our (kthreadd's) priority or CPU mask. + * The kernel thread should not inherit these properties. + */ + sched_setscheduler_nocheck(current, SCHED_NORMAL, ¶m); + set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_FLAG_KTHREAD)); + /* OK, tell user we're spawned, wait for stop or wakeup */ __set_current_state(TASK_UNINTERRUPTIBLE); create->result = current; @@ -370,7 +378,6 @@ struct task_struct *__kthread_create_on_node(int (*threadfn)(void *data), } task = create->result; if (!IS_ERR(task)) { - static const struct sched_param param = { .sched_priority = 0 }; char name[TASK_COMM_LEN]; /* @@ -379,13 +386,6 @@ struct task_struct *__kthread_create_on_node(int (*threadfn)(void *data), */ vsnprintf(name, sizeof(name), namefmt, args); set_task_comm(task, name); - /* - * root may have changed our (kthreadd's) priority or CPU mask. - * The kernel thread should not inherit these properties. - */ - sched_setscheduler_nocheck(task, SCHED_NORMAL, ¶m); - set_cpus_allowed_ptr(task, - housekeeping_cpumask(HK_FLAG_KTHREAD)); } kfree(create); return task; Sebastian