<br>Hi Kshemendra,<div><br></div><div>I think I couldn&#39;t get my first question across clearly. My intent isn&#39;t to change do_fork()&#39;s implementation. That wont work for precisely the reason you mentioned.(Infact everything after the init process would end up blocked). </div>
<div><br></div><div>My question was more to explore if an existing running process can be explicitly taken off the runqueue once we have a pointer to its task_struct.</div><div><br></div><div>Thanks for the info on the second question. (Although what family of calls were you referring to by wait_interruptile()?)</div>
<div><br></div><div>Amit</div><div><br></div><div><br></div><div><div class="gmail_quote">On Mon, Sep 17, 2012 at 11:24 PM, Kshemendra KP <span dir="ltr">&lt;<a href="mailto:kshemendra@suphalaam.com" target="_blank">kshemendra@suphalaam.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><br>
<div class="gmail_quote"><div class="im">On Tue, Sep 18, 2012 at 9:32 AM, Amit Gupta <span dir="ltr">&lt;<a href="mailto:gupta.v.amit@gmail.com" target="_blank">gupta.v.amit@gmail.com</a>&gt;</span> wrote:<br>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote">Hi All, 
<div><br></div>
<div>I had a question about manipulating process state information in the kernel and am curious about the right way to go about it.</div>
<div>(I&#39;m just messing around with some stuff to try and understand the kernel better). I had 2 questions:</div>
<div><br></div>
<div>1. I&#39;m trying to create a process in the TASK_INTERRUPTIBLE state in the kernel. Since do_fork() creates a process/task that is ready to be scheduled, I was thinking what might be a good way to pull it off the runqueue/stop its execution after do_fork() returns?</div>


<div><br></div></blockquote>
<div> </div>
<div> </div>
</div><div>Assuming you do the change in the do_fork() so that new process moves to sleep queue</div>
<div>Whatever new process created made to TASK_INTERRUPTIBLE in the do fork, who will wakeup the new process. </div>
<div>If you just type &quot;ls&quot; commnad also it does not work as ls command calls  fork() + exec().  So your shell fork() and </div>
<div>moves to sleep queue. Similarly lot of fork+exec activities happen in the system will all move to sleep queue.  Many</div>
<div>deamons running on the system may do fork() or fork + exec() will stop working. </div><div class="im">
<div> </div>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote">
<div>2.I&#39;m curious if someone can explain the correct way to use the  &quot;set_task_state()&quot; macro. Its implementation just seems to boil down to an assignment to the appropriate member of the task_struct. The question I had in mind was, what if the process is already running? Is it safe to do it? Don&#39;t we need to acquire some sort of lock before we manipulate a task_struct ?</div>

</blockquote>
<div> </div>
</div><div>set_task_state() macro is used for portability reason. Earlier code shows direct manipulaation fo task_struct-&gt;state. </div>
<div>When you execute wait_interruptile() family calls, it is the running process in kernel  executes set_task_state() .</div>
<div> </div>
<div> </div>
<div> </div>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote"><div class="im">
<div><br></div>
<div>3. I would also be interested to read the correct way to use task_lock() that locks on alloc_lock field of the task_struct. What exactly is this lock for and does acquiring it/or any other lock in the task_struct cause the process to be remoted from the runqueue?</div>


<div><br></div>
<div><br></div>
<div>Would appreciate any pointers to appropriate code/reading or any explanation.</div>
<div>Thanks,</div><span><font color="#888888">
<div>-- </div>
<div>Amit Gupta<br><br></div></font></span><br></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>
<br></blockquote></div><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Amit Gupta<br><br>
</div>