[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160413222451.704376b5@bbrezillon>
Date: Wed, 13 Apr 2016 22:24:51 +0200
From: Boris Brezillon <boris.brezillon@...e-electrons.com>
To: "Franklin S Cooper Jr." <fcooper@...com>
Cc: devicetree@...r.kernel.org, linux-omap@...r.kernel.org,
tony@...mide.com, nsekhar@...com, linux-kernel@...r.kernel.org,
linux-mtd@...ts.infradead.org, computersforpeace@...il.com,
dwmw2@...radead.org, rogerq@...com
Subject: Re: [PATCH v4 6/7] mtd: nand: omap2: Fix high memory dma prefetch
transfer
Hi Franklin,
On Wed, 13 Apr 2016 15:08:12 -0500
"Franklin S Cooper Jr." <fcooper@...com> wrote:
>
>
> On 03/21/2016 10:04 AM, Boris Brezillon wrote:
> > Hi Franklin,
> >
> > On Thu, 10 Mar 2016 17:56:42 -0600
> > Franklin S Cooper Jr <fcooper@...com> wrote:
> >
> >> Based on DMA documentation and testing using high memory buffer when
> >> doing dma transfers can lead to various issues including kernel
> >> panics.
> >
> > I guess it all comes from the vmalloced buffer case, which are not
> > guaranteed to be physically contiguous (one of the DMA requirement,
> > unless you have an iommu).
> >
> >>
> >> To workaround this simply use cpu copy. The amount of high memory
> >> buffers used are very uncommon so no noticeable performance hit should
> >> be seen.
> >
> > Hm, that's not necessarily true. UBI and UBIFS allocate their buffers
> > using vmalloc (vmalloced buffers fall in the high_memory region), and
> > those are likely to be dis-contiguous if you have NANDs with pages > 4k.
> >
> > I recently posted patches to ease sg_table creation from any kind of
> > virtual address [1][2]. Can you try them and let me know if it fixes
> > your problem?
>
> It looks like you won't be going forward with your patchset based on
> this thread [1].
Nope. According to Russell it's unsafe to do that.
> I can probably reword the patch description to avoid
> implying that it is uncommon to run into high mem buffers. Also DMA with
> NAND prefetch suffers from a reduction of performance compared to CPU
> polling with prefetch. This is largely due to the significant over head
> required to read such a small amount of data at a time. The
> optimizations I've worked on all revolved around reducing the cycles
> spent before executing the DMA request. Trying to make a high memory
> buffer able to be used by the DMA adds significant amount of cycles and
> your better off just using the cpu for performance reasons.
Okay.
One comment though, why not using virt_addr_valid() instead of
addr >= high_memory here?
Best Regards,
Boris
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
Powered by blists - more mailing lists