From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: dma-mapping: clearing GFP_ZERO flag caused crashes of Ethernet on arc/hsdk board. From: Evgeniy Didin Message-Id: <1522170774.2593.9.camel@synopsys.com> Date: Tue, 27 Mar 2018 17:12:54 +0000 To: "dmaengine@vger.kernel.org" , "hch@lst.de" , "iommu@lists.linux-foundation.org" Cc: Eugeniy Paltsev , "linux-kernel@vger.kernel.org" , Alexey Brodkin , "jesper.nilsson@axis.com" , "geert@linux-m68k.org" , "linux-snps-arc@lists.infradead.org" List-ID: SGVsbG8sDQoNCkFmdGVyIGNvbW1pdCAgNTdiZjVhODk2M2Y4ICgiZG1hLW1hcHBpbmc6IGNsZWFy IGhhcm1mdWwgR0ZQXyogZmxhZ3MgaW4gY29tbW9uIGNvZGUiKSAgd2Ugbm90aWNlZCBwcm9ibGVt cyB3aXRoIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gb25lIG9mIG91ciBwbGF0Zm9ybXMgKG5hbWVs eSBBUkMgSFNESykuDQpJDQpuIHBhcnRpY3VsYXIgd2Ugc2VlIHRoYXQgcmVtb3ZhbCBvZiBfX0dG UF9aRVJPIGZsYWcgaW4gZnVuY3Rpb24gZG1hX2FsbG9jX2F0dHJzKCkgd2FzIHRoZSBjdWxwcml0 IGJlY2F1c2UgaW4gb3VyIGltcGxlbWVudGF0aW9uIG9mIGFyY19kbWFfYWxsb2MoKSB3ZSBvbmx5 IGFsbG9jYXRlIHplcm9lZCBwYWdlcyBpZg0KdGhhdCBmbGFnIGlzIGV4cGxpY2l0bHkgc2V0IGJ5 IHRoZSBjYWxsZXIuIE5vdyB3aXRoIHVuY29uZGl0aW9uYWwgcmVtb3ZhbCBvZiB0aGF0IGZsYWcg aW4gZG1hX2FsbG9jX2F0dHJzKCkgd2UgYWxsb2NhdGUgbm9uLXplcm9lZCBwYWdlcyBhbmQgdGhh dCBzZWVtIHRvIGNhdXNlIHByb2JsZW1zLg0KDQpGcm9tDQptZW50aW9uZWQgY29tbWl0IG1lc3Nh Z2UgSSBtYXkgY29uY2x1ZGUgdGhhdCBhcmNoaXRlY3R1cmFsIGNvZGUgaXMgc3VwcG9zZWQgdG8g YWx3YXlzIGFsbG9jYXRlIHplcm9lZCBwYWdlcyBidXQgSSBjYW5ub3QgZmluZCBhbnkgcmVxdWly ZW1lbnQgb2YgdGhhdCBpbiBrZXJuZWwncyBkb2N1bWVudGF0aW9uLg0KQ291bA0KZCB5b3UgcGxl YXNlIHBvaW50IG1lIHRvIHRoYXQgcmVxdWlyZW1lbnQgaWYgdGhhdCBleGlzdHMgYXQgYWxsLCB0 aGVuIHdlJ2xsIGltcGxlbWVudCBhIGZpeCBpbiBvdXIgYXJjaCBjb2RlIGxpa2UgdGhhdDoNCi0t LS0tLS0tLS0tLS0tLS0tLS0tLT44LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAgICAgICAg IHJldHVybiBOVUxMOw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjgtLS0tLS0tLS0tLS0tLS0tLS0t LS0NCg0KQmVzdCByZWdhcmRzLA0KRXZnZW5peSBEaWRpbgoKZGlmZiAtLWdpdA0KYS9hcmNoL2Fy Yy9tbS9kbWEuYyBiL2FyY2gvYXJjL21tL2RtYS5jDQppbmRleCAxZGNjNDA0YjVhZWMuLmM5MmU1 MTg0MTNhYSAxMDA2NDQNCi0tLSBhL2FyY2gvYXJjL21tL2RtYS5jDQorKysgYi9hcmNoL2FyYy9t bS9kbWEuYw0KQEAgLTMwLDcgKzMwLDcgQEAgc3RhdGljIHZvaWQgKmFyY19kbWFfYWxsb2Moc3Ry dWN0DQpkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsDQogICAgICB2b2lkICprdmFkZHI7DQogICAg ICBpbnQgbmVlZF9jb2ggPSAxLCBuZWVkX2t2YWRkciA9IDA7DQoNCi0gICAgICAgcGFnZSA9IGFs bG9jX3BhZ2VzKGdmcCwgb3JkZXIpOw0KKyAgICAgICBwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwIHwg X19HRlBfWkVSTywgb3JkZXIpOw0KICAgICANCmlmICghcGFnZSkNCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Evgeniy Didin Subject: dma-mapping: clearing GFP_ZERO flag caused crashes of Ethernet on arc/hsdk board. Date: Tue, 27 Mar 2018 17:12:54 +0000 Message-ID: <1522170774.2593.9.camel@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Language: en-US Content-ID: <9E5AD8C975D8E34FB958C62C38827BD4@internal.synopsys.com> Sender: linux-kernel-owner@vger.kernel.org To: "dmaengine@vger.kernel.org" , "hch@lst.de" , "iommu@lists.linux-foundation.org" Cc: Eugeniy Paltsev , "linux-kernel@vger.kernel.org" , Alexey Brodkin , "jesper.nilsson@axis.com" , "geert@linux-m68k.org" , "linux-snps-arc@lists.infradead.org" List-Id: iommu@lists.linux-foundation.org SGVsbG8sDQoNCkFmdGVyIGNvbW1pdCAgNTdiZjVhODk2M2Y4ICgiZG1hLW1hcHBpbmc6IGNsZWFy IGhhcm1mdWwgR0ZQXyogZmxhZ3MgaW4gY29tbW9uIGNvZGUiKSAgd2Ugbm90aWNlZCBwcm9ibGVt cyB3aXRoIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gb25lIG9mIG91ciBwbGF0Zm9ybXMgKG5hbWVs eSBBUkMgSFNESykuDQpJDQpuIHBhcnRpY3VsYXIgd2Ugc2VlIHRoYXQgcmVtb3ZhbCBvZiBfX0dG UF9aRVJPIGZsYWcgaW4gZnVuY3Rpb24gZG1hX2FsbG9jX2F0dHJzKCkgd2FzIHRoZSBjdWxwcml0 IGJlY2F1c2UgaW4gb3VyIGltcGxlbWVudGF0aW9uIG9mIGFyY19kbWFfYWxsb2MoKSB3ZSBvbmx5 IGFsbG9jYXRlIHplcm9lZCBwYWdlcyBpZg0KdGhhdCBmbGFnIGlzIGV4cGxpY2l0bHkgc2V0IGJ5 IHRoZSBjYWxsZXIuIE5vdyB3aXRoIHVuY29uZGl0aW9uYWwgcmVtb3ZhbCBvZiB0aGF0IGZsYWcg aW4gZG1hX2FsbG9jX2F0dHJzKCkgd2UgYWxsb2NhdGUgbm9uLXplcm9lZCBwYWdlcyBhbmQgdGhh dCBzZWVtIHRvIGNhdXNlIHByb2JsZW1zLg0KDQpGcm9tDQptZW50aW9uZWQgY29tbWl0IG1lc3Nh Z2UgSSBtYXkgY29uY2x1ZGUgdGhhdCBhcmNoaXRlY3R1cmFsIGNvZGUgaXMgc3VwcG9zZWQgdG8g YWx3YXlzIGFsbG9jYXRlIHplcm9lZCBwYWdlcyBidXQgSSBjYW5ub3QgZmluZCBhbnkgcmVxdWly ZW1lbnQgb2YgdGhhdCBpbiBrZXJuZWwncyBkb2N1bWVudGF0aW9uLg0KQ291bA0KZCB5b3UgcGxl YXNlIHBvaW50IG1lIHRvIHRoYXQgcmVxdWlyZW1lbnQgaWYgdGhhdCBleGlzdHMgYXQgYWxsLCB0 aGVuIHdlJ2xsIGltcGxlbWVudCBhIGZpeCBpbiBvdXIgYXJjaCBjb2RlIGxpa2UgdGhhdDoNCi0t LS0tLS0tLS0tLS0tLS0tLS0tLT44LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpkaWZmIC0tZ2l0DQph L2FyY2gvYXJjL21tL2RtYS5jIGIvYXJjaC9hcmMvbW0vZG1hLmMNCmluZGV4IDFkY2M0MDRiNWFl Yy4uYzkyZTUxODQxM2FhIDEwMDY0NA0KLS0tIGEvYXJjaC9hcmMvbW0vZG1hLmMNCisrKyBiL2Fy Y2gvYXJjL21tL2RtYS5jDQpAQCAtMzAsNyArMzAsNyBAQCBzdGF0aWMgdm9pZCAqYXJjX2RtYV9h bGxvYyhzdHJ1Y3QNCmRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwNCiAgICAgIHZvaWQgKmt2YWRk cjsNCiAgICAgIGludCBuZWVkX2NvaCA9IDEsIG5lZWRfa3ZhZGRyID0gMDsNCg0KLSAgICAgICBw YWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7DQorICAgICAgIHBhZ2UgPSBhbGxvY19wYWdl cyhnZnAgfCBfX0dGUF9aRVJPLCBvcmRlcik7DQogICAgIA0KaWYgKCFwYWdlKQ0KICAgICAgICAg ICAgICByZXR1cm4gTlVMTDsNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLT44LS0tLS0tLS0tLS0tLS0t LS0tLS0tDQoNCkJlc3QgcmVnYXJkcywNCkV2Z2VuaXkgRGlkaW4= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Evgeniy.Didin@synopsys.com (Evgeniy Didin) Date: Tue, 27 Mar 2018 17:12:54 +0000 Subject: dma-mapping: clearing GFP_ZERO flag caused crashes of Ethernet on arc/hsdk board. List-ID: Message-ID: <1522170774.2593.9.camel@synopsys.com> To: linux-snps-arc@lists.infradead.org Hello, After commit 57bf5a8963f8 ("dma-mapping: clear harmful GFP_* flags in common code") we noticed problems with Ethernet controller on one of our platforms (namely ARC HSDK). I n particular we see that removal of __GFP_ZERO flag in function dma_alloc_attrs() was the culprit because in our implementation of arc_dma_alloc() we only allocate zeroed pages if that flag is explicitly set by the caller. Now with unconditional removal of that flag in dma_alloc_attrs() we allocate non-zeroed pages and that seem to cause problems. From mentioned commit message I may conclude that architectural code is supposed to always allocate zeroed pages but I cannot find any requirement of that in kernel's documentation. Coul d you please point me to that requirement if that exists at all, then we'll implement a fix in our arch code like that: --------------------->8--------------------- diff --git a/arch/arc/mm/dma.c b/arch/arc/mm/dma.c index 1dcc404b5aec..c92e518413aa 100644 --- a/arch/arc/mm/dma.c +++ b/arch/arc/mm/dma.c @@ -30,7 +30,7 @@ static void *arc_dma_alloc(struct device *dev, size_t size, void *kvaddr; int need_coh = 1, need_kvaddr = 0; - page = alloc_pages(gfp, order); + page = alloc_pages(gfp | __GFP_ZERO, order); if (!page) return NULL; --------------------->8--------------------- Best regards, Evgeniy Didin