<div dir="ltr">Yes, that sounds cool. But if you see, for Linux versions &gt;= 3.4.1 some of the network drivers do not use the softirq or NAPI interface, but instead use a kernel thread to process the received packets.<div>
In the situation like this, whatever packets are processed by the kernel thread, i just want to enqueue them in a software Q and want to deque them and transmit them at some later point of time.</div><div>Is it okay to use tasklet for this purpose ?</div>
<div>So essentially what i would be  doing is something like this ...</div><div>1: Kernel thread will process the packets and will give me &quot;skb&quot;</div><div>2: i will enqueue this skb in  SW Q and schedule a tasklet.</div>
<div>3: when kernel will decicde to run the tasklet, in the handler function of the tasklet, i will dequeue packets and will transmit it to another interface.</div><div><br></div><div>Since in this implementation, i will schedule a tasklet from a kernel thread, i am a bit concerned if this approach is all right and am not sure if scheduling a tasklet from a kernel thread has any side effects.</div>
<div> Probably now my problem is more clearer.</div><div>Appreciate the response and suggestions of the experts.</div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Tue, May 13, 2014 at 3:28 PM, Pranay Srivastava <span dir="ltr">&lt;<a href="mailto:pranjas@gmail.com" target="_blank">pranjas@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">
<div class="">On Tue, May 13, 2014 at 2:18 PM, Vishwas Srivastava<br>
&lt;<a href="mailto:vishu.kernel@gmail.com">vishu.kernel@gmail.com</a>&gt; wrote:<br>
&gt; Appreciate the quick response..<br>
&gt;<br>
&gt; Hi All,<br>
&gt;              i am concerned about the scheduling the tasklet. The running of<br>
&gt; the tasklet is anyway controlled by the kernel at its own dissertation.<br>
&gt; But scheduling can be done from anywhere?? Correct?<br>
&gt;<br>
<br>
</div>I think by the next tick it would run. Since when you do<br>
tasklet_schedule you are setting the softirq pending<br>
flag.<br>
<div class=""><br>
&gt; Also can<br>
&gt; Tasklets can be used for &quot;any&quot; deferred work or it is strictly stick to the<br>
&gt; work which can not be done in the &quot;top&quot; half??<br>
<br>
</div>Really depends, what I think is that you still wouldn&#39;t want to do too<br>
much in tasklet,<br>
if it&#39;s heavy processing better give it a work-queue. So basically use<br>
tasklet as a breakup of your top<br>
half only. That timely things still are done quick indeed just not that quick.<br>
<div class=""><br>
&gt; For example, if there is some work which is prepared ready by a kernel<br>
&gt; thread (but thread dont want to process it immediately, rather want to<br>
&gt; deffer it for sometime) and the intention is to process this &quot;prapared work&quot;<br>
&gt; at some later time. In the situation like this, can we use the tasklet to do<br>
&gt; this?<br>
</div>queue_delayed_work?<br>
or maybe you can do just a kthread_create only<br>
for the thread and wakeup_process(&lt;your_kthread&gt;) when you want to run it.<br>
<br>
You can do anything inside the code that&#39;s upto you, only rule is no<br>
sleepy things,<br>
and no copy_to_ or copy_from both can sleep and both require process<br>
context which you<br>
don&#39;t have. Besides the no sleeping rule, you can do whatever you<br>
like. By scheduling, I mean scheduling<br>
the current code by explicitly calling schedule or some other sleeping<br>
function call. But you can<br>
wake_up, tasklet_schedule, complete, complete_all etc.<br>
<br>
you can do kmalloc, don&#39;t forget GFP_ATOMIC, but no vmalloc. You can<br>
do memcpy, but no copy_to/copy_from<br>
<div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Tue, May 13, 2014 at 6:28 AM, Pranay Srivastava &lt;<a href="mailto:pranjas@gmail.com">pranjas@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On May 13, 2014 2:36 AM, &quot;Vishwas Srivastava&quot; &lt;<a href="mailto:vishu.kernel@gmail.com">vishu.kernel@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Hi All,<br>
&gt;&gt; &gt;             This may sound a dumb question. I just want to know if a<br>
&gt;&gt; &gt; tasklet can be scheduled from a kernel thread.<br>
&gt;&gt;<br>
&gt;&gt; You can do tasklet_schedule in case I am getting your question.<br>
&gt;&gt;<br>
&gt;&gt; &gt; what are the pros and crons of doing so?<br>
&gt;&gt;<br>
&gt;&gt; Don&#39;t sleep or schedule the tasklet code. It needs to be atomic since it<br>
&gt;&gt; runs via TASKLET_SOFTIRQ.<br>
&gt;&gt;<br>
&gt;&gt; &gt; thanks,<br>
&gt;&gt; &gt; Vishwas S<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; Kernelnewbies mailing list<br>
&gt;&gt; &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
        ---P.K.S<br>
</font></span></blockquote></div><br></div>