linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Russell King - ARM Linux <linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org>
To: Frode Isaksen <fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
Cc: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org>,
	khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org,
	nsekhar-l0cyMroinI0@public.gmane.org,
	linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	ptitiano-rdvid1DuHRBWk0Htik3J/w@public.gmane.org,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH v2 4/6] spi: davinci: flush caches when performing DMA
Date: Fri, 17 Feb 2017 12:07:49 +0000	[thread overview]
Message-ID: <20170217120749.GF21222@n2100.armlinux.org.uk> (raw)
In-Reply-To: <eaf93c6c-52a7-826b-9c53-2b13c0b280ca-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>

On Fri, Feb 17, 2017 at 12:36:17PM +0100, Frode Isaksen wrote:
> On 17/02/2017 12:22, Russell King - ARM Linux wrote:
> > The DMA API deals with the _kernel_ lowmem mapping.  It has no knowledge
> > of any other aliases in the system.  When you have a VIVT cache (as all
> > old ARM CPUs have) then if you access the memory through a different
> > alias from the kernel lowmem mapping (iow, vmalloc) then the DMA API
> > can't help you.
> >
> > However, the correct place to use flush_kernel_vmap_range() etc is not
> > in drivers - it's supposed to be done in the callers that know that
> > the memory is aliased.
> 
> OK, so this should be done in the ubifs layer instead ? xfs already does
> this, but no other fs.

These APIs were created when XFS was being used on older ARMs and people
experienced corruption.  XFS was the only filesystem driver which wanted
to do this (horrid, imho) DMA to memory that it accessed via a vmalloc
area mapping.

If ubifs is also doing this, it's followed XFS down the same route, but
ignored the need for additional flushing.

The down-side to adding this at the filesystem layer is that you get the
impact whether or not the driver does DMA.  However, for XFS that's
absolutely necessary, as block devices will transfer to the kernel lowmem
mapping, which itself will alias with the vmalloc area mapping.

SPI is rather another special case - rather than SPI following the
established mechanism of passing data references via scatterlists or
similar, it also passes them via virtual addresses, which means SPI
can directly access the vmalloc area when performing PIO.  This
really makes the problem more complex, because it means that if you
do have a SPI driver that does that, it's going to be reading/writing
direct from vmalloc space.

That's not a problem as long as the data is only accessed via vmalloc
space, but it will definitely go totally wrong if the data is
subsequently mapped into userspace.

The other important thing to realise is that the interfaces in
cachetlb.txt assume that it's the lowmem mapping that will be accessed,
and the IO device will push that data out to physical memory (either via
the DMA API, or flush_kernel_dcache_page()).  That's not true of SPI,
as it passes virtual addresses around.

So... overall, I'm not sure that this problem is properly solvable given
SPIs insistance on passing virtual addresses and the differences in this
area between SPI and block.

What I'm quite sure about is that adding yet more cache flushing
interfaces for legacy cache types really isn't the way forward.

-- 
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-02-17 12:07 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-17 10:38 [PATCH v2 0/6] Enable DMA for daVinci SPI controller Frode Isaksen
     [not found] ` <1487327904-28311-1-git-send-email-fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-17 10:38   ` [PATCH v2 1/6] spi: davinci: Use SPI framework to handle DMA mapping Frode Isaksen
     [not found]     ` <1487327904-28311-2-git-send-email-fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-19 16:29       ` Mark Brown
2017-02-17 10:38   ` [PATCH v2 2/6] spi: davinci: enable DMA when channels are defined in DT Frode Isaksen
     [not found]     ` <1487327904-28311-3-git-send-email-fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-19 16:30       ` Mark Brown
2017-02-17 10:38   ` [PATCH v2 3/6] spi: davinci: use rx buffer as dummy tx buffer Frode Isaksen
     [not found]     ` <1487327904-28311-4-git-send-email-fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-03-15 19:37       ` Applied "spi: davinci: use rx buffer as dummy tx buffer" to the spi tree Mark Brown
2017-02-17 10:38   ` [PATCH v2 4/6] spi: davinci: flush caches when performing DMA Frode Isaksen
     [not found]     ` <1487327904-28311-5-git-send-email-fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-17 10:57       ` Vignesh R
     [not found]         ` <5fab0c33-6e1d-c63a-8758-6672236045a7-l0cyMroinI0@public.gmane.org>
2017-02-17 11:22           ` Russell King - ARM Linux
     [not found]             ` <20170217112247.GE21222-l+eeeJia6m9URfEZ8mYm6t73F7V6hmMc@public.gmane.org>
2017-02-17 11:36               ` Frode Isaksen
     [not found]                 ` <eaf93c6c-52a7-826b-9c53-2b13c0b280ca-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-17 12:07                   ` Russell King - ARM Linux [this message]
2017-02-17 17:45                     ` Frode Isaksen
     [not found]                     ` <20170217120749.GF21222-l+eeeJia6m9URfEZ8mYm6t73F7V6hmMc@public.gmane.org>
2017-02-20  6:55                       ` Vignesh R
     [not found]                         ` <0f3607fd-4542-be92-da2e-b2da6f8ac26f-l0cyMroinI0@public.gmane.org>
2017-02-20  9:26                           ` Frode Isaksen
     [not found]                             ` <f0fcc000-6c07-647a-ada2-04b61f0e2e3b-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-20  9:47                               ` Vignesh R
     [not found]                                 ` <57721a60-52bb-c9d1-d5a7-ae450e7adcc0-l0cyMroinI0@public.gmane.org>
2017-02-20 10:34                                   ` Frode Isaksen
     [not found]                                     ` <2a1954a3-edbd-7ac4-6fde-9b6d046a6560-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-20 11:27                                       ` Vignesh R
     [not found]                                         ` <954333da-4d15-ce77-4021-268530365edc-l0cyMroinI0@public.gmane.org>
2017-02-20 15:49                                           ` Frode Isaksen
     [not found]                                             ` <69d41f8a-371b-abd9-7e78-f8701652877f-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-21  5:08                                               ` Vignesh R
2017-02-17 10:38   ` [PATCH v2 5/6] spi: davinci: do not use DMA if transfer length is less than 16 Frode Isaksen
     [not found]     ` <1487327904-28311-6-git-send-email-fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-17 16:37       ` Arnd Bergmann
     [not found]         ` <CAK8P3a24HkxrU-6a727RY5JqwQgyf9SpprPXvurSqf1Q_W_AMQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-17 16:43           ` Frode Isaksen
     [not found]             ` <3358b5f1-c7b6-0955-0c36-6f135a585762-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-02-17 16:55               ` Arnd Bergmann
2017-02-17 10:38   ` [PATCH v2 6/6] spi: loopback-test: add option to use vmalloc'ed buffers Frode Isaksen

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=20170217120749.GF21222@n2100.armlinux.org.uk \
    --to=linux-i+ivw8tiwo2tmtq+vha3yw@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org \
    --cc=khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=nsekhar-l0cyMroinI0@public.gmane.org \
    --cc=ptitiano-rdvid1DuHRBWk0Htik3J/w@public.gmane.org \
    --cc=vigneshr-l0cyMroinI0@public.gmane.org \
    /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).