Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161001AbWA0UVK (ORCPT ); Fri, 27 Jan 2006 15:21:10 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1161008AbWA0UVK (ORCPT ); Fri, 27 Jan 2006 15:21:10 -0500 Received: from ns.virtualhost.dk ([195.184.98.160]:10090 "EHLO virtualhost.dk") by vger.kernel.org with ESMTP id S1161001AbWA0UVJ (ORCPT ); Fri, 27 Jan 2006 15:21:09 -0500 Date: Fri, 27 Jan 2006 21:22:06 +0100 From: Jens Axboe To: Pierre Ossman , LKML Subject: Re: How to map high memory for block io Message-ID: <20060127202206.GH9068@suse.de> References: <43D9C19F.7090707@drzeus.cx> <20060127102611.GC4311@suse.de> <43D9F705.5000403@drzeus.cx> <20060127104321.GE4311@suse.de> <43DA0E97.5030504@drzeus.cx> <20060127194318.GA1433@flint.arm.linux.org.uk> <43DA7CD1.4040301@drzeus.cx> <20060127201458.GA2767@flint.arm.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20060127201458.GA2767@flint.arm.linux.org.uk> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1504 Lines: 36 On Fri, Jan 27 2006, Russell King wrote: > On Fri, Jan 27, 2006 at 09:04:33PM +0100, Pierre Ossman wrote: > > Russell King wrote: > > > I don't see what the problem is. A sg entry is a list of struct page > > > pointers, an offset, and a size. As such, it can't describe a transfer > > > which crosses a page because such a structure does not imply that one > > > struct page follows another struct page. > > > > If the pages do not strictly follow each other then there is a lot of > > broken code in the kernel. drivers/mmc/mmci.c and drivers/block/ub.c > > being two occurences since both assume they can access the entire entry > > through a single mapping. > > We don't make that assumption. What we do is: > > - map the current sg using kmap_atomic() > - copy up to sg->length into or out of that mapping > - unmap current sg > - if we have reached the end of this sg, move on to the next > > What this means is that we assume sg->offset + sg->length <= PAGE_SIZE > in all cases, which is the same assumption architecture DMA code makes. > If that's invalid, there's likely to be a lot of architecture DMA support > which is broken. That is definitely valid, same goes for the bio_vec structure. They map _a_ page, after all :-) -- Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/