From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754701AbdKAOOb (ORCPT ); Wed, 1 Nov 2017 10:14:31 -0400 Received: from fw-tnat.cambridge.arm.com ([217.140.96.140]:12530 "EHLO cam-smtp0.cambridge.arm.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754625AbdKAOOa (ORCPT ); Wed, 1 Nov 2017 10:14:30 -0400 From: Liviu Dudau To: Brian Starkey Cc: Mali DP Maintainers , Daniel Vetter , David Airlie , DRI-devel , LKML , Jani Nikula , Sean Paul , Liviu Dudau Subject: [PATCH] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1 Date: Wed, 1 Nov 2017 14:14:19 +0000 Message-Id: <20171101141419.3180-1-Liviu.Dudau@arm.com> X-Mailer: git-send-email 2.14.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org drm_gem_cma_prime_import_sg_table() will fail if the number of entries in the sg_table > 1. However, you can have a device that uses an IOMMU engine and can map a discontiguous buffer with multiple entries that have consecutive sg_dma_addresses, effectively making it contiguous. Allow for that scenario by testing the entries in the sg_table for contiguous coverage. Reviewed-by: Brian Starkey Signed-off-by: Liviu Dudau --- Hi, This patch is the only change I need in order to be able to use existing IOMMU domain infrastructure with the Mali DP driver. I have tested the patch and I know it works correctly for my setup, but I would like to get some comments on whether I am on the right path or if CMA really wants to see an sg_table with only one entry. Best regards, Liviu drivers/gpu/drm/drm_gem_cma_helper.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c index 020e7668dfaba..43b179212052d 100644 --- a/drivers/gpu/drm/drm_gem_cma_helper.c +++ b/drivers/gpu/drm/drm_gem_cma_helper.c @@ -482,8 +482,26 @@ drm_gem_cma_prime_import_sg_table(struct drm_device *dev, { struct drm_gem_cma_object *cma_obj; - if (sgt->nents != 1) - return ERR_PTR(-EINVAL); + if (sgt->nents != 1) { + /* check if the entries in the sg_table are contiguous */ + dma_addr_t next_addr = sg_dma_address(sgt->sgl); + struct scatterlist *s; + unsigned int i; + + for_each_sg(sgt->sgl, s, sgt->nents, i) { + /* + * sg_dma_address(s) is only valid for entries + * that have sg_dma_len(s) != 0 + */ + if (!sg_dma_len(s)) + continue; + + if (sg_dma_address(s) != next_addr) + return ERR_PTR(-EINVAL); + + next_addr = sg_dma_address(s) + sg_dma_len(s); + } + } /* Create a CMA GEM buffer. */ cma_obj = __drm_gem_cma_create(dev, attach->dmabuf->size); -- 2.14.3 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: [PATCH] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1 Date: Wed, 1 Nov 2017 14:14:19 +0000 Message-ID: <20171101141419.3180-1-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from cam-smtp0.cambridge.arm.com (fw-tnat.cambridge.arm.com [217.140.96.140]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7D1436E74D for ; Wed, 1 Nov 2017 14:14:28 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Brian Starkey Cc: David Airlie , Liviu Dudau , LKML , Mali DP Maintainers , DRI-devel , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org ZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlKCkgd2lsbCBmYWlsIGlmIHRoZSBudW1i ZXIgb2YgZW50cmllcwppbiB0aGUgc2dfdGFibGUgPiAxLiBIb3dldmVyLCB5b3UgY2FuIGhhdmUg YSBkZXZpY2UgdGhhdCB1c2VzIGFuIElPTU1VCmVuZ2luZSBhbmQgY2FuIG1hcCBhIGRpc2NvbnRp Z3VvdXMgYnVmZmVyIHdpdGggbXVsdGlwbGUgZW50cmllcyB0aGF0CmhhdmUgY29uc2VjdXRpdmUg c2dfZG1hX2FkZHJlc3NlcywgZWZmZWN0aXZlbHkgbWFraW5nIGl0IGNvbnRpZ3VvdXMuCkFsbG93 IGZvciB0aGF0IHNjZW5hcmlvIGJ5IHRlc3RpbmcgdGhlIGVudHJpZXMgaW4gdGhlIHNnX3RhYmxl IGZvcgpjb250aWd1b3VzIGNvdmVyYWdlLgoKUmV2aWV3ZWQtYnk6IEJyaWFuIFN0YXJrZXkgPGJy aWFuLnN0YXJrZXlAYXJtLmNvbT4KU2lnbmVkLW9mZi1ieTogTGl2aXUgRHVkYXUgPGxpdml1LmR1 ZGF1QGFybS5jb20+Ci0tLQoKSGksCgpUaGlzIHBhdGNoIGlzIHRoZSBvbmx5IGNoYW5nZSBJIG5l ZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgZXhpc3RpbmcKSU9NTVUgZG9tYWluIGluZnJh c3RydWN0dXJlIHdpdGggdGhlIE1hbGkgRFAgZHJpdmVyLiBJIGhhdmUgdGVzdGVkIHRoZQpwYXRj aCBhbmQgSSBrbm93IGl0IHdvcmtzIGNvcnJlY3RseSBmb3IgbXkgc2V0dXAsIGJ1dCBJIHdvdWxk IGxpa2UgdG8gZ2V0CnNvbWUgY29tbWVudHMgb24gd2hldGhlciBJIGFtIG9uIHRoZSByaWdodCBw YXRoIG9yIGlmIENNQSByZWFsbHkgd2FudHMgdG8Kc2VlIGFuIHNnX3RhYmxlIHdpdGggb25seSBv bmUgZW50cnkuCgpCZXN0IHJlZ2FyZHMsCkxpdml1CgogZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f Y21hX2hlbHBlci5jIHwgMjIgKysrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQs IDIwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5jCmluZGV4IDAyMGU3NjY4ZGZhYmEuLjQzYjE3OTIxMjA1MmQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2dlbV9jbWFfaGVscGVyLmMKQEAgLTQ4Miw4ICs0ODIsMjYgQEAgZHJtX2dlbV9jbWFf cHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiB7CiAJc3RydWN0 IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKIAotCWlmIChzZ3QtPm5lbnRzICE9IDEpCi0J CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChzZ3QtPm5lbnRzICE9IDEpIHsKKwkJLyog Y2hlY2sgaWYgdGhlIGVudHJpZXMgaW4gdGhlIHNnX3RhYmxlIGFyZSBjb250aWd1b3VzICovCisJ CWRtYV9hZGRyX3QgbmV4dF9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2d0LT5zZ2wpOworCQlzdHJ1 Y3Qgc2NhdHRlcmxpc3QgKnM7CisJCXVuc2lnbmVkIGludCBpOworCisJCWZvcl9lYWNoX3NnKHNn dC0+c2dsLCBzLCBzZ3QtPm5lbnRzLCBpKSB7CisJCQkvKgorCQkJICogc2dfZG1hX2FkZHJlc3Mo cykgaXMgb25seSB2YWxpZCBmb3IgZW50cmllcworCQkJICogdGhhdCBoYXZlIHNnX2RtYV9sZW4o cykgIT0gMAorCQkJICovCisJCQlpZiAoIXNnX2RtYV9sZW4ocykpCisJCQkJY29udGludWU7CisK KwkJCWlmIChzZ19kbWFfYWRkcmVzcyhzKSAhPSBuZXh0X2FkZHIpCisJCQkJcmV0dXJuIEVSUl9Q VFIoLUVJTlZBTCk7CisKKwkJCW5leHRfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHMpICsgc2dfZG1h X2xlbihzKTsKKwkJfQorCX0KIAogCS8qIENyZWF0ZSBhIENNQSBHRU0gYnVmZmVyLiAqLwogCWNt YV9vYmogPSBfX2RybV9nZW1fY21hX2NyZWF0ZShkZXYsIGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsK LS0gCjIuMTQuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==