free(sc, M_DEVBUF) [Was: amd64 panic snd_hda - hdac_get_capabilities: Invalid corb size (0)]

From: Andriy Gapon <avg_at_icyb.net.ua>
Date: Wed, 28 Jul 2010 16:14:10 +0300
on 27/07/2010 19:53 Gavin Atkinson said the following:
> 
> Thanks.  Can you try
> http://people.freebsd.org/~gavin/mexas-hda-panic.diff
> 
> and see if that solves things for you?
> 
> (Credit goes to avg_at_ for looking into this before me :)

BTW, it seems that there is an epidemic of "free(sc, M_DEVBUF)" in sound drivers.
And not only them, but I haven't looked at the other cases - perhaps the code
there does something different and thus correct.


glimpse -w M_DEVBUF | fgrep -w free | fgrep '(sc,'
/usr/src/sys/dev/sound/pci/hda/hdac.c:  free(sc, M_DEVBUF);
/usr/src/sys/net/if_lagg.c:             free(sc, M_DEVBUF);
/usr/src/sys/net/if_lagg.c:                             free(sc, M_DEVBUF);
/usr/src/sys/net/if_lagg.c:     free(sc, M_DEVBUF);
/usr/src/sys/net/if_bridge.c:           free(sc, M_DEVBUF);
/usr/src/sys/net/if_bridge.c:   free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/ich.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/ich.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/maestro3.c:  free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/maestro3.c:  free(sc, M_DEVBUF);
/usr/src/sys/net/if_enc.c:              free(sc, M_DEVBUF);
/usr/src/sys/sun4v/sun4v/simdisk.c:             free(sc, M_DEVBUF);
/usr/src/sys/dev/ofw/ofw_disk.c:                free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/isa/ess.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/sbus/cs4231.c:   free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/atiixp.c:    free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/emu10kx-pcm.c:               free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/emu10kx-pcm.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/emu10kx-pcm.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/ds1.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/ds1.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/cmi.c:               free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/cmi.c:       free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/neomagic.c:                          free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/neomagic.c:                  free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/neomagic.c:  free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/neomagic.c:  free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/solo.c:      free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/als4000.c:   free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/als4000.c:   free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/vibes.c:     free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/emu10k1.c:   free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/emu10k1.c:   free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/cs4281.c:     free(sc, M_DEVBUF);
/usr/src/sys/dev/sound/pci/cs4281.c:     free(sc, M_DEVBUF);


Good example of how get examples get multiplied.

P.S.
Actually all non-sound case seem to be correct, explicitly malloc-ed memory gets
freed.

-- 
Andriy Gapon
Received on Wed Jul 28 2010 - 11:14:14 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:05 UTC