From owner-freebsd-multimedia@FreeBSD.ORG Sun Jun 14 07:27:51 2009 Return-Path: Delivered-To: freebsd-multimedia@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 46995106566B for ; Sun, 14 Jun 2009 07:27:51 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from cmail.optima.ua (cmail.optima.ua [195.248.191.121]) by mx1.freebsd.org (Postfix) with ESMTP id B41258FC18 for ; Sun, 14 Jun 2009 07:27:50 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from [212.86.226.226] (account mav@alkar.net HELO mavbook.mavhome.dp.ua) by cmail.optima.ua (CommuniGate Pro SMTP 5.2.9) with ESMTPSA id 245665880; Sun, 14 Jun 2009 10:27:47 +0300 Message-ID: <4A34A663.2010503@FreeBSD.org> Date: Sun, 14 Jun 2009 10:27:31 +0300 From: Alexander Motin User-Agent: Thunderbird 2.0.0.21 (X11/20090405) MIME-Version: 1.0 To: rick-freebsd2008@kiwi-computer.com References: <1242609781.00113421.1242598202@10.7.7.3> <4A122B72.80206@FreeBSD.org> <20090519184150.GA990@keira.kiwi-computer.com> <20090605020054.GA67365@keira.kiwi-computer.com> <4A28D79C.6070406@FreeBSD.org> <20090614050211.GA67556@keira.kiwi-computer.com> <20090614062157.GA67705@keira.kiwi-computer.com> In-Reply-To: <20090614062157.GA67705@keira.kiwi-computer.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-multimedia@freebsd.org Subject: Re: snd_hda works on i386, fails on amd64 (RELENG_7) X-BeenThere: freebsd-multimedia@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Multimedia discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2009 07:27:51 -0000 Rick C. Petty wrote: > On Fri, Jun 05, 2009 at 11:30:20AM +0300, Alexander Motin wrote: > >> Also you may try to change >> sc->support_64bit = HDA_FLAG_MATCH(gcap, HDAC_GCAP_64OK); >> line to >> sc->support_64bit = 0; >> , to strictly limit driver to 32bit addresses ignoring hardware >> capabilities. > > Hmm, I looked at the place that queries support_64bit, in hdac_dma_alloc as > part of the lowaddr to the bus_dma_tag_create(9) call: > > lowaddr = (sc->support_64bit) ? BUS_SPACE_MAXADDR : > BUS_SPACE_MAXADDR_32BIT; > ... > > On a whim, I tried manually setting lowaddr to BUS_SPACE_MAXADDR_24BIT and > it worked! A binary search revealed that it breaks for me when > lowaddr > 0x7FFFFFFF ... perhaps a 32-bit overflow bug related to DMA? You are right. There is definitely overflow. Try this: --- hdac.c.prev 2009-04-01 21:55:08.000000000 +0300 +++ hdac.c 2009-06-14 10:24:18.000000000 +0300 @@ -1589,9 +1589,9 @@ hdac_dma_cb(void *callback_arg, bus_dma_ static int hdac_dma_alloc(struct hdac_softc *sc, struct hdac_dma *dma, bus_size_t size) { + bus_addr_t lowaddr; bus_size_t roundsz; int result; - int lowaddr; roundsz = roundup2(size, HDAC_DMA_ALIGNMENT); lowaddr = (sc->support_64bit) ? BUS_SPACE_MAXADDR : -- Alexander Motin