[alsa-devel] trouble compiling alsa-drivers

Wallace, Brooke brookew at qualcomm.com
Wed Aug 8 03:20:00 CEST 2007


Ok, it seems that the issue was that my kernel header linux/spinlock.h
was using "rw_lock_t" instead of "rwlock_t". I searched for both and
didn't find any other instances of "rw_lock_t", but found many
"rwlock_t". My guess is that someone changed the name recently and this
one header did not get updated properly.

After making this fix I was able to compile alsa drivers, lib and utils.

What do you think, should I post this on the Wiki somewhere, or perhaps
notify someone at RedHat?

Now I'm looking at the utils I compiled and they seem to be referencing
ALSA0.9 instead of 1.0.14 (nm aplay) which is the version I compiled.
I'm also finding that Redhat installed alsa stuff in different
directories than the 1.0.14 drop does. Is there a list of installed
components and locations I can reference? I guess what I'm looking for
now is some guide so that I can properly install my newly compiled ALSA
software and test it. Aplay is still working, but I know its not using
the new driver I compiled, and I'm pretty sure its not even using the
new lib I compiled.

Also, any idea why my Redhat installation might be running snd_azx and
snd_hda_codec modules instead of snd_hda_intel, I know my hardware is
Intell HDA? 

-Brooke


> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de] 
> Sent: Monday, August 06, 2007 5:15 AM
> To: Wallace, Brooke
> Cc: alsa-devel at alsa-project.org
> Subject: Re: [alsa-devel] trouble compiling alsa-drivers
> 
> At Fri, 3 Aug 2007 15:34:33 -0700,
> Wallace, Brooke wrote:
> > 
> > Ok, I think I see what the problem is...
> > 
> > Adriver.h is including <linux/spinlock.h>. This file defines
> > DEFINE_SPINLOCK, but CONFIG_SMP is defined so 
> RW_LOCK_UNLOCKED nerver
> > gets defined which DEFINE_SPINLOCK uses.
> 
> You mean DEFINE_RWLOCK?  Is it anywhere defined at all?
> 
> > Seems like asm/spinlock.h gets
> > included for SMP, but this file is empty on my system. Has anyone
> > compiled with SMP before? Or is my kernel just hacked badly 
> by Redhat?
> > Still, it makes me wonder because they have some version of Alsa
> > compiled in already...
> > 
> > /usr/src/kernels/2.6.9-34.EL-smp-i686/include/linux/spinlock.h
> > 
> > /*
> >  * If CONFIG_SMP is set, pull in the _raw_* definitions
> >  */
> > #ifdef CONFIG_SMP
> > #include <asm/spinlock.h>
> > 
> > [brooke] Stuff Omitted...
> > 
> > #else
> > 
> > [brooke] *********** NEVER GETS HERE ******************
> > 
> > /* RW spinlocks: No debug version */
> > 
> > #if (__GNUC__ > 2)
> >   typedef struct { } rwlock_t;
> >   #define RW_LOCK_UNLOCKED (rwlock_t) { }
> > #else
> >   typedef struct { int gcc_is_buggy; } rwlock_t;
> >   #define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
> > #endif
> > 
> > [brooke] More stuff ...
> > 
> > #endif /* !SMP */
> > 
> > /*
> >  * Define the various spin_lock and rw_lock methods.  Note we define
> > these
> >  * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The
> > various
> >  * methods are defined as nops in the case they are not required.
> >  */
> > #define spin_trylock(lock)      _spin_trylock(lock)
> > #define write_trylock(lock)     _write_trylock(lock)
> > 
> > [brooke] Now RW_LOCK_UNLOCKED is not defined.
> > 
> > #define DEFINE_SPINLOCK(x)      spinlock_t x = SPIN_LOCK_UNLOCKED
> > #define DEFINE_RWLOCK(x)        rw_lock_t x = RW_LOCK_UNLOCKED
> > 
> > 
> > Can I just fix this by defining RW_LOCK_UNLOCKED in 
> adriver.h or am I
> > going to get into trouble down the line? Maybe a better 
> route would be
> > to switch to a known working kernel and not use SMP for my 
> test system?
> 
> First check whether DEFINE_RWLOCK is defined any place in
> include/linux and include/asm-*.  If yes, that header file should be
> included.  If it's defined nowhere, we'll need cook up by ourselves.
> 
> 
> Takashi
> 


More information about the Alsa-devel mailing list