From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.free-electrons.com ([62.4.15.54]) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1cj37m-0002KS-R3 for linux-mtd@lists.infradead.org; Wed, 01 Mar 2017 12:12:57 +0000 Date: Wed, 1 Mar 2017 13:12:32 +0100 From: Boris Brezillon To: Frode Isaksen Cc: Cyrille Pitchen , Richard Weinberger , Vignesh R , David Woodhouse , Brian Norris , Marek Vasut , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org, linux-spi@vger.kernel.org Subject: Re: [RFC PATCH 1/2] mtd: spi-nor: Introduce bounce buffer to handle vmalloc'd buffers Message-ID: <20170301131232.1a3fd2d1@bbrezillon> In-Reply-To: <595ab823-cf40-3b27-55ec-3573cecb456b@baylibre.com> References: <20170227120839.16545-1-vigneshr@ti.com> <20170227120839.16545-2-vigneshr@ti.com> <8e441369-5c15-d711-1789-b55eadf33c8f@nod.at> <65b4a156-f2a8-4c5e-4399-2024a147d5ec@atmel.com> <20170301111805.0eb23b76@bbrezillon> <595ab823-cf40-3b27-55ec-3573cecb456b@baylibre.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , On Wed, 1 Mar 2017 12:18:30 +0100 Frode Isaksen wrote: > On 01/03/2017 11:18, Boris Brezillon wrote: > > On Wed, 1 Mar 2017 11:09:57 +0100 > > Cyrille Pitchen wrote: > > =20 > >> Le 28/02/2017 =C3=A0 22:39, Richard Weinberger a =C3=A9crit : =20 > >>> Vignesh, > >>> > >>> Am 27.02.2017 um 13:08 schrieb Vignesh R: =20 > >>>> Filesystems like UBIFS may pass vmalloc'd buffers to SPI NOR layer w= hich > >>>> will end up in SPI layer. SPI core does try to handle such buffers (= see > >>>> spi_map_buf()) by doing vmalloc_to_page() and creating scatterlist. = But, > >>>> its known that this does not work well with VIVT/aliasing cache > >>>> architectures. > >>>> This also fails when buffers are addressed using LPAE (buffers in re= gion > >>>> higher than 32 bit addressable region), if DMA is 32bit only. > >>>> > >>>> Introduce bounce buffers support in SPI NOR framework to handle > >>>> vmalloc'd buffers. Use a pre-allocated per flash bounce buffer equal= to > >>>> the sector size of the flash. Flash drivers can enable this feature = by > >>>> setting SNOR_F_USE_BOUNCE_BUFFER flag. > >>>> This would also enable SPI NOR drivers to safely use DMA in their > >>>> read/write callbacks. > >>>> > >>>> Signed-off-by: Vignesh R > >>>> --- > >>>> drivers/mtd/spi-nor/spi-nor.c | 30 +++++++++++++++++++++++++++--- > >>>> include/linux/mtd/spi-nor.h | 4 ++++ > >>>> 2 files changed, 31 insertions(+), 3 deletions(-) > >>>> > >>>> diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi= -nor.c > >>>> index 747645c74134..c241fefa5aff 100644 > >>>> --- a/drivers/mtd/spi-nor/spi-nor.c > >>>> +++ b/drivers/mtd/spi-nor/spi-nor.c > >>>> @@ -17,6 +17,7 @@ > >>>> #include > >>>> #include > >>>> #include > >>>> +#include > >>>> =20 > >>>> #include > >>>> #include > >>>> @@ -1205,11 +1206,21 @@ static int spi_nor_read(struct mtd_info *mtd= , loff_t from, size_t len, > >>>> =20 > >>>> while (len) { > >>>> loff_t addr =3D from; > >>>> + bool use_bb =3D false; > >>>> + u_char *dst_buf =3D buf; > >>>> + size_t buf_len =3D len; > >>>> =20 > >>>> if (nor->flags & SNOR_F_S3AN_ADDR_DEFAULT) > >>>> addr =3D spi_nor_s3an_addr_convert(nor, addr); > >>>> =20 > >>>> - ret =3D nor->read(nor, addr, len, buf); > >>>> + if (!virt_addr_valid(buf) && nor->bounce_buf) { =20 > >> Should we use is_vmalloc_addr() instead of virt_addr_valid() ? > >> > >> I guess virt_addr_valid() returns true even for kmalloc'ed buffers > >> however the copy into the bounce buffer should be avoided for kmalloc'= ed > >> memory. =20 > > The test is !virt_addr_valid(), so we won't use the bounce buffer for > > kmalloc-ed regions. I don't remember why we use virt_addr_valid() > > instead of is_vmalloc_addr() in the NAND framework, but there was a > > good reason (virt_addr_valid() is more restrictive, but I don't > > remember why it's safer :)) =20 > I think virt_addr_valid() picks up both kmap'ed and vmalloc'ed pages as n= ot valid... Thanks for the remainder. So we definitely want to use virt_addr_valid() here. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [RFC PATCH 1/2] mtd: spi-nor: Introduce bounce buffer to handle vmalloc'd buffers Date: Wed, 1 Mar 2017 13:12:32 +0100 Message-ID: <20170301131232.1a3fd2d1@bbrezillon> References: <20170227120839.16545-1-vigneshr@ti.com> <20170227120839.16545-2-vigneshr@ti.com> <8e441369-5c15-d711-1789-b55eadf33c8f@nod.at> <65b4a156-f2a8-4c5e-4399-2024a147d5ec@atmel.com> <20170301111805.0eb23b76@bbrezillon> <595ab823-cf40-3b27-55ec-3573cecb456b@baylibre.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <595ab823-cf40-3b27-55ec-3573cecb456b@baylibre.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org To: Frode Isaksen Cc: linux-omap@vger.kernel.org, Vignesh R , Richard Weinberger , linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org, Marek Vasut , linux-mtd@lists.infradead.org, Cyrille Pitchen , Brian Norris , David Woodhouse List-Id: linux-omap@vger.kernel.org T24gV2VkLCAxIE1hciAyMDE3IDEyOjE4OjMwICswMTAwCkZyb2RlIElzYWtzZW4gPGZpc2Frc2Vu QGJheWxpYnJlLmNvbT4gd3JvdGU6Cgo+IE9uIDAxLzAzLzIwMTcgMTE6MTgsIEJvcmlzIEJyZXpp bGxvbiB3cm90ZToKPiA+IE9uIFdlZCwgMSBNYXIgMjAxNyAxMTowOTo1NyArMDEwMAo+ID4gQ3ly aWxsZSBQaXRjaGVuIDxjeXJpbGxlLnBpdGNoZW5AYXRtZWwuY29tPiB3cm90ZToKPiA+ICAKPiA+ PiBMZSAyOC8wMi8yMDE3IMOgIDIyOjM5LCBSaWNoYXJkIFdlaW5iZXJnZXIgYSDDqWNyaXQgOiAg Cj4gPj4+IFZpZ25lc2gsCj4gPj4+Cj4gPj4+IEFtIDI3LjAyLjIwMTcgdW0gMTM6MDggc2Nocmll YiBWaWduZXNoIFI6ICAgIAo+ID4+Pj4gRmlsZXN5c3RlbXMgbGlrZSBVQklGUyBtYXkgcGFzcyB2 bWFsbG9jJ2QgYnVmZmVycyB0byBTUEkgTk9SIGxheWVyIHdoaWNoCj4gPj4+PiB3aWxsIGVuZCB1 cCBpbiBTUEkgbGF5ZXIuIFNQSSBjb3JlIGRvZXMgdHJ5IHRvIGhhbmRsZSBzdWNoIGJ1ZmZlcnMg KHNlZQo+ID4+Pj4gc3BpX21hcF9idWYoKSkgYnkgZG9pbmcgdm1hbGxvY190b19wYWdlKCkgYW5k IGNyZWF0aW5nIHNjYXR0ZXJsaXN0LiBCdXQsCj4gPj4+PiBpdHMga25vd24gdGhhdCB0aGlzIGRv ZXMgbm90IHdvcmsgd2VsbCB3aXRoIFZJVlQvYWxpYXNpbmcgY2FjaGUKPiA+Pj4+IGFyY2hpdGVj dHVyZXMuCj4gPj4+PiBUaGlzIGFsc28gZmFpbHMgd2hlbiBidWZmZXJzIGFyZSBhZGRyZXNzZWQg dXNpbmcgTFBBRSAoYnVmZmVycyBpbiByZWdpb24KPiA+Pj4+IGhpZ2hlciB0aGFuIDMyIGJpdCBh ZGRyZXNzYWJsZSByZWdpb24pLCBpZiBETUEgaXMgMzJiaXQgb25seS4KPiA+Pj4+Cj4gPj4+PiBJ bnRyb2R1Y2UgYm91bmNlIGJ1ZmZlcnMgc3VwcG9ydCBpbiBTUEkgTk9SIGZyYW1ld29yayB0byBo YW5kbGUKPiA+Pj4+IHZtYWxsb2MnZCBidWZmZXJzLiBVc2UgYSBwcmUtYWxsb2NhdGVkIHBlciBm bGFzaCBib3VuY2UgYnVmZmVyIGVxdWFsIHRvCj4gPj4+PiB0aGUgc2VjdG9yIHNpemUgb2YgdGhl IGZsYXNoLiBGbGFzaCBkcml2ZXJzIGNhbiBlbmFibGUgdGhpcyBmZWF0dXJlIGJ5Cj4gPj4+PiBz ZXR0aW5nIFNOT1JfRl9VU0VfQk9VTkNFX0JVRkZFUiBmbGFnLgo+ID4+Pj4gVGhpcyB3b3VsZCBh bHNvIGVuYWJsZSBTUEkgTk9SIGRyaXZlcnMgdG8gc2FmZWx5IHVzZSBETUEgaW4gdGhlaXIKPiA+ Pj4+IHJlYWQvd3JpdGUgY2FsbGJhY2tzLgo+ID4+Pj4KPiA+Pj4+IFNpZ25lZC1vZmYtYnk6IFZp Z25lc2ggUiA8dmlnbmVzaHJAdGkuY29tPgo+ID4+Pj4gLS0tCj4gPj4+PiAgZHJpdmVycy9tdGQv c3BpLW5vci9zcGktbm9yLmMgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KPiA+ Pj4+ICBpbmNsdWRlL2xpbnV4L210ZC9zcGktbm9yLmggICB8ICA0ICsrKysKPiA+Pj4+ICAyIGZp bGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPj4+Pgo+ID4+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jIGIvZHJpdmVycy9t dGQvc3BpLW5vci9zcGktbm9yLmMKPiA+Pj4+IGluZGV4IDc0NzY0NWM3NDEzNC4uYzI0MWZlZmE1 YWZmIDEwMDY0NAo+ID4+Pj4gLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKPiA+ Pj4+ICsrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCj4gPj4+PiBAQCAtMTcsNiAr MTcsNyBAQAo+ID4+Pj4gICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ID4+Pj4gICNpbmNsdWRl IDxsaW51eC9tYXRoNjQuaD4KPiA+Pj4+ICAjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KPiA+Pj4+ ICsjaW5jbHVkZSA8bGludXgvbW0uaD4KPiA+Pj4+ICAKPiA+Pj4+ICAjaW5jbHVkZSA8bGludXgv bXRkL210ZC5oPgo+ID4+Pj4gICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgo+ID4+Pj4g QEAgLTEyMDUsMTEgKzEyMDYsMjEgQEAgc3RhdGljIGludCBzcGlfbm9yX3JlYWQoc3RydWN0IG10 ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAo+ID4+Pj4gIAo+ID4+Pj4gIAl3 aGlsZSAobGVuKSB7Cj4gPj4+PiAgCQlsb2ZmX3QgYWRkciA9IGZyb207Cj4gPj4+PiArCQlib29s IHVzZV9iYiA9IGZhbHNlOwo+ID4+Pj4gKwkJdV9jaGFyICpkc3RfYnVmID0gYnVmOwo+ID4+Pj4g KwkJc2l6ZV90IGJ1Zl9sZW4gPSBsZW47Cj4gPj4+PiAgCj4gPj4+PiAgCQlpZiAobm9yLT5mbGFn cyAmIFNOT1JfRl9TM0FOX0FERFJfREVGQVVMVCkKPiA+Pj4+ICAJCQlhZGRyID0gc3BpX25vcl9z M2FuX2FkZHJfY29udmVydChub3IsIGFkZHIpOwo+ID4+Pj4gIAo+ID4+Pj4gLQkJcmV0ID0gbm9y LT5yZWFkKG5vciwgYWRkciwgbGVuLCBidWYpOwo+ID4+Pj4gKwkJaWYgKCF2aXJ0X2FkZHJfdmFs aWQoYnVmKSAmJiBub3ItPmJvdW5jZV9idWYpIHsgICAgCj4gPj4gU2hvdWxkIHdlIHVzZSBpc192 bWFsbG9jX2FkZHIoKSBpbnN0ZWFkIG9mIHZpcnRfYWRkcl92YWxpZCgpID8KPiA+Pgo+ID4+IEkg Z3Vlc3MgdmlydF9hZGRyX3ZhbGlkKCkgcmV0dXJucyB0cnVlIGV2ZW4gZm9yIGttYWxsb2MnZWQg YnVmZmVycwo+ID4+IGhvd2V2ZXIgdGhlIGNvcHkgaW50byB0aGUgYm91bmNlIGJ1ZmZlciBzaG91 bGQgYmUgYXZvaWRlZCBmb3Iga21hbGxvYydlZAo+ID4+IG1lbW9yeS4gIAo+ID4gVGhlIHRlc3Qg aXMgIXZpcnRfYWRkcl92YWxpZCgpLCBzbyB3ZSB3b24ndCB1c2UgdGhlIGJvdW5jZSBidWZmZXIg Zm9yCj4gPiBrbWFsbG9jLWVkIHJlZ2lvbnMuIEkgZG9uJ3QgcmVtZW1iZXIgd2h5IHdlIHVzZSB2 aXJ0X2FkZHJfdmFsaWQoKQo+ID4gaW5zdGVhZCBvZiBpc192bWFsbG9jX2FkZHIoKSBpbiB0aGUg TkFORCBmcmFtZXdvcmssIGJ1dCB0aGVyZSB3YXMgYQo+ID4gZ29vZCByZWFzb24gKHZpcnRfYWRk cl92YWxpZCgpIGlzIG1vcmUgcmVzdHJpY3RpdmUsIGJ1dCBJIGRvbid0Cj4gPiByZW1lbWJlciB3 aHkgaXQncyBzYWZlciA6KSkgIAo+IEkgdGhpbmsgdmlydF9hZGRyX3ZhbGlkKCkgcGlja3MgdXAg Ym90aCBrbWFwJ2VkIGFuZCB2bWFsbG9jJ2VkIHBhZ2VzIGFzIG5vdCB2YWxpZC4uLgoKVGhhbmtz IGZvciB0aGUgcmVtYWluZGVyLiBTbyB3ZSBkZWZpbml0ZWx5IHdhbnQgdG8gdXNlCnZpcnRfYWRk cl92YWxpZCgpIGhlcmUuCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==