kern/131785: commit references a PR
dfilter service
dfilter at FreeBSD.ORG
Mon Mar 30 03:20:06 PDT 2009
The following reply was made to PR kern/131785; it has been noted by GNATS.
From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: kern/131785: commit references a PR
Date: Mon, 30 Mar 2009 10:18:59 +0000 (UTC)
Author: mav
Date: Mon Mar 30 10:18:43 2009
New Revision: 190547
URL: http://svn.freebsd.org/changeset/base/190547
Log:
MFC rev. 190519:
Fixup relative pointers after channel realloc. It fixes crash on systems
with several HDA codecs per controller.
While I am there, remove some unneeded dereferences.
MFCed earlier than it should be so that it can be part of 7.2-BETA1.
PR: kern/131785
Submitted by: Tor Egge <Tor.Egge at cvsup.no.freebsd.org>
Approved by: re (kensmith)
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/ath/ath_hal/ (props changed)
stable/7/sys/dev/cxgb/ (props changed)
stable/7/sys/dev/sound/pci/hda/hdac.c
Modified: stable/7/sys/dev/sound/pci/hda/hdac.c
==============================================================================
--- stable/7/sys/dev/sound/pci/hda/hdac.c Mon Mar 30 10:16:49 2009 (r190546)
+++ stable/7/sys/dev/sound/pci/hda/hdac.c Mon Mar 30 10:18:43 2009 (r190547)
@@ -83,7 +83,7 @@
#include "mixer_if.h"
-#define HDA_DRV_TEST_REV "20090316_0130"
+#define HDA_DRV_TEST_REV "20090329_0131"
SND_DECLARE_FILE("$FreeBSD$");
@@ -5264,7 +5264,7 @@ hdac_audio_bind_as(struct hdac_devinfo *
sizeof(struct hdac_chan) * cnt,
M_HDAC, M_ZERO | M_NOWAIT);
if (sc->chans == NULL) {
- device_printf(devinfo->codec->sc->dev,
+ device_printf(sc->dev,
"Channels memory allocation failed!\n");
return;
}
@@ -5274,17 +5274,20 @@ hdac_audio_bind_as(struct hdac_devinfo *
M_HDAC, M_ZERO | M_NOWAIT);
if (sc->chans == NULL) {
sc->num_chans = 0;
- device_printf(devinfo->codec->sc->dev,
+ device_printf(sc->dev,
"Channels memory allocation failed!\n");
return;
}
+ /* Fixup relative pointers after realloc */
+ for (j = 0; j < sc->num_chans; j++)
+ sc->chans[j].caps.fmtlist = sc->chans[j].fmtlist;
}
free = sc->num_chans;
sc->num_chans += cnt;
for (j = free; j < free + cnt; j++) {
- devinfo->codec->sc->chans[j].devinfo = devinfo;
- devinfo->codec->sc->chans[j].as = -1;
+ sc->chans[j].devinfo = devinfo;
+ sc->chans[j].as = -1;
}
/* Assign associations in order of their numbers, */
@@ -5293,10 +5296,10 @@ hdac_audio_bind_as(struct hdac_devinfo *
continue;
as[j].chan = free;
- devinfo->codec->sc->chans[free].as = j;
- devinfo->codec->sc->chans[free].dir =
+ sc->chans[free].as = j;
+ sc->chans[free].dir =
(as[j].dir == HDA_CTL_IN) ? PCMDIR_REC : PCMDIR_PLAY;
- hdac_pcmchannel_setup(&devinfo->codec->sc->chans[free]);
+ hdac_pcmchannel_setup(&sc->chans[free]);
free++;
}
}
_______________________________________________
svn-src-all at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the freebsd-multimedia
mailing list