kthread_stop always returning -EINTR?

valdis.kletnieks at vt.edu valdis.kletnieks at vt.edu
Tue Jul 18 13:55:12 EDT 2017


On Tue, 18 Jul 2017 13:00:11 -0300, Martin Galvan said:
> Hi everyone! I'm doing a bit of testing on the Linux kthread functions, and h

> int function(void *data)
> {
>     printk(KERN_DEBUG "CPU: %u\n", smp_processor_id());
>
>     do_exit(0); /* Not sure if this is ok */
> }

Note that this will go bye-bye pretty much immediately.

>             /* Start the thread */
>             wake_up_process(thread);

Aaannnd... it's possibly gone already, before you get to the next line of code..

>             /* Wait for the thread function to complete */
>             result = kthread_stop(thread);

So it's going to be hard to stop a thread that's not there anymore. Note this
comment from kernel/kthreads.c:

/**
 * kthread_stop - stop a thread created by kthread_create().
 * @k: thread created by kthread_create().
 *
 * Sets kthread_should_stop() for @k to return true, wakes it, and
 * waits for it to exit. This can also be called after kthread_create()
 * instead of calling wake_up_process(): the thread will exit without
 * calling threadfn().
 *
 * If threadfn() may call do_exit() itself, the caller must ensure
 * task_struct can't go away.

Your function calls do_exit() itself.  It's surprising that your kernel
didn't explode when the tasx_struct went away.  Looking at the code of
kthread_stop, there's phenomenally little error checking (as most heavily-called
kernel functions tend to be).  It just assumes that 'thread' points at
a valid thread structure and runs with it, with the result that you get back
possibly random trash as 'result'.

Two important kernel concepts:  Locking and reference counting. Use them wisely.



-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 486 bytes
Desc: not available
Url : http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20170718/0074b7d3/attachment.bin 


More information about the Kernelnewbies mailing list