Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Apr 2007 01:22:27 +0300
From:      Giorgos Keramidas <keramida@freebsd.org>
To:        John Baldwin <jhb@freebsd.org>, Ariff Abdullah <ariff@freebsd.org>
Cc:        Alexander Leidinger <Alexander@leidinger.net>, freebsd-current@freebsd.org, current@freebsd.org, S?ren Schmidt <sos@deepcore.dk>, Nate Lawson <nate@root.org>
Subject:   Re: recent commits break via 8235 ata
Message-ID:  <20070406222227.GA1839@kobe.laptop>
In-Reply-To: <20070406211229.GB1078@kobe.laptop>
References:  <4608A5D9.2010902@root.org> <20070327151058.5qk9etifk880g4cc@webmail.leidinger.net> <20070327140741.GA60454@kobe.laptop> <200703271227.14308.jhb@freebsd.org> <20070406211229.GB1078@kobe.laptop>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2007-04-07 00:12, Giorgos Keramidas <keramida@freebsd.org> wrote:
> On 2007-03-27 12:27, John Baldwin <jhb@freebsd.org> wrote:
> > If that is the case it's because code was using
> > rman_get_bus(handle|tag) on a resource that wasn't activated yet which
> > wouldn't have worked before the nexus changes either.  Well, the bus
> > tag might have been right, but the handle for SYS_RES_MEMORY would
> > have been wrong.
> 
> This is the change which stops snd_hda from working here:
> 
> %   Revision  Changes    Path
> %   1.233     +39 -55    src/sys/dev/acpica/acpi.c

There's only one place in the sound/pci/hda/* source tree where
rman_get_bus(handle|tag)() calls are used:

keramida@kobe:/home/keramida/hg/freebsd/src/sys/dev/sound/pci/hda$ grep -n 'rman_get_bus\(handle\|tag\)' *
hdac.c:1301:    mem->mem_tag = rman_get_bustag(mem->mem_res);
hdac.c:1302:    mem->mem_handle = rman_get_bushandle(mem->mem_res);
keramida@kobe:/home/keramida/hg/freebsd/src/sys/dev/sound/pci/hda$

[...]

1281 /****************************************************************************
1282  * int hdac_mem_alloc(struct hdac_softc *)
1283  *
1284  * Allocate all the bus resources necessary to speak with the physical
1285  * controller.
1286  ****************************************************************************/
1287 static int
1288 hdac_mem_alloc(struct hdac_softc *sc)
1289 {
1290         struct hdac_mem *mem;
1291
1292         mem = &sc->mem;
1293         mem->mem_rid = PCIR_BAR(0);
1294         mem->mem_res = bus_alloc_resource_any(sc->dev, SYS_RES_MEMORY,
1295             &mem->mem_rid, RF_ACTIVE);
1296         if (mem->mem_res == NULL) {
1297                 device_printf(sc->dev,
1298                     "%s: Unable to allocate memory resource\n", __func__);
1299                 return (ENOMEM);
1300         }
1301         mem->mem_tag = rman_get_bustag(mem->mem_res);
1302         mem->mem_handle = rman_get_bushandle(mem->mem_res);
1303
1304         return (0);
1305 }

I'm not very familiar with the rman_get_xxx() functions, but is
there a better way to write the hdac_mem_alloc() function so that
it works with the recent acpi.c versions?




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