Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jul 2010 09:59:17 -0700
From:      Pyun YongHyeon <pyunyh@gmail.com>
To:        Andriy Gapon <avg@icyb.net.ua>
Cc:        Gavin Atkinson <gavin@freebsd.org>, freebsd-current@freebsd.org
Subject:   Re: free(sc, M_DEVBUF) [Was: amd64 panic snd_hda - hdac_get_capabilities: Invalid corb size (0)]
Message-ID:  <20100728165917.GA7479@michelle.cdnetworks.com>
In-Reply-To: <4C502D22.10800@icyb.net.ua>
References:  <20100726132451.GA18443@mech-cluster241.men.bris.ac.uk> <1280226205.78791.0.camel@buffy.york.ac.uk> <20100727115831.GA46325@mech-cluster241.men.bris.ac.uk> <1280238737.78791.20.camel@buffy.york.ac.uk> <20100727144703.GA46905@mech-cluster241.men.bris.ac.uk> <1280249605.78791.36.camel@buffy.york.ac.uk> <4C502D22.10800@icyb.net.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jul 28, 2010 at 04:14:10PM +0300, Andriy Gapon wrote:
> 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@ 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.
> 

When I started to write snd_audiocs(4) for sparc64 I also noticed
that. The practice of sound driver was to explicitly allocate softc
structure in device attach routine and release it after use. I
don't remember details but other parts of sound subsystem seemed to
rely on the structure and changing it to use standard
device_get_softc(9) was not easy task.

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100728165917.GA7479>