Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161000AbWA0UPG (ORCPT ); Fri, 27 Jan 2006 15:15:06 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1161001AbWA0UPG (ORCPT ); Fri, 27 Jan 2006 15:15:06 -0500 Received: from caramon.arm.linux.org.uk ([212.18.232.186]:30481 "EHLO caramon.arm.linux.org.uk") by vger.kernel.org with ESMTP id S1161000AbWA0UPE (ORCPT ); Fri, 27 Jan 2006 15:15:04 -0500 Date: Fri, 27 Jan 2006 20:14:59 +0000 From: Russell King To: Pierre Ossman Cc: Jens Axboe , LKML Subject: Re: How to map high memory for block io Message-ID: <20060127201458.GA2767@flint.arm.linux.org.uk> Mail-Followup-To: Pierre Ossman , Jens Axboe , LKML 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> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <43DA7CD1.4040301@drzeus.cx> User-Agent: Mutt/1.4.1i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1418 Lines: 33 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. -- Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of: 2.6 Serial core - 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/