From: Stefan Richter <stefanr@s5r6.in-berlin.de>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org, clemens@ladisch.de,
ffado-devel@lists.sf.net,
Takashi Sakamoto <o-takashi@sakamocchi.jp>
Subject: Re: [PATCH 03/25] ALSA: firewire-lib: add helper functions for asynchronous MIDI port
Date: Sun, 16 Aug 2015 14:15:09 +0200 [thread overview]
Message-ID: <20150816141509.06cc622b@kant> (raw)
In-Reply-To: <s5hd1ynybkd.wl-tiwai@suse.de>
On Aug 16 Takashi Iwai wrote:
> On Sat, 15 Aug 2015 12:15:54 +0200,
> Stefan Richter wrote:
> >
> > On Aug 13 Takashi Sakamoto wrote:
> > > On Aug 13 2015 15:31, Takashi Iwai wrote:
> > > > On Thu, 13 Aug 2015 02:19:59 +0200,
> > > > Takashi Sakamoto wrote:
> > > >> + generation = port->parent->generation;
> > > >> + smp_rmb(); /* node_id vs. generation */
> > > >
> > > > Why this barrier is needed?
> > >
> > > Oops. I forgot to refine it after copying from the other place. Exactly,
> > > it's not need here.
> > >
> > > >> + fw_send_request(port->parent->card, &port->transaction, type,
> > > >> + port->parent->node_id, generation,
> > > >> + port->parent->max_speed, port->addr,
> > > >> + port->buf, port->len, async_midi_port_callback,
> > > >> + port);
> > > >> +}
> >
> > The barrier is normally needed because:
[there is a dependency between node_ID and generation and]
> > - The node_ID:generation tuple is accessed in the Linux firewire stack in
> > a lockless manner:
[...]
> Thanks, that clarifies. But wouldn't it be more helpful to have some
> macro than open-coding at each place?
I agree that a cooked-up accessor via <linux/firewire.h> would be good,
but I have no immediate idea how that accessor should look like. Looking
at the various uses of fw_send_request
[http://lxr.free-electrons.com/ident?i=fw_send_request],
it's clear that this API between protocol drivers and firewire-core is
quite low-level and flexible by nature. In particular, the different users
of the API take node_id:generation from different sources.¹
As mentioned, another way would be to fuse node_id:generation into a single
atomic datum throughout all firewire drivers. I.e. instead of ensuring the
proper access order everytime, just access both data simultaneously
everytime. Not having tried this yet, I am not sure which way would be
more readable.
------------
¹) Those differences between fw_send_request users are typically due to
bus reset handling in highlevel drivers on top of firewire-core's
bus reset handling.
[firewire-core::bus reset handler]
- analyze bus topology
- write fw_device instances' node_id:generation tuple
- notify protocol drivers
[protocol_driver::bus reset handler]
- perform protocol-specific reconnection procedure
- write protocol_driver_device instance's node_id:generation tuple
[protocol_driver::outbound IO]
- read protocol_driver_device instance's node_id:generation tuple
- send request
Here the request is not only guaranteed to hit the topologically
correct target, it is also guaranteed to hit only while in a
protocol-specific connected state. (Requests with a stale generation
won't go out to the bus.)
--
Stefan Richter
-=====-===== =--- =----
http://arcgraph.de/sr/
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2015-08-16 12:15 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-13 0:19 [PATCH 00/25] ALSA: support AMDTP variants Takashi Sakamoto
2015-08-13 0:19 ` [PATCH 01/25] ALSA: firewire-lib: rename 'amdtp' to 'amdtp-stream' for functional separation Takashi Sakamoto
2015-08-13 0:19 ` [PATCH 02/25] ALSA: firewire-lib: functional separation for packet transmission layer and data processing layer Takashi Sakamoto
2015-08-13 0:19 ` [PATCH 03/25] ALSA: firewire-lib: add helper functions for asynchronous MIDI port Takashi Sakamoto
2015-08-13 6:31 ` Takashi Iwai
2015-08-13 7:57 ` Takashi Sakamoto
2015-08-15 10:15 ` Stefan Richter
2015-08-15 10:19 ` Stefan Richter
2015-08-16 6:47 ` Takashi Iwai
2015-08-16 12:15 ` Stefan Richter [this message]
2015-08-17 14:01 ` Takashi Iwai
2015-08-13 0:20 ` [PATCH 04/25] ALSA: firewire-lib: add a restriction for a transaction at once Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 05/25] ALSA: firewire-lib: schedule tasklet again when MIDI substream has rest of MIDI messages Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 06/25] ALSA: firewire-lib: add throttle for MIDI data rate Takashi Sakamoto
2015-08-13 21:34 ` Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 07/25] ALSA: firewire-lib: avoid endless loop to transfer MIDI messages at fatal error Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 08/25] ALSA: firewire-digi00x: add skeleton for Digi 002/003 family Takashi Sakamoto
2015-08-13 6:33 ` Takashi Iwai
2015-08-13 0:20 ` [PATCH 09/25] ALSA: firewire-digi00x: add data processing layer Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 10/25] ALSA: firewire-digi00x: add stream functionality Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 11/25] ALSA: firewire-digi00x: add proc node to show clock status Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 12/25] ALSA: firewire-digi00x: add PCM functionality Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 13/25] ALSA: firewire-digi00x: add MIDI functionality Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 14/25] ALSA: firewire-digi00x: add hwdep interface Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 15/25] ALSA: firewire-digi00x: add support for asynchronous messaging Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 16/25] ALSA: firewire-digi00x: add support for MIDI ports for machine control Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 17/25] ALSA: firewire-tascam: add skeleton for TASCAM FireWire series Takashi Sakamoto
2015-08-13 6:24 ` Takashi Iwai
2015-08-13 7:18 ` Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 18/25] ALSA: firewire-tascam: add a structure for model-dependent parameters Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 19/25] ALSA: firewire-tascam: add proc node to show firmware information Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 20/25] ALSA: firewire-tascam: add data processing layer Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 21/25] ALSA: firewire-tascam: add streaming functionality Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 22/25] ALSA: firewire-tascam: add PCM functionality Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 23/25] ALSA: firewire-tascam: add transaction functionality Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 24/25] ALSA: firewire-tascam: add MIDI functionality Takashi Sakamoto
2015-08-13 0:20 ` [PATCH 25/25] ALSA: firewire-tascam: add hwdep interface Takashi Sakamoto
2015-08-13 0:32 ` [PATCH 00/25] ALSA: support AMDTP variants Takashi Sakamoto
-- strict thread matches above, loose matches on Subject: below --
2015-08-22 9:19 [PATCH 00/25 v2] " Takashi Sakamoto
2015-08-22 9:19 ` [PATCH 03/25] ALSA: firewire-lib: add helper functions for asynchronous MIDI port Takashi Sakamoto
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=20150816141509.06cc622b@kant \
--to=stefanr@s5r6.in-berlin.de \
--cc=alsa-devel@alsa-project.org \
--cc=clemens@ladisch.de \
--cc=ffado-devel@lists.sf.net \
--cc=o-takashi@sakamocchi.jp \
--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