[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