[alsa-devel] snd_array_free - snd: bad kfree when HDA reconfig

Takashi Iwai tiwai at suse.de
Wed Sep 14 08:02:37 CEST 2011


At Wed, 14 Sep 2011 08:04:46 +0800,
Raymond Yau wrote:
> 
> 2011/9/12 Takashi Iwai <tiwai at suse.de>:
> > At Fri, 2 Sep 2011 15:16:28 +0800,
> > Raymond Yau wrote:
> >>
> >> These errors "snd: bad kfree" occur when reconfig HDA from model
> >> "6stack-dig-fp" to "auto" and vice versa
> >
> > Doesn't this happen when you unload the device, right?
> 
> These errors "snd: bad kfree" also happen when unload and reload the driver
> 
> rmmod snd-hda-intel
> insmod snd-hda-inteel

OK, then it's just alsa-driver's debug stuff, no problem in the kernel
tree itself.

> > And, it happens when writing to /sys/class/sound/hwC0D0/clear?
> >
> >> Is "HD-Audio reconfiguration" still experimental ?
> >
> > Somehow yet, but mostly it worked for me :)
> >
> 
> I just use hda reconfig to change the model="auto" to "6stack-dig-fp"
> and vice versa
> 
> This mean that I need to implement "Independent HP" switch which allow
> user to change the topology if this feature is still experimental

The feature is anyway optional (i.e. not all users enable it).

> >> ALSA hda_hwdep.c:220: hda-codec: reconfiguring
> >> snd: bad kfree (called from f8be4636)
> >
> > Hmm, this is a magic check in external alsa-driver builds.
> > I guess it's just a bug there -- the override of krealloc() is
> > missing.
> >
> > Does the patch below (to alsa-driver tree) fix the problem?
> >
> 
> Do I need to specify any option and run configure script again ?

No.

> alsa-driver compiled without error but fail to loaded and complain
> ksize undefined symbol

Try the patch below in addition to the previous one.


thanks,

Takashi

---
From: Takashi Iwai <tiwai at suse.de>
Subject: [PATCH] Add missing export of snd_hidden_ksize()

Also fix the ifdef of krealloc() wrapper for some corner cases.

Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
 acore/sound.inc   |    1 +
 include/adriver.h |    3 ++-
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/acore/sound.inc b/acore/sound.inc
index a79755e..2e63c98 100644
--- a/acore/sound.inc
+++ b/acore/sound.inc
@@ -3,6 +3,7 @@
 EXPORT_SYMBOL(snd_hidden_kmalloc);
 EXPORT_SYMBOL(snd_hidden_kzalloc);
 EXPORT_SYMBOL(snd_hidden_kcalloc);
+EXPORT_SYMBOL(snd_hidden_ksize);
 EXPORT_SYMBOL(snd_hidden_kfree);
 EXPORT_SYMBOL(snd_hidden_kstrdup);
 EXPORT_SYMBOL(snd_hidden_kstrndup);
diff --git a/include/adriver.h b/include/adriver.h
index fe70442..848bc17 100644
--- a/include/adriver.h
+++ b/include/adriver.h
@@ -2002,7 +2002,8 @@ static inline bool flush_delayed_work_sync(struct delayed_work *dwork)
 #endif
 
 /* krealloc() wrapper */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22)) || defined(CONFIG_SND_DEBUG_MEMORY)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22)) || \
+	(defined(CONFIG_SND_DEBUG_MEMORY) && !defined(SKIP_HIDDEN_MALLOCS))
 #include <linux/slab.h>
 static inline void *snd_compat_krealloc(const void *p, size_t new_size, gfp_t flags)
 {
-- 
1.7.6.1



More information about the Alsa-devel mailing list