Hey Sreejith,


softirq's are run as bottom half processing (after an interrupt is handled or when there is no work to be done - https://www.kernel.org/doc/htmldocs/kernel-hacking/basics-softirqs.html ) and sched_softirq is one such soft irq whose only function is confined to the routine run_rebalance_domain().


__schedule() is the main scheduling function that tries to pick the next task and then perform context switch and other associated scheduling functions. Since run_rebalance_domain() need not be run at that exact time frame, it is scheduled for later time when the cpu can take it up using softirq's. Therefore __schedule() need not be called in this softirq context as such because these are independent operations.

Hope this helps.

Thanks and regards,
Vignesh Radhakrishnan

On Wed, Jan 28, 2015 at 10:25 PM, Sreejith M M <sreejith.mm@gmail.com> wrote:
Hi,

I was reading LKD by Robert Love. I got the following idea from the book.


Correct me if I am worng
I was checking through source code and I found that on every timer
interrupt, through sched/fair.c we are raising the SCHED_SOFTIRQ().
I was checking the relation between SCHED_SOFTIRQ and actual
__schedule() function.

My assumption:
schedule() function is the function which selects the processes which
are ready to run  in run queue. schedule() function is called in every
timer tick.

What I was thinking is that schedule() will be called as part of
handling SCHED_SOFTIRQ() . But in source code, SCHED_SOFTIRQ is
handled through run_rebalance_domain() function (sched/fair.c) . I am
unable to trace __schedule()  from this function.

Am I missing anything or my assumptions are wrong?
--
Regards,
Sreejith

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



--
http://vigneshradhakrishnan.blogspot.com/