Commit graph

16 commits

Author SHA1 Message Date
Riku Voipio
326c6802e4 alsa-lib: heavy pcm atomics cleanup
The following patch comes from the realization that at least ARM code
for atomics is quite broken and nobody has cared for a decade.

A quick dive shows that only snd_atomic_{read,write}_{begin,end}
appear to be used widely. These are implemented using wmb/rmb.

Only other use of atomic functions is in pcm_meter.c.
The #SND_PCM_TYPE_METER plugin type appears rarely, if ever, used.
I presume these days anyone who wants a meter/scope will do in pulseaudio
layer instead of alsa.

It would seem better fit to have pcm_meter in alsa-plugins instead
of alsa-lib, but I guess that would be an ABI break...

So instead, I'm proposing here

1. Removal of all hand-crafted atomics from iatomic.h apart from barriers,
   which are used in snd_atomic_{read,write}_{begin,end}.

2. Using __sync_synchronize as the default fallback for barriers. This
   has been available since gcc 4.1, so it shouldn't be a problem.

3. Defining the few atomics used by pcm_meter.c withing pcm_meter.c
   itself, using gcc atomic builtins[1].

4. Since gcc atomic builtins are available only since gcc 4.7, add a check for
   that in gcc configure.in, and don't build pcm meter plugin if using
   older gcc.

The last point has the impact, that if there actually is someone who 1)
uses the meter plugin 2) wants to upgrade to 2014 alsa-lib 3) but
does not want to use a 2012+ gcc - that someone will be inconvenienced.

Finally remove the unneeded configure check for cpu type. We can
trust the gcc to set right flags for us.

[1] http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html

Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2014-02-11 13:45:16 +01:00
Kai Kang
f21f48a70f Update iatomic.h functions definitions for mips
Functions atomic_add(s) and atomic_sub(s) are defined with 'extern
__inline__' that may cause compile fails when cross compile for mips.
The error message looks like:

| pcm/.libs/libpcm.a(pcm_meter.o): In function `snd_pcm_meter_update_scope':
| .../alsa-lib-1.0.27.2/src/pcm/pcm_meter.c:139: undefined reference to `atomic_sub'

Replace the 'extern __inline__' with 'static __inline__' to fix this
issue.

Signed-off-by: Kai Kang <jiashuo.kang at gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-08-22 10:40:32 +02:00
Takashi Iwai
30122df4fa Use __inline__ for exported headers
Some programs are still using C90.

Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=817077
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-04-25 09:52:33 +02:00
Mike Frysinger
d3c6e2b097 add atomic operations for Blackfin parts
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2010-01-18 08:35:57 +01:00
Takashi Iwai
ac10483b21 Add atomic operation for super-H(sh3,4) architectures
This patch adds atomic operation for super-H(sh3,sh4) architecture.
See ALSA bug#3789
	https://bugtrack.alsa-project.org/alsa-bug/view.php?id=3789
2008-02-18 13:15:55 +01:00
Jaroslav Kysela
19e3baa6e1 arm section update 2003-06-14 08:11:24 +00:00
Jaroslav Kysela
8d2eecb547 Renamed ATOMIC->ATOMIC_SMP_LOCK 2003-02-20 19:24:01 +00:00
Takashi Iwai
b20beb55f7 support for x86-64. 2002-06-20 14:55:05 +00:00
Takashi Iwai
08f08b31cf fixed for mips. using always MIPS2. 2002-06-14 13:54:52 +00:00
Jaroslav Kysela
853304bbf4 Corrections by Kevin Conder <kconder@interaccess.com> 2002-03-12 20:14:33 +00:00
Takashi Iwai
f14063a251 Fixed compile on ARM. 2002-01-17 12:00:02 +00:00
Jaroslav Kysela
8c1887d7af Moved some prototypes from src/pcm/pcm_plugin.h to include/pcm_plugin.h.
Merged src/pcm/atomic.h to include/iatomic.h.
Added initial description of hw and hooks plugins.
2002-01-12 10:52:42 +00:00
Takashi Iwai
b642a7c11e fixed compile on ia64. 2002-01-02 15:15:54 +00:00
Jaroslav Kysela
735c286de7 Changed __ppc__ to __powerpc__ 2001-12-15 20:36:28 +00:00
Takashi Iwai
c683f999f2 - Added definitions of rmb(), wmb().
- Provides non-atomic macros for other architectures.
  Warning message is asserted.
2001-12-07 14:16:50 +00:00
Jaroslav Kysela
e4e3929325 Initial version 2001-12-07 09:04:30 +00:00