[RFC PATCH] tasklet: correct the comments about tasklet schedule

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

 



Hi all,

Ingo's patch:
00853150572df2	tasklet: Prevent tasklets from going into infinite spin in RT
changed behavior about tasklet in NO-RT scenario, but I found some suspicious
from code and comments.

Like the below patch says, if a tasklet is already running on another CPU,
then it would have RUN flag and have no SCHED flag, so when we call
tasklet_schedule, then in __tasklet_common_schedule(), tasklet_trylock()
will return false, and the tasklet won't be added to tasklet_vec list,
so there is no reschedule, right?

Another, the comments said schedule called from tasklet itself would cause
lockup, like it mentioned above, in tasklet function, the tasklet has RUN
flag, and have no SCHED flag, so when it call tasklet_schedule, it will
only meet tasklet_trylock return false, then nothing happened. I think this
should not be any lockup.

After all, if my understanding is correct, it changed the behavior when
tasklet scheduled itself, this would affect some kernel modules using
tasklet, is this what we want in RT? If so, should we use RT_FULL config
to isolate this affect?

--------------------

Correct the comments as the code really do.

Signed-off-by: Qiang Huang <h.huangqiang@xxxxxxxxxx>
---
 include/linux/interrupt.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index fb05761..e9d73e6 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -514,9 +514,8 @@ extern void __send_remote_softirq(struct call_single_data *cp, int cpu,
      to be executed on some cpu at least once after this.
    * If the tasklet is already scheduled, but its execution is still not
      started, it will be executed only once.
-   * If this tasklet is already running on another CPU, it is rescheduled
-     for later.
-   * Schedule must not be called from the tasklet itself (a lockup occurs)
+   * If this tasklet is already running on another CPU (or schedule is called
+     from tasklet itself), it wound not be rescheduled.
    * Tasklet is strictly serialized wrt itself, but not
      wrt another tasklets. If client needs some intertask synchronization,
      he makes it with spinlocks.
--
1.8.3

--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux