From: Rob Duncan <rduncan@tesla.com>
To: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
Takashi Iwai <tiwai@suse.de>
Subject: Thread spinning in kernel snd_pcm_link()/snd_pcm_unlink()
Date: Fri, 28 Sep 2018 09:23:24 -0700 [thread overview]
Message-ID: <dw77emy3bl4mmb.fsf@tesla.com> (raw)
I'm trying to address a bug where we end up with a thread spinning and
consuming an entire cpu. The issue seems to be this code in
sound/core/pcm_native.c:
/* Writer in rwsem may block readers even during its waiting in queue,
* and this may lead to a deadlock when the code path takes read sem
* twice (e.g. one in snd_pcm_action_nonatomic() and another in
* snd_pcm_stream_lock()). As a (suboptimal) workaround, let writer to
* spin until it gets the lock.
*/
static inline void down_write_nonblock(struct rw_semaphore *lock)
{
while (!down_write_trylock(lock))
cond_resched();
}
The original commit for this is 67ec1072b053c15564e6090ab30127895dc77a89
What we're suspecting is that a normal thread (SCHED_OTHER) has a reader
lock and a real-time thread using SCHED_RR or SCHED_FIFO is trying to
take the writer lock. If both threads are pinned to the same CPU for
some reason then the reader thread will never get scheduled (because the
real-time writer thread is still runnable), and we will never make
progress.
Does this sound right? What can we do to fix this?
Thanks,
Rob.
next reply other threads:[~2018-09-28 16:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-28 16:23 Rob Duncan [this message]
2018-10-02 15:14 ` Thread spinning in kernel snd_pcm_link()/snd_pcm_unlink() Takashi Iwai
2018-10-02 16:55 ` Rob Duncan
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=dw77emy3bl4mmb.fsf@tesla.com \
--to=rduncan@tesla.com \
--cc=alsa-devel@alsa-project.org \
--cc=tiwai@suse.de \
/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.