Re: [PATCH] kthread: Rename user_mode_thread() to kmuser_thread()

From: Eric W. Biederman
Date: Mon Sep 11 2023 - 22:34:51 EST


Huacai Chen <chenhuacai@xxxxxxxxxx> writes:

> Hi, all,
>
> Friendly ping again?
>
>
> Huacai
>
> On Sun, Jul 23, 2023 at 10:13 PM Huacai Chen <chenhuacai@xxxxxxxxxx> wrote:
>>
>> Hi, Eric,
>>
>> On Tue, Jul 18, 2023 at 8:43 PM Huacai Chen <chenhuacai@xxxxxxxxxx> wrote:
>> >
>> > Hi, Luis,
>> >
>> > On Sat, Jul 1, 2023 at 7:25 AM Luis Chamberlain <mcgrof@xxxxxxxxxx> wrote:
>> > >
>> > > On Sun, Jun 25, 2023 at 04:55:33PM +0800, Huacai Chen wrote:
>> > > > Friendly ping?
>> > >
>> > > You want to cc the folks who Nacked your patch. Until then, this
>> > > probably can't go further.
>> > Thank you very much. Eric and Andrew are already in the CC list, so
>> > add Thomas now.
>> >
>> > My brain is a little old-fashioned so I insisted that "a thread
>> > without mm_struct should be a kernel thread" in the previous patch.
>> > Unfortunately this makes Eric and Thomas unhappy, I'm very sorry for
>> > that.
>> >
>> > During the discussion of the previous patch I know I made some
>> > mistakes about some basic concepts, but I also found the name
>> > "user_mode_thread()" is somewhat confusing. I think rename it to
>> > kmuser_thread() is better, because:
>> > 1, it identify init and umh as user threads;
>> > 2, it points out that init and umh are special user threads that run
>> > in kernel mode before loading a user program.
>> >
>> > Sorry for my rudeness again.
>> Excuse me, but could you please tell me what your opinion is. In my
>> opinion a typical user thread is created by
>> pthread_create()/sys_clone(), it is better to distinguish typical user
>> threads from init and umh.

If we want to emphasize that it is a kernel concept I am happy with
renaming user_mode_thread to user_mode_task. That is more accurate.

But all threads from the kernel perspective are tasks. Further
all threads have times when they run code in the kernel (aka system
calls) and times when they run code in userspace.

Linux kernel tasks created with user_mode_thread() are exactly like
other user mode tasks, and have all treated exactly the same was by the
system as any the tasks created by pthread_create() and sys_clone().

The only oddity is that there is no user mode code to execute until
after execve is called.

When running code in the kernel, user space threads never logically
do not use the user space page tables.

They are different in some significant ways from tasks created with
kernel_thread(). Tasks created with kernel_thread do not support
calling execve, among other things.

But deeply and fundamentally I think you are trying to make a
distinction that is not there. All user space threads run code
in the kernel before they run code in userspace. Most often
it is from the system calls fork/clone/exec. For init and umh it
is effectively a special dedicated system call that includes
an execve.

Let me ask what difference are you trying to high light that callers
of user_mode_thread need to be aware of? What problem in thinking
do you think that the name user_mode_thread creates? I am asking
because I might just be missing your point.

Eric