Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753495Ab0DNHfx (ORCPT ); Wed, 14 Apr 2010 03:35:53 -0400 Received: from ipmail07.adl2.internode.on.net ([150.101.137.131]:52059 "EHLO ipmail07.adl2.internode.on.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751597Ab0DNHfw (ORCPT ); Wed, 14 Apr 2010 03:35:52 -0400 X-Greylist: delayed 304 seconds by postgrey-1.27 at vger.kernel.org; Wed, 14 Apr 2010 03:35:52 EDT X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApsEANcLxUs7p+/x/2dsb2JhbACcR7x8hQ0Ehjw Message-ID: <4BC56F21.6040909@call-direct.com.au> Date: Wed, 14 Apr 2010 17:30:41 +1000 From: Iwo Mergler User-Agent: Thunderbird 2.0.0.12 (X11/20080302) MIME-Version: 1.0 To: Anders Larsen CC: linux-mtd@lists.infradead.org, Artem Bityutskiy , Ian McDonnell , Nicolas Pitre , linux-kernel@vger.kernel.org, Matthias Kaehlcke , David Woodhouse Subject: Re: [PATCH] Fix Oops with Atmel SPI References: <1271158315l.25331l.9l@i-dmzi_al.realan.de> In-Reply-To: <1271158315l.25331l.9l@i-dmzi_al.realan.de> X-Enigmail-Version: 0.96.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2562 Lines: 78 Hi Anders, I wouldn't recommend that. MTD erase blocks are 64K or more. In a typical embedded system you will not be able to kmalloc that much memory after a few day's of operation - the page pool gets fragmented. A possibly better approach is to arrange for that memory to get allocated at driver start time. An even better approach would be to change the algorithm to operate on a list of smaller allocations, e.g. MTD page size. Best regards, Iwo Anders Larsen wrote: > Tweak MTD's cache allocation to make it work with the atmel DMA'ed SPI. > Substitute kmalloc for vmalloc so the cache buffer is mappable as per > the Atmel SPI driver's requirements, otherwise an Oops would occur. > > The original patch by Ian McDonnell was found here: > http://lists.infradead.org/pipermail/linux-mtd/2007-December/020184.html > > Signed-off-by: Anders Larsen > Cc: Ian McDonnell > Cc: David Woodhouse > Cc: Matthias Kaehlcke > Cc: Artem Bityutskiy > Cc: Nicolas Pitre > --- > drivers/mtd/mtdblock.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > Index: b/drivers/mtd/mtdblock.c > =================================================================== > --- a/drivers/mtd/mtdblock.c > +++ b/drivers/mtd/mtdblock.c > @@ -253,7 +253,11 @@ static int mtdblock_writesect(struct mtd > { > struct mtdblk_dev *mtdblk = mtdblks[dev->devnum]; > if (unlikely(!mtdblk->cache_data && mtdblk->cache_size)) { > +#ifdef CONFIG_SPI_ATMEL > + mtdblk->cache_data = kmalloc(mtdblk->mtd->erasesize, GFP_KERNEL); > +#else > mtdblk->cache_data = vmalloc(mtdblk->mtd->erasesize); > +#endif > if (!mtdblk->cache_data) > return -EINTR; > /* -EINTR is not really correct, but it is the best match > @@ -322,7 +326,11 @@ static int mtdblock_release(struct mtd_b > mtdblks[dev] = NULL; > if (mtdblk->mtd->sync) > mtdblk->mtd->sync(mtdblk->mtd); > +#ifdef CONFIG_SPI_ATMEL > + kfree(mtdblk->cache_data); > +#else > vfree(mtdblk->cache_data); > +#endif > kfree(mtdblk); > } > > > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ > > -- 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/