From owner-freebsd-arch@FreeBSD.ORG Sat Sep 29 11:08:45 2007 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CF47316A420 for ; Sat, 29 Sep 2007 11:08:45 +0000 (UTC) (envelope-from hselasky@c2i.net) Received: from swip.net (mailfe13.swipnet.se [212.247.155.129]) by mx1.freebsd.org (Postfix) with ESMTP id 6FC7F13C457 for ; Sat, 29 Sep 2007 11:08:45 +0000 (UTC) (envelope-from hselasky@c2i.net) X-Cloudmark-Score: 0.000000 [] Received: from [193.217.102.3] (account mc467741@c2i.net HELO [10.0.0.249]) by mailfe13.swip.net (CommuniGate Pro SMTP 5.1.10) with ESMTPA id 238201938; Sat, 29 Sep 2007 13:08:43 +0200 From: Hans Petter Selasky To: Warner Losh Date: Sat, 29 Sep 2007 13:09:04 +0200 User-Agent: KMail/1.9.7 References: <200709262157.02712.hselasky@c2i.net> <200709281753.30367.hselasky@c2i.net> <20070928.141345.78789158.imp@bsdimp.com> In-Reply-To: <20070928.141345.78789158.imp@bsdimp.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200709291309.05747.hselasky@c2i.net> Cc: scottl@samsco.org, freebsd-arch@freebsd.org Subject: Re: Request for feedback on common data backstore in the kernel X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Sep 2007 11:08:45 -0000 On Friday 28 September 2007, Warner Losh wrote: > Hans Petter Selasky wrote: > > > Well, the point is that I'm not sure why you're so worried about > > > performance issues with USB and busdma. Do you have any test data that > > > shows that it's a problem? > > > > It is a problem on embedded devices. Typically not for an ordinary PC > > user. > > I'm curious. What's the problem? Technically, if you load a buffer pointer and length that is not cache aligned nor host aligned then you should bounce all the data no matter what. If you do not bounce under those conditions you might get trouble. struct my_softc { uint8_t hdr[2]; uint8_t eth_pkt[1500]; uint8_t other_important_stuff[546]; } __aligned(PAGE_SIZE); Can "eth_pkt" be loaded into DMA ? No, it has an offset of 2. struct my_softc { uint8_t eth_pkt[1500]; uint8_t other_important_stuff[548]; } __aligned(PAGE_SIZE); Can "eth_pkt" be loaded into DMA ? No, "other_important_stuff" might get lost when the cache is invalidated. struct my_softc { uint8_t eth_pkt[1500]; } __aligned(PAGE_SIZE); Can "eth_pkt" be loaded into DMA ? Yes, I see no problem. Is it guaranteed that the "m_data" field of a mbuf will always be correctly aligned for the CPU/DMA cache in addition to the host alignment ? Does bus_dma support bouncing using multiple pages instead of using one contiguous segment ? Please correct me if I am wrong. --HPS