From: Andrea Arcangeli <andrea@suse.de>
To: Andrew Morton <andrewm@uow.edu.au>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
linux-kernel@vger.kernel.org,
"David S. Miller" <davem@redhat.com>
Subject: Re: Linux 2.2.19pre2
Date: Sun, 24 Dec 2000 15:43:02 +0100 [thread overview]
Message-ID: <20001224154302.A844@athlon.random> (raw)
In-Reply-To: <3A444CAA.4C5A7A89@uow.edu.au>, <3A444CAA.4C5A7A89@uow.edu.au>; <20001223191159.B29450@athlon.random> <3A454205.D33090A8@uow.edu.au>, <3A454205.D33090A8@uow.edu.au>; <20001224015346.A17046@athlon.random> <3A455F6B.FAC3A4B7@uow.edu.au>, <3A455F6B.FAC3A4B7@uow.edu.au>; <20001224052128.A24560@athlon.random> <3A4586D6.EF357D62@uow.edu.au>
In-Reply-To: <3A4586D6.EF357D62@uow.edu.au>; from andrewm@uow.edu.au on Sun, Dec 24, 2000 at 04:17:10PM +1100
On Sun, Dec 24, 2000 at 04:17:10PM +1100, Andrew Morton wrote:
> I was talking about a different scenario:
>
> add_wait_queue_exclusive(&q->wait_for_request, &wait);
> for (;;) {
> __set_current_state(TASK_UNINTERRUPTIBLE);
> /* WINDOW */
> spin_lock_irq(&io_request_lock);
> rq = get_request(q, rw);
> spin_unlock_irq(&io_request_lock);
> if (rq)
> break;
> generic_unplug_device(q);
> schedule();
> }
> remove_wait_queue(&q->wait_for_request, &wait);
>
> Suppose there are two tasks sleeping in the schedule().
>
> A wakeup comes. One task wakes. It loops aound and reaches
> the window. At this point in time, another wakeup gets sent
> to the waitqueue. It gets directed to the task which just
> woke up![..]
Ok, this is a very minor window compared to the current one, but yes, that
could happen too in test4.
> I assume this is because this waitqueue gets lots of wakeups sent to it.
It only gets the strictly necessary number of wakeups.
> Linus suggested at one point that we clear the waitqueue's
> WQ_FLAG_EXCLUSIVE bit when we wake it up, [..]
.. and then set it after checking if a new request is available, just
before schedule(). That would avoid the above race (and the one
I mentioned in previous email) but it doesn't address the lost wakeups
for example when setting USE_RW_WAIT_QUEUE_SPINLOCK to 1.
Considering wakeups only the ones that moves the task to the runqueue will get
rid of the races all together and it looks right conceptually so I prefer it.
Andrea
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2000-12-24 15:13 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-12-16 19:11 Linux 2.2.19pre2 Alan Cox
2000-12-17 10:56 ` Petri Kaukasoina
2000-12-17 15:38 ` Kurt Garloff
2000-12-20 10:32 ` Petri Kaukasoina
2000-12-20 10:44 ` Kurt Garloff
2000-12-20 13:28 ` Andrea Arcangeli
2000-12-20 14:57 ` Andrew Morton
2000-12-20 15:24 ` Andrea Arcangeli
2000-12-20 17:48 ` Rik van Riel
2000-12-20 18:09 ` Andrea Arcangeli
2000-12-21 10:38 ` Andrew Morton
2000-12-21 15:19 ` Andrea Arcangeli
2000-12-21 17:07 ` Rik van Riel
2000-12-21 17:44 ` Andrea Arcangeli
2000-12-21 17:55 ` Rik van Riel
2000-12-22 7:33 ` Andrew Morton
2000-12-22 13:19 ` Andrea Arcangeli
2000-12-23 6:56 ` Andrew Morton
2000-12-23 18:11 ` Andrea Arcangeli
2000-12-24 0:23 ` Andrew Morton
2000-12-24 0:53 ` Andrea Arcangeli
2000-12-24 2:28 ` Andrew Morton
2000-12-24 4:21 ` Andrea Arcangeli
2000-12-24 5:17 ` Andrew Morton
2000-12-24 14:43 ` Andrea Arcangeli [this message]
2000-12-24 15:40 ` Andrea Arcangeli
2000-12-29 17:09 ` wake-one-3 bug (affected 2.2.19pre3aa[123]) Andrea Arcangeli
2000-12-21 20:23 ` Linux 2.2.19pre2 Andrea Arcangeli
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=20001224154302.A844@athlon.random \
--to=andrea@suse.de \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=andrewm@uow.edu.au \
--cc=davem@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.