From: "Andrej Kruták" <dev@andree.sk>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org
Subject: Re: [PATCH 09/15] ALSA: line6: Add hwdep interface to access the POD control messages
Date: Sun, 14 Aug 2016 09:59:07 +0200 [thread overview]
Message-ID: <CAFnc+wVSarqT5E529mnshV882OJV8+nui9BJ9amiN66oZ++OwA@mail.gmail.com> (raw)
In-Reply-To: <s5h37m9g3iu.wl-tiwai@suse.de>
On Fri, Aug 12, 2016 at 10:01 PM, Takashi Iwai <tiwai@suse.de> wrote:
> On Fri, 12 Aug 2016 18:43:30 +0200,
> Andrej Kruták wrote:
>>
>> On Fri, Aug 12, 2016 at 2:30 PM, Takashi Iwai <tiwai@suse.de> wrote:
>> > On Fri, 12 Aug 2016 14:15:16 +0200,
>> >>
>> >> >> > Also, the blocking read/write control isn't usually done by a
>> >> >> > semaphore. Then you can handle the interrupt there.
>> >> >> >
>> >> >> >
>> >> >>
>> >> >> I actually wonder why, semaphores seemed perfect for this... Do you
>> >> >> have some hints?
>> >> >
>> >> > Assume you want to interrupt the user-space app while it's being
>> >> > blocked by the semaphore. With your code, you can't.
>> >> >
>> >> >
>> >>
>> >> You can - down_interruptible() is there for this exact reason.
>> >
>> > There is another blocking path: you keep semaphore down after
>> > line6_hwdep_read() until line6_hwdep_push_message(). What happens if
>> > user-space interrupts during that, and line6_hwdep_push_message() is
>> > delayed or stall by some reason?
>> >
>>
>> Actually, I think I don't see what's the "another path" here, could
>> you please elaborate one more bit? I just want to make sure to not
>> reimplement the same race using waitqueue...
>>
>> What's the point then? line6_hwdep_push_message() could get not
>> scheduled for some while. So until it calls up(), line6_hwdep_read()
>> will block on down_interruptible(), or until signal (in which case
>> user gets -ERESTARTSYS). After up() is called, there are data in
>> buffer...
>
> Well, what happens if user aborts before up() is called in
> line6_hwdep_push_message()? Now the driver calls close, and it frees
> the memory. What if, at the very same time,
> line6_hwdep_push_message() is triggered?
>
Right, the 'active' flag is cleary not a good lock...
>> If line6_hwdep_read() returns after interrupt, no problem -
>> the buffer will just continue to be filled and semaphore will be
>> up()'d while there's free buffer space. Or until the device is
>> closed...
>
> Or, what if line6_hwdep_push_message() is triggered twice or more
> before line6_hwdep_read() is called? It will call up() twice or
> more. Then at this point, you call line6_hwdep_read() concurrently
> from two threads... How do they protect against each other?
>
There's read_lock, unfortunately after "fixing" the sleep-in-atomic in
line6_hwdep_read(), it's broken now...
>> If I do the same via waitqueue, I will have the same problems, no?
>> Maybe if you could post the steps where you see the race...
>
> In your code, it's not clear that you're protecting from what.
> A simple lock+wait loop shows it more easily, at least.
>
Okay, I'll try to rethink/rework it, simplify the code, and get back.
Thanks!
--
Andrej
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2016-08-14 7:59 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-11 19:02 [PATCH 00/15] Line6 POD X3/X3Live suport Andrej Krutak
2016-08-11 19:02 ` [PATCH 01/15] ALSA: line6: Make driver configuration more generic Andrej Krutak
2016-08-12 8:24 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 02/15] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-08-11 19:02 ` [PATCH 03/15] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-08-11 19:02 ` [PATCH 04/15] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-08-11 19:02 ` [PATCH 05/15] ALSA: line6: Use device_create_file instead of snd_card_add_dev_attr Andrej Krutak
2016-08-12 8:26 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 06/15] ALSA: line6: Allow bulk endpoints instead of interrupt endpoints Andrej Krutak
2016-08-11 19:02 ` [PATCH 07/15] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-08-11 19:02 ` [PATCH 08/15] ALSA: line6: Cleanup initialization Andrej Krutak
2016-08-11 19:02 ` [PATCH 09/15] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-08-12 8:44 ` Takashi Iwai
2016-08-12 11:10 ` Andrej Kruták
2016-08-12 12:03 ` Takashi Iwai
2016-08-12 12:15 ` Andrej Kruták
2016-08-12 12:30 ` Takashi Iwai
2016-08-12 16:43 ` Andrej Kruták
2016-08-12 20:01 ` Takashi Iwai
2016-08-14 7:59 ` Andrej Kruták [this message]
2016-08-11 19:02 ` [PATCH 10/15] ALSA: line6: Add proper locks for hwdep open/release/read Andrej Krutak
2016-08-12 8:44 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 11/15] ALSA: line6: Only free buffer if it is set Andrej Krutak
2016-08-12 8:45 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 12/15] ALSA: line6: Give up on the lock while URBs are released Andrej Krutak
2016-08-12 8:45 ` Takashi Iwai
2016-08-12 11:14 ` Andrej Kruták
2016-08-12 12:04 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 13/15] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-08-11 19:02 ` [PATCH 14/15] ALSA: line6: Give up hwdep spinlock temporarily during read operation Andrej Krutak
2016-08-12 8:46 ` Takashi Iwai
2016-08-11 19:02 ` [PATCH 15/15] ALSA: line6: Remove double line6_pcm_release() after failed acquire Andrej Krutak
2016-08-12 8:46 ` Takashi Iwai
2016-08-12 8:14 ` [PATCH 00/15] Line6 POD X3/X3Live suport Takashi Iwai
2016-08-12 10:31 ` Andrej Kruták
2016-08-18 22:20 ` [PATCH v2 0/9] " Andrej Krutak
2016-08-18 22:20 ` [PATCH v2 1/9] ALSA: line6: Make driver configuration more generic Andrej Krutak
2016-08-24 14:50 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 2/9] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-08-24 14:53 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 3/9] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-08-24 14:56 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 4/9] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-08-18 22:20 ` [PATCH v2 5/9] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-08-18 22:20 ` [PATCH v2 6/9] ALSA: line6: Allow bulk endpoints instead of interrupt endpoints Andrej Krutak
2016-08-24 15:02 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 7/9] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-08-24 15:05 ` Takashi Iwai
2016-08-30 14:35 ` Andrej Kruták
2016-08-18 22:20 ` [PATCH v2 8/9] ALSA: line6: Cleanup initialization Andrej Krutak
2016-08-24 15:06 ` Takashi Iwai
2016-08-18 22:20 ` [PATCH v2 9/9] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 00/12] Line6 POD X3/X3Live suport Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 01/12] ALSA: line6: Enable different number of URBs for frame transfers Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 02/12] ALSA: line6: Add high-speed USB support Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 03/12] ALSA: line6: Support assymetrical in/out configurations Andrej Krutak
2016-09-16 18:34 ` kbuild test robot
2016-09-16 9:12 ` [PATCH v3 04/12] ALSA: line6: Allow different channel numbers for in/out Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 05/12] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 06/12] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 07/12] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 08/12] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 09/12] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 10/12] ALSA: line6: Only determine control port properties if needed Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 11/12] ALSA: line6: Cleanup podhd initialization Andrej Krutak
2016-09-16 9:12 ` [PATCH v3 12/12] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 00/12] Line6 POD X3/X3Live suport Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 01/12] ALSA: line6: Enable different number of URBs for frame transfers Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 02/12] ALSA: line6: Add high-speed USB support Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 03/12] ALSA: line6: Support assymetrical in/out configurations Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 04/12] ALSA: line6: Allow different channel numbers for in/out Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 05/12] ALSA: line6: Add LINE6_CAP_IN_NEEDS_OUT, a void playback stream during capture Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 06/12] ALSA: line6: Distinguish device init (ctrl EP) and MIDI data transfer (int EP) Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 07/12] ALSA: line6: Allow processing of raw incoming messages Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 08/12] ALSA: line6: Add support for POD X3 Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 09/12] ALSA: line6: Add support for POD X3 Live (only USB ID differs from POD X3) Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 10/12] ALSA: line6: Only determine control port properties if needed Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 11/12] ALSA: line6: Cleanup podhd initialization Andrej Krutak
2016-09-18 18:59 ` [PATCH v4 12/12] ALSA: line6: Add hwdep interface to access the POD control messages Andrej Krutak
2016-09-19 21:06 ` Takashi Iwai
2016-09-19 21:07 ` [PATCH v4 00/12] Line6 POD X3/X3Live suport Takashi Iwai
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=CAFnc+wVSarqT5E529mnshV882OJV8+nui9BJ9amiN66oZ++OwA@mail.gmail.com \
--to=dev@andree.sk \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).