From: "Arthur Naseef" <artn@home.com>
To: "Andrew Morton" <andrewm@uow.edu.au>
Cc: <linux-kernel@vger.kernel.org>
Subject: RE: Kernel 2.2: tq_scheduler functions scheduling and waiting
Date: Tue, 29 May 2001 07:21:48 -0400 [thread overview]
Message-ID: <BGEHKJAIFDCFCMFALMGPEEHBCAAA.artn@home.com> (raw)
In-Reply-To: <3B13092F.F8AC6E92@uow.edu.au>
Andrew:
Excellent. I will look at the 2.4 sources.
In addition to the TASK_ZOMBIE issue you mention, I believe there
is an issue of false termination of wait queues. Consider this:
- Task places itself on a wait queue
- Calls schedule()
- tq_scheduler function does the same
Now, there are two events which could place the task in TASK_RUNNING
and no clear way to differentiate. And, since most of the kernel
code does not check that the wait condition was actually met, this
could lead to all types of problems, right?
-art
-----Original Message-----
From: akpm@uow.edu.au [mailto:akpm@uow.edu.au]On Behalf Of Andrew Morton
Sent: Monday, May 28, 2001 10:28 PM
To: Arthur Naseef
Cc: linux-kernel@vger.kernel.org
Subject: Re: Kernel 2.2: tq_scheduler functions scheduling and waiting
Arthur Naseef wrote:
>
> All:
>
> I have been diagnosing kernel panics for over a week and I have
> concerns with the use of tq_scheduler for which I was hoping I
> could get some assistance.
>
> Is it considered acceptable for functions in the tq_scheduler
> task list to call schedule? Is it acceptable for such functions
> to wait on wait queues? What limitations exist?
When a task wants to exit, it cleans up all its stuff,
sets its state to TASK_ZOMBIE and then calls schedule().
The scheduler takes it off the runqueue and the task
is never again executed. It's just a couple of stack
pages which are waiting for someone in wait4() to release.
But imagine what happens if the TASK_ZOMBIE task hits
schedule() and finds a tq_scheduler task to run. And that
task calls schedule(). In state TASK_ZOMBIE. Messy.
At the very least, the schedule() call will never return.
If the tq_scheduler task sets current->state to
TASK_[UN]INTERRUPTIBLE (as it should) before calling
schedule() then it has overwritten TASK_ZOMBIE and the
task which is trying to exit has become magically
resurrected. As far as I can tell, the "dead" task
will run again, do the `fake_volatile' thing in do_exit()
and try to go zombie again.
It would be very interesting to change the test in
schedule():
sti();
- if (tq_scheduler)
+ if (tq_scheduler && current->state != TASK_ZOMBIE)
goto handle_tq_scheduler;
It's all rather unpleasant, and tq_scheduler was killed
in 2.4. I suggest you take a look at all the serial
drivers in 2.4, see how I converted them to use schedule_task().
Someone kindly ported schedule_task() to 2.2.recent, so you
should be able to use that in the same way.
-
next prev parent reply other threads:[~2001-05-29 11:21 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-05-28 19:19 Kernel 2.2: tq_scheduler functions scheduling and waiting Arthur Naseef
2001-05-29 2:27 ` Andrew Morton
2001-05-29 11:21 ` Arthur Naseef [this message]
2001-05-29 11:25 ` Andrew Morton
2001-05-30 1:16 ` Arthur Naseef
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=BGEHKJAIFDCFCMFALMGPEEHBCAAA.artn@home.com \
--to=artn@home.com \
--cc=andrewm@uow.edu.au \
--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