linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Frode Isaksen <fisaksen-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
To: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org>,
	"broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org"
	<broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Russell King - ARM Linux
	<linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org>,
	"khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org"
	<khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>,
	"Nori, Sekhar" <nsekhar-l0cyMroinI0@public.gmane.org>,
	"linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"ptitiano-rdvid1DuHRBWk0Htik3J/w@public.gmane.org"
	<ptitiano-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@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: Mon, 20 Feb 2017 11:34:55 +0100	[thread overview]
Message-ID: <2a1954a3-edbd-7ac4-6fde-9b6d046a6560@baylibre.com> (raw)
In-Reply-To: <57721a60-52bb-c9d1-d5a7-ae450e7adcc0-l0cyMroinI0@public.gmane.org>



On 20/02/2017 10:47, Vignesh R wrote:
>
> On Monday 20 February 2017 02:56 PM, Frode Isaksen wrote:
>>
>> On 20/02/2017 07:55, Vignesh R wrote:
>>> On Friday 17 February 2017 05:37 PM, Russell King - ARM Linux wrote:
>>> [...]
>>>> 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.
>>>>
>>> I am debugging another issue with UBIFS wherein pages allocated by
>>> vmalloc are in highmem region that are not addressable using 32 bit
>>> addresses and is backed by LPAE. So, a 32 bit DMA cannot access these
>>> buffers at all.
>>> When dma_map_sg() is called to map these pages by spi_map_buf() the
>>> physical address is just truncated to 32 bit in pfn_to_dma() (as part of
>>> dma_map_sg() call). This results in random crashes as DMA starts
>>> accessing random memory during SPI read.
>>>
>>> Given, the above problem and also issue surrounding VIVT caches, I am
>>> thinking of may be using pre-allocated fixed size bounce buffer to
>>> handle buffers not in lowmem mapping.
>>> I have tried using 64KB pre-allocated buffer on TI DRA74 EVM with QSPI
>>> running at 76.8MHz and do not see any significant degradation in
>>> performance with UBIFS. Mainly because UBIFS seems to use vmalloc'd
>>> buffers only during initial preparing and mounting phase and not during
>>> file read/write.
>> I am seeing a bug caused by VIVT cache in 'read_ltab()' function. In this function, the vmalloc'ed buffer is of size 11. Isn't it better to use kmalloc in this case ?
> read_ltab() isn't the only place where vmalloc() is used. A quick grep
> for vmalloc on fs/ubifs/ shows about ~19 occurrence. I guess every
> vmalloc() call can potentially allocate memory from highmem and might
> potentially cause issue for VIVT and such aliasing caches.
> Fixing just one such case isn't going to help IMHO.
Of course fixing it only in one place is of course not going to help..
For the moment there are 3 solutions to the UBIFS DMA problem:
1) Always use bounce buffer for vmalloc'ed buffers - impacts everyone.
2) Remove use of vmalloc'ed buffers in UBIFS - is it possible ?
3) Flush cache in UBIFS when reading/wring vmalloc'ed buffers - does not fix the higmem case.
I will try to see if option 2) is possible.

Thanks,
Frode
>
>

--
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-20 10:34 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
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 [this message]
     [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=2a1954a3-edbd-7ac4-6fde-9b6d046a6560@baylibre.com \
    --to=fisaksen-rdvid1duhrbwk0htik3j/w@public.gmane.org \
    --cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=khilman-rdvid1DuHRBWk0Htik3J/w@public.gmane.org \
    --cc=linux-I+IVW8TIWO2tmTQ+vhA3Yw@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).