Re: kthread_stop always returning -EINTR?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.



Attachment: pgpr8Ol9cAS4Q.pgp
Description: PGP signature

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux