From: Ingo Molnar <mingo@elte.hu>
To: "Eugeny S. Mints" <emints@ru.mvista.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [patch] Real-Time Preemption, deactivate() scheduling issue
Date: Tue, 29 Mar 2005 10:45:38 +0200 [thread overview]
Message-ID: <20050329084538.GB6507@elte.hu> (raw)
In-Reply-To: <42276746.6060600@ru.mvista.com>
* Eugeny S. Mints <emints@ru.mvista.com> wrote:
> please consider the following scenario for full RT kernel.
>
> Task A is running then an irq is occured which in turn wakes up irq
> related thread (B) of a higher priority than A.
>
> my current understanding that actual context switch between A and B will
> occure at preempt_schedule_irq() on the "return form irq " path.
>
> in this case the following "if" statement in __schedule() always returns
> false since preempt_schedule_irq() always sets up PREEMPT_ACTIVE
> before __schedule() call.
>
> if ((prev->state & ~TASK_RUNNING_MUTEX) &&
> !(preempt_count() & PREEMPT_ACTIVE)) {
>
> as result the deactivate() is never called for preempted task A in this
> scenario. BUt if the task A is preempted while not in TASK_RUNNING state
> such behaviour seems incorrect since we get a task in not TASK_RUNNING
> state linked into a run queue.
this behavior is intentional: 'forced preemption' (of any sort, even in
the upstream kernel's CONFIG_PREEMPT model) should not impact the task's
state. So it does not modify p->state. [ The TASK_RUNNING_MUTEX state
furthermore enables wakeups to occur in an invariant way: even though
technically the tasks are on the runqueue, a 'normal' wakeup is still
noticed and later on acted upon.]
this is very important for forced preemption to not impact the coding
model of kernel code that is normally tested with !PREEMPT. (the
TASK_RUNNING_MUTEX scheduler feature furthermore enables us to preempt
without impacting wakeup logic.)
> An example:
>
> drivers/net/irda/sir_dev.c: 76 (2.6.10 kernel)
>
> spin_lock_irqsave(&dev->tx_lock, flags); /* serialize th other
> tx operations */
> while (dev->tx_buff.len > 0) { /* wait until tx idle */
> spin_unlock_irqrestore(&dev->tx_lock, flags);
> 76: set_current_state(TASK_UNINTERRUPTIBLE);
> schedule_timeout(msecs_to_jiffies(10));
> spin_lock_irqsave(&dev->tx_lock, flags);
> }
>
> At line 76 irqs are enabled, preemption is enabled.
> Let assume the task A executes this code and gets preempted right after
> line 76. Task state is TASK_UNINTERRUPTIBLE but it will not be
> deactevated. Of cource this is the bug in set_current_state()
> utilization in this particular driver but schedule stuff should be
> robust to such bugs I believe. There are a lot such bugs in the kernel I
> believe.
it is not a problem to have tasks with TASK_UNINTERRUPTIBLE on the
runqueue - this happens every day with CONFIG_PREEMPT kernels, and it's
fully intentional. Can you see any bugs caused by this behavior?
Ingo
next prev parent reply other threads:[~2005-03-29 8:51 UTC|newest]
Thread overview: 125+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-04 10:03 [patch] Real-Time Preemption, -RT-2.6.11-rc3-V0.7.38-01 Ingo Molnar
2005-02-04 15:19 ` Kevin Hilman
2005-02-04 17:30 ` Ingo Molnar
2005-02-04 18:19 ` Tom Rini
2005-02-07 9:03 ` Ingo Molnar
2005-02-07 14:35 ` Tom Rini
2005-02-08 8:27 ` Ingo Molnar
2005-02-06 4:19 ` Valdis.Kletnieks
2005-02-07 9:21 ` Ingo Molnar
2005-02-07 15:08 ` Real-Time Preemption and UML? Esben Nielsen
2005-02-07 18:35 ` Jeff Dike
2005-02-07 23:14 ` Esben Nielsen
2005-02-08 8:39 ` Ingo Molnar
2005-02-08 18:55 ` Jeff Dike
2005-02-08 21:20 ` Esben Nielsen
2005-02-08 21:44 ` Ingo Molnar
2005-02-08 23:02 ` Esben Nielsen
2005-02-08 7:55 ` [patch] Real-Time Preemption, -RT-2.6.11-rc3-V0.7.38-01 Valdis.Kletnieks
2005-02-08 8:45 ` Ingo Molnar
2005-02-08 10:26 ` Valdis.Kletnieks
2005-02-08 21:58 ` William Weston
2005-02-09 11:51 ` Ingo Molnar
2005-02-10 2:13 ` William Weston
2005-02-10 7:52 ` Ingo Molnar
2005-02-10 20:21 ` George Anzinger
2005-02-10 20:40 ` Ingo Molnar
2005-02-10 21:05 ` George Anzinger
2005-02-11 8:34 ` Ingo Molnar
2005-02-11 9:38 ` Sven Dietrich
2005-02-11 9:42 ` Ingo Molnar
2005-02-11 0:09 ` Sven Dietrich
2005-02-11 6:01 ` George Anzinger
2005-02-11 8:28 ` Ingo Molnar
2005-02-11 9:53 ` Sven Dietrich
2005-02-11 10:04 ` Ingo Molnar
2005-02-11 21:49 ` Steven Rostedt
2005-02-13 12:59 ` Ingo Molnar
2005-02-13 15:11 ` Steven Rostedt
2005-03-03 19:36 ` [patch] Real-Time Preemption, deactivate() scheduling issue Eugeny S. Mints
2005-03-03 22:32 ` Esben Nielsen
2005-03-04 11:56 ` Eugeny S. Mints
2005-03-04 15:45 ` George Anzinger
2005-03-29 8:45 ` Ingo Molnar [this message]
2005-02-09 12:48 ` [patch] Real-Time Preemption, -RT-2.6.11-rc3-V0.7.38-01 Stephen Smalley
2005-02-10 2:20 ` William Weston
2005-02-19 5:08 ` Lee Revell
2005-02-19 6:47 ` Lee Revell
2005-02-19 9:00 ` Ingo Molnar
2005-02-19 9:03 ` Ingo Molnar
2005-02-19 20:45 ` Lee Revell
2005-02-20 0:19 ` Lee Revell
2005-03-17 16:33 ` Lee Revell
2005-02-23 2:22 ` Lee Revell
2005-03-10 9:37 ` Steven Rostedt
2005-03-10 9:54 ` Steven Rostedt
2005-03-11 9:57 ` Ingo Molnar
2005-03-11 10:15 ` Steven Rostedt
2005-03-11 10:17 ` Ingo Molnar
2005-03-11 10:24 ` Steven Rostedt
2005-03-11 10:43 ` Andrew Morton
2005-03-11 10:53 ` Steven Rostedt
2005-03-11 14:40 ` Steven Rostedt
2005-03-11 15:08 ` Steven Rostedt
2005-03-11 15:30 ` K.R. Foley
2005-03-11 15:38 ` Ingo Molnar
2005-03-11 16:01 ` Steven Rostedt
2005-03-11 20:39 ` Steven Rostedt
2005-03-11 20:46 ` Lee Revell
2005-03-11 22:06 ` Lee Revell
2005-03-14 7:37 ` Steven Rostedt
2005-03-14 9:33 ` Steven Rostedt
2005-03-14 10:10 ` Steven Rostedt
2005-03-14 15:50 ` Steven Rostedt
2005-03-14 19:02 ` Steven Rostedt
2005-03-15 11:44 ` Steven Rostedt
2005-03-15 12:00 ` Ingo Molnar
2005-03-15 13:07 ` Steven Rostedt
2005-03-15 13:35 ` Ingo Molnar
2005-03-15 13:55 ` Steven Rostedt
2005-03-15 19:12 ` Andrew Morton
2005-03-15 18:05 ` Steven Rostedt
2005-03-15 19:09 ` Lee Revell
2005-03-16 7:50 ` Steven Rostedt
2005-03-16 18:21 ` Lee Revell
2005-03-16 7:31 ` Steven Rostedt
2005-03-16 8:50 ` Ingo Molnar
2005-03-16 9:15 ` Andrew Morton
2005-03-16 9:51 ` [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks Ingo Molnar
2005-03-16 9:53 ` [patch 1/3] j_state_lock -> j_state_sem Ingo Molnar
2005-03-16 9:53 ` [patch 2/3] j_list_lock -> j_list_sem Ingo Molnar
2005-03-16 9:57 ` [patch 3/3] remove bitlocks Ingo Molnar
2005-03-16 10:04 ` [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks Andrew Morton
2005-03-16 10:12 ` Ingo Molnar
2005-03-16 10:23 ` Steven Rostedt
2005-03-16 10:26 ` Ingo Molnar
2005-03-16 10:26 ` Andrew Morton
2005-03-16 10:29 ` Ingo Molnar
2005-03-16 10:41 ` Andrew Morton
2005-03-16 10:34 ` Arjan van de Ven
2005-03-16 10:19 ` Ingo Molnar
2005-03-16 10:40 ` Andrew Morton
2005-03-16 10:51 ` Ingo Molnar
2005-03-16 11:05 ` Steven Rostedt
2005-03-16 11:19 ` Andrew Morton
2005-03-16 14:04 ` Steven Rostedt
2005-03-16 16:47 ` Steven Rostedt
2005-03-16 17:47 ` Steven Rostedt
2005-03-16 19:20 ` Lee Revell
2005-03-17 7:15 ` Steven Rostedt
2005-03-17 15:41 ` Lee Revell
2005-03-17 16:23 ` Steven Rostedt
2005-03-17 16:36 ` Lee Revell
2005-03-18 6:58 ` Steven Rostedt
2005-03-18 18:19 ` Lee Revell
2005-03-16 21:15 ` Andrew Morton
2005-03-17 9:21 ` Steven Rostedt
2005-03-18 9:23 ` [PATCH] remove lame schedule in journal inverted_lock (was: Re: [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks) Steven Rostedt
2005-03-18 9:32 ` Andrew Morton
2005-03-18 10:38 ` Steven Rostedt
2005-03-18 11:07 ` Andrew Morton
2005-03-18 12:10 ` Steven Rostedt
2005-03-17 9:58 ` [patch 0/3] j_state_lock, j_list_lock, remove-bitlocks Steven Rostedt
2005-03-11 9:28 ` [patch] Real-Time Preemption, -RT-2.6.11-final-V0.7.40-00 Ingo Molnar
2005-03-11 12:10 ` Andrew Walrond
2005-03-14 20:19 ` Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050329084538.GB6507@elte.hu \
--to=mingo@elte.hu \
--cc=emints@ru.mvista.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®