<br><div class="gmail_quote">On Wed, Feb 20, 2013 at 11:59 AM, Srinivas Ganji <span dir="ltr">&lt;<a href="mailto:srinivasganji.kernel@gmail.com" target="_blank">srinivasganji.kernel@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br><div class="gmail_quote"><div><div class="h5">On Tue, Feb 19, 2013 at 5:02 PM, Kevin Wilson <span dir="ltr">&lt;<a href="mailto:wkevils@gmail.com" target="_blank">wkevils@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi,<br>
<br>
Thanks about the info about ps.<br>
This raises two new questions:<br>
1)  The following code is a very basic kernel module (based on my<br>
previous code, removing somethings).<br>
I do not understand something:<br>
I call<br>
  /* sleep for a millisecond */<br>
    msleep(1);<br>
<div>    printk(&quot;calling do_exit\n&quot;);<br>
</div>    msleep(60000);<br>
<br>
In my understanding, after 1 millisecond, it should have been<br>
available to the scheduler, and after returning to the line after<br>
msleep(1), it should print &quot;calling do_exit&quot;. However,<br>
I see no such log message. Any ideas why ? can something be<br>
added to enable this ?<br>
<br>
2)How can I create a kernel thread so that it will be in<br>
TASK_INTERRUPTIBLE state ? there must be a way,<br>
since I see many kernel threads where ps shows &quot;S&quot; in the<br>
status coumn.<br>
<div><br>
<br>
struct task_struct *task;<br>
<br>
int thread_function(void *data)<br>
{<br>
    int exit_sig = SIGKILL;<br>
<br>
</div><div>    printk(&quot;in %s\n&quot;,__func__);<br>
</div>    /* sleep for a millisecond */<br>
    msleep(1);<br>
<div>    printk(&quot;calling do_exit\n&quot;);<br>
</div>    msleep(60000);<br>
<div>    do_exit(exit_sig);<br>
<br>
    return 0;<br>
}<br>
<br>
static int kernel_init(void)<br>
    {<br>
</div>    printk(&quot;in kernel_init\n&quot;);<br>
<div>    task = kthread_create(thread_function,NULL,&quot;MY_KERNEL_THREAD&quot;);<br>
    return 0;<br>
}<br>
<br>
static void kernel_exit(void)<br>
    {<br>
    printk(&quot;in kernel_exit\n&quot;);<br>
    kthread_stop(task);<br>
    }<br>
<br>
<br>
module_init(kernel_init);<br>
module_exit(kernel_exit);<br>
<br>
<br>
</div>rgs<br>
<div><div>Kevin<br>
<br></div></div></blockquote><div><br></div></div></div><div>After creating the kernel thread, you can use wake_up_process(task) call which will run your thread function.</div><div><br></div><div>Generally, when we create a kernel thread using kthread_create, </div>
</div></blockquote><div>the process is created in an unrunnable state. It will not start running until explicitly woken up via wake_up_process(). The kthread_create() followed by wake_up_process() is done by a single call kthread_run().</div>
<div><br></div><div>I hope this helps you.</div><div><br></div><div>Regards</div><div>Srinivas G. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote">
<div class="im">
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org" target="_blank">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</div></div></blockquote></div></div><br>
</blockquote></div><br>