linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Grant Likely <grant.likely@secretlab.ca>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: David Brownell <dbrownell@users.sourceforge.net>,
	Eric Miao <eric.y.miao@gmail.com>,
	Vasily Khoruzhick <anarsoul@gmail.com>,
	Marek Vasut <marek.vasut@gmail.com>,
	spi-devel-general@lists.sourceforge.net,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3] pxa2xx_spi: fix memory corruption
Date: Fri, 15 Jul 2011 15:31:06 -0600	[thread overview]
Message-ID: <20110715213106.GM2833@ponder.secretlab.ca> (raw)
In-Reply-To: <20110715202421.GE24628@n2100.arm.linux.org.uk>

On Fri, Jul 15, 2011 at 09:24:21PM +0100, Russell King - ARM Linux wrote:
> On Fri, Jul 15, 2011 at 01:50:03PM -0600, Grant Likely wrote:
> > On Fri, Jul 15, 2011 at 09:12:42AM +0100, Russell King - ARM Linux wrote:
> > > On Thu, Jul 14, 2011 at 08:53:31PM -0600, Grant Likely wrote:
> > > > > +	u8 null_dma_buf_unaligned[16];
> > > > 
> > > > Don't dma buffers need to be cache-line aligned?  How large is the
> > > > actual transfer?  Using the __aligned() or __cacheline_aligned
> > > > attribute is the correct way to make sure you've got a data buffer
> > > > that can be used for DMA mixed with other stuff.  Then you don't need
> > > > to fool around with PTR_ALIGN or anything.
> > > 
> > > Err, did you not read the whole patch?
> > > 
> > > > > +	drv_data->null_dma_buf =
> > > > > +		(u32 *)PTR_ALIGN(&drv_data->null_dma_buf_unaligned, 8);
> > 
> > I read a lot of patches yesterday.  I may very well have missed
> > something.  I still don't see what you're referring to though.  If
> > the __aligned() was used inside the structure definition, then there
> > would be no need to have both the null_dma_buf pointer and the
> > null_dma_buf_unaligned buffer.  It would just be a correctly aligned
> > null_dma_buf.
> 
> That depends on the alignment guarantees from kmalloc, which may not be
> 8 bytes - we have this:
> 
> #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5)
> #define ARCH_SLAB_MINALIGN 8
> #endif
> 
> so presumably on !AEABI or arches < ARMv5, kmalloc _can_ return less than
> 8 byte alignments.  Which makes using __aligned() in the definition useless.
> 
> > Plus, I was asking about whether it was valid to use the structure as
> > allocated in DMA operations since it may very well end up in the same
> > cache line as the allocated structure.  Firstly, that could mean DMA
> > and the cache referencing the same memory which could cause
> > corruption, and secondly on ARM isn't it a problem to have DMA buffers
> > in memory that is also cache mapped?
> 
> For the second point, that depends on whether you're talking about the
> coherent stuff or the streaming stuff.
> 
> The coherent DMA API has entirely different semantics to streaming DMA API.
> The coherent DMA API allows for simultaneous access to the buffer by both
> the DMA device and the host CPU.
> 
> The streaming DMA API only allows exclusive access by either the DMA device
> or the host CPU.
> 
> Therefore, with the streaming DMA API, the only thing that's required is
> to ensure that data is visible in some manner to the DMA device.  If the
> DMA device can read from the CPU cache, then probably nothing's required.
> If not, then the data must be evicted from as many levels of cache that
> are necessary to make it visible.  Conversely, for DMA writes, what
> matters is the visibility of the data to the host CPU.

... plus care must be taken not to accidentally reload the line into
cache after it has been pushed out for DMA, which is a risk on
structures with embedded DMA buffers if other non-DMA elements end up
in the same cache line.  This is the situation I was wondering about.

Of course, as you mention, if the DMA hw is cache-coherent, this isn't
a problem.

g.

  reply	other threads:[~2011-07-15 21:31 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-09 21:14 [PATCH] pxa2xx_spi: fix memory corruption Vasily Khoruzhick
2011-07-09 23:05 ` Marek Vasut
2011-07-09 23:11   ` Russell King - ARM Linux
2011-07-10  7:14     ` Marek Vasut
     [not found]       ` <201107100914.45452.marek.vasut-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-07-10  7:57         ` Marek Vasut
2011-07-10 12:09           ` [PATCH v2] " Vasily Khoruzhick
2011-07-10 12:43             ` Marek Vasut
2011-07-10 13:09               ` Vasily Khoruzhick
2011-07-10 15:18                 ` [PATCH v3] " Vasily Khoruzhick
     [not found]                   ` <1310311099-24638-1-git-send-email-anarsoul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-07-14 12:17                     ` Vasily Khoruzhick
     [not found]                       ` <201107141517.36147.anarsoul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-07-14 12:21                         ` Marek Vasut
2011-07-15  2:53                     ` Grant Likely
2011-07-15  8:12                       ` Russell King - ARM Linux
     [not found]                         ` <20110715081242.GM23270-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2011-07-15 19:50                           ` Grant Likely
2011-07-15 20:24                             ` Russell King - ARM Linux
2011-07-15 21:31                               ` Grant Likely [this message]
2011-07-18 10:10                                 ` Russell King - ARM Linux
2011-07-18  7:56                       ` Vasily Khoruzhick
     [not found]                         ` <201107181056.51782.anarsoul-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2011-11-29 14:05                           ` Vasily Khoruzhick
2011-11-29 14:31                             ` Marek Vasut
2011-12-07 20:35                             ` Wolfram Sang
     [not found]                               ` <20111207203559.GB3744-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2011-12-08  8:19                                 ` [RESEND PATCH " Vasily Khoruzhick

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110715213106.GM2833@ponder.secretlab.ca \
    --to=grant.likely@secretlab.ca \
    --cc=anarsoul@gmail.com \
    --cc=dbrownell@users.sourceforge.net \
    --cc=eric.y.miao@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux@arm.linux.org.uk \
    --cc=marek.vasut@gmail.com \
    --cc=spi-devel-general@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).