From: Takashi Iwai <tiwai@suse.de>
To: Clemens Ladisch <clemens@ladisch.de>
Cc: Jaroslav Kysela <perex@suse.cz>,
"alsa-devel@lists.sourceforge.net"
<alsa-devel@lists.sourceforge.net>
Subject: Re: [PATCH] MPU-401 fixes
Date: Wed, 07 May 2003 11:03:32 +0200 [thread overview]
Message-ID: <s5hsmrrb02j.wl@alsa2.suse.de> (raw)
In-Reply-To: <Pine.HPX.4.33n.0305071010500.25787-100000@studcom.urz.uni-halle.de>
At Wed, 07 May 2003 10:31:46 +0200 (METDST),
Clemens Ladisch wrote:
>
> Jaroslav Kysela wrote:
> > On Tue, 6 May 2003, Takashi Iwai wrote:
> > > > Ok, I'm now using the spin_trylock check in the trigger function and
> > > > RX_LOOP and TX_LOOP protectors are removed now. Hopefully, it finally
> > > > solves our problem.
> > >
> > > i'm afraid no. as mentioned before, we need to consider to avoid two
> > > things:
> > >
> > > 1. (infinite) recursive call of trigger() (via input_read())
> > > 2. double spinlocks around input_read() from irq handler and
> > > the suceeding call of trigger()
> > >
> > > introducing spin_trylock() solves the case #2 but not case #1,
> > > since spin_trylock() always returns 1 on UP.
> > > for #1, an extra (formerly RX_LOOP bit) flag is still necessary.
> >
> > I see. So the protectors are back in trigger() callbacks.
>
> Now the recursive call sequence describe by Takashi is still possible:
>
> > irq
> > -> snd_mpu401_uart_interrupt()
> > -> lock
> > -> snd_mpu401_uart_input_read()
> > -> snd_rawmidi_receive()
> > -> rawmidi->event()
> > -> rawmidi->trigger() (in seq_midi.c)
> > -> snd_mpu401_uart_input_trigger()
>
> ... so the interrupt probably should set the bit, too. OTOH the recursion
> isn't infinite anymore, so the current code really doesn't need any more
> fixing.
yep, i agree that the flag should be set in the interrupt route, too.
i believe my last change (rev. 1.25) should work fine.
it sets the flag in input_read() (i.e. in spinlock). instead of
spin_trylock() the bit is checked but it's safe because
- input_read is protected by spinlock between interrupt() and
input_trigger()
- recursive call and double spinlocks of input_read() is avoided
by checking the bit
ciao,
Takashi
-------------------------------------------------------
Enterprise Linux Forum Conference & Expo, June 4-6, 2003, Santa Clara
The only event dedicated to issues related to Linux enterprise solutions
www.enterpriselinuxforum.com
prev parent reply other threads:[~2003-05-07 9:03 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-05 6:33 [PATCH] MPU-401 fixes Clemens Ladisch
2003-05-05 10:32 ` Jaroslav Kysela
2003-05-05 11:19 ` Clemens Ladisch
2003-05-05 14:15 ` Takashi Iwai
2003-05-05 15:51 ` Clemens Ladisch
2003-05-06 11:33 ` Takashi Iwai
2003-05-06 15:09 ` Jaroslav Kysela
2003-05-06 16:33 ` Takashi Iwai
2003-05-07 7:56 ` Jaroslav Kysela
2003-05-07 8:31 ` Clemens Ladisch
2003-05-07 9:03 ` Takashi Iwai [this message]
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=s5hsmrrb02j.wl@alsa2.suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@lists.sourceforge.net \
--cc=clemens@ladisch.de \
--cc=perex@suse.cz \
/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.