From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757672AbdKONFB (ORCPT ); Wed, 15 Nov 2017 08:05:01 -0500 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:39376 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751410AbdKONEx (ORCPT ); Wed, 15 Nov 2017 08:04:53 -0500 Date: Wed, 15 Nov 2017 13:04:50 +0000 From: Liviu Dudau To: Laurent Pinchart Cc: Daniel Vetter , Jani Nikula , Sean Paul , David Airlie , Brian Starkey , Mali DP Maintainers , DRI-devel , LKML , intel-gfx@lists.freedesktop.org Subject: Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1 Message-ID: <20171115130450.GA31361@e110455-lin.cambridge.arm.com> References: <2213365.Z1vsgl9bDt@avalon> <20171110133310.1225-1-Liviu.Dudau@arm.com> <26071297.cMn4QuKrlS@avalon> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <26071297.cMn4QuKrlS@avalon> User-Agent: Mutt/1.9.1 (2017-09-22) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Sat, Nov 11, 2017 at 02:47:35PM +0200, Laurent Pinchart wrote: > Hi Liviu, > > Thank you for the patch. > > On Friday, 10 November 2017 15:33:10 EET Liviu Dudau wrote: > > 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: Laurent Pinchart > > Signed-off-by: Liviu Dudau > > --- > > > > Laurent, > > > > Thanks for the review! I would like to ask for one more favour: if you > > are OK with this version, can you pull this patch through the drm-misc tree? > > I could, but I'd first need to set dim up, and I'm currently abroad with a bad > internet connection and a big deadline for the middle of next week (I know, > lots of excuses), so it's not very convenient for me at this time. Any other drm-misc maintainers feeling helpful and willing to take this patch in? Otherwise I can send it through the mali-dp tree if no one objects. Best regards, Liviu > > > drivers/gpu/drm/drm_gem_cma_helper.c | 22 ++++++++++++++++++++-- > > include/drm/drm_gem_cma_helper.h | 4 +++- > > 2 files changed, 23 insertions(+), 3 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); > > diff --git a/include/drm/drm_gem_cma_helper.h > > b/include/drm/drm_gem_cma_helper.h index 58a739bf15f1f..214aa85adc8d5 > > 100644 > > --- a/include/drm/drm_gem_cma_helper.h > > +++ b/include/drm/drm_gem_cma_helper.h > > @@ -8,7 +8,9 @@ > > * struct drm_gem_cma_object - GEM object backed by CMA memory allocations > > * @base: base GEM object > > * @paddr: physical address of the backing memory > > - * @sgt: scatter/gather table for imported PRIME buffers > > + * @sgt: scatter/gather table for imported PRIME buffers. The table can > > have + * more than one entry but they are guaranteed to have > > contiguous + * DMA addresses. > > * @vaddr: kernel virtual address of the backing memory > > */ > > struct drm_gem_cma_object { > > -- > Regards, > > Laurent Pinchart > -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯ From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1 Date: Wed, 15 Nov 2017 13:04:50 +0000 Message-ID: <20171115130450.GA31361@e110455-lin.cambridge.arm.com> References: <2213365.Z1vsgl9bDt@avalon> <20171110133310.1225-1-Liviu.Dudau@arm.com> <26071297.cMn4QuKrlS@avalon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <26071297.cMn4QuKrlS@avalon> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: David Airlie , intel-gfx@lists.freedesktop.org, LKML , DRI-devel , Mali DP Maintainers , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org SGksCgpPbiBTYXQsIE5vdiAxMSwgMjAxNyBhdCAwMjo0NzozNVBNICswMjAwLCBMYXVyZW50IFBp bmNoYXJ0IHdyb3RlOgo+IEhpIExpdml1LAo+IAo+IFRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgo+ IAo+IE9uIEZyaWRheSwgMTAgTm92ZW1iZXIgMjAxNyAxNTozMzoxMCBFRVQgTGl2aXUgRHVkYXUg d3JvdGU6Cj4gPiBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoKSB3aWxsIGZhaWwg aWYgdGhlIG51bWJlciBvZiBlbnRyaWVzCj4gPiBpbiB0aGUgc2dfdGFibGUgPiAxLiBIb3dldmVy LCB5b3UgY2FuIGhhdmUgYSBkZXZpY2UgdGhhdCB1c2VzIGFuIElPTU1VCj4gPiBlbmdpbmUgYW5k IGNhbiBtYXAgYSBkaXNjb250aWd1b3VzIGJ1ZmZlciB3aXRoIG11bHRpcGxlIGVudHJpZXMgdGhh dAo+ID4gaGF2ZSBjb25zZWN1dGl2ZSBzZ19kbWFfYWRkcmVzc2VzLCBlZmZlY3RpdmVseSBtYWtp bmcgaXQgY29udGlndW91cy4KPiA+IEFsbG93IGZvciB0aGF0IHNjZW5hcmlvIGJ5IHRlc3Rpbmcg dGhlIGVudHJpZXMgaW4gdGhlIHNnX3RhYmxlIGZvcgo+ID4gY29udGlndW91cyBjb3ZlcmFnZS4K PiA+IAo+ID4gUmV2aWV3ZWQtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRA aWRlYXNvbmJvYXJkLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IExpdml1IER1ZGF1IDxsaXZpdS5k dWRhdUBhcm0uY29tPgo+ID4gLS0tCj4gPiAKPiA+IExhdXJlbnQsCj4gPiAKPiA+IFRoYW5rcyBm b3IgdGhlIHJldmlldyEgSSB3b3VsZCBsaWtlIHRvIGFzayBmb3Igb25lIG1vcmUgZmF2b3VyOiBp ZiB5b3UKPiA+IGFyZSBPSyB3aXRoIHRoaXMgdmVyc2lvbiwgY2FuIHlvdSBwdWxsIHRoaXMgcGF0 Y2ggdGhyb3VnaCB0aGUgZHJtLW1pc2MgdHJlZT8KPiAKPiBJIGNvdWxkLCBidXQgSSdkIGZpcnN0 IG5lZWQgdG8gc2V0IGRpbSB1cCwgYW5kIEknbSBjdXJyZW50bHkgYWJyb2FkIHdpdGggYSBiYWQg Cj4gaW50ZXJuZXQgY29ubmVjdGlvbiBhbmQgYSBiaWcgZGVhZGxpbmUgZm9yIHRoZSBtaWRkbGUg b2YgbmV4dCB3ZWVrIChJIGtub3csIAo+IGxvdHMgb2YgZXhjdXNlcyksIHNvIGl0J3Mgbm90IHZl cnkgY29udmVuaWVudCBmb3IgbWUgYXQgdGhpcyB0aW1lLgoKQW55IG90aGVyIGRybS1taXNjIG1h aW50YWluZXJzIGZlZWxpbmcgaGVscGZ1bCBhbmQgd2lsbGluZyB0byB0YWtlIHRoaXMKcGF0Y2gg aW4/IE90aGVyd2lzZSBJIGNhbiBzZW5kIGl0IHRocm91Z2ggdGhlIG1hbGktZHAgdHJlZSBpZiBu byBvbmUKb2JqZWN0cy4KCkJlc3QgcmVnYXJkcywKTGl2aXUKCj4gCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2RybV9nZW1fY21hX2hlbHBlci5jIHwgMjIgKysrKysrKysrKysrKysrKysrKystLQo+ID4g IGluY2x1ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oICAgICB8ICA0ICsrKy0KPiA+ICAyIGZp bGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmMKPiA+IGIvZHJp dmVycy9ncHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jIGluZGV4IDAyMGU3NjY4ZGZhYmEuLjQz YjE3OTIxMjA1MmQKPiA+IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f Y21hX2hlbHBlci5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9jbWFfaGVscGVy LmMKPiA+IEBAIC00ODIsOCArNDgyLDI2IEBAIGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190 YWJsZShzdHJ1Y3QgZHJtX2RldmljZQo+ID4gKmRldiwgewo+ID4gIAlzdHJ1Y3QgZHJtX2dlbV9j bWFfb2JqZWN0ICpjbWFfb2JqOwo+ID4gCj4gPiAtCWlmIChzZ3QtPm5lbnRzICE9IDEpCj4gPiAt CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ICsJaWYgKHNndC0+bmVudHMgIT0gMSkgewo+ ID4gKwkJLyogY2hlY2sgaWYgdGhlIGVudHJpZXMgaW4gdGhlIHNnX3RhYmxlIGFyZSBjb250aWd1 b3VzICovCj4gPiArCQlkbWFfYWRkcl90IG5leHRfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNndC0+ c2dsKTsKPiA+ICsJCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKPiA+ICsJCXVuc2lnbmVkIGludCBp Owo+ID4gKwo+ID4gKwkJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHMsIHNndC0+bmVudHMsIGkpIHsK PiA+ICsJCQkvKgo+ID4gKwkJCSAqIHNnX2RtYV9hZGRyZXNzKHMpIGlzIG9ubHkgdmFsaWQgZm9y IGVudHJpZXMKPiA+ICsJCQkgKiB0aGF0IGhhdmUgc2dfZG1hX2xlbihzKSAhPSAwCj4gPiArCQkJ ICovCj4gPiArCQkJaWYgKCFzZ19kbWFfbGVuKHMpKQo+ID4gKwkJCQljb250aW51ZTsKPiA+ICsK PiA+ICsJCQlpZiAoc2dfZG1hX2FkZHJlc3MocykgIT0gbmV4dF9hZGRyKQo+ID4gKwkJCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ICsKPiA+ICsJCQluZXh0X2FkZHIgPSBzZ19kbWFfYWRk cmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+IAo+ID4gIAkvKiBD cmVhdGUgYSBDTUEgR0VNIGJ1ZmZlci4gKi8KPiA+ICAJY21hX29iaiA9IF9fZHJtX2dlbV9jbWFf Y3JlYXRlKGRldiwgYXR0YWNoLT5kbWFidWYtPnNpemUpOwo+ID4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oCj4gPiBiL2luY2x1ZGUvZHJtL2RybV9nZW1fY21h X2hlbHBlci5oIGluZGV4IDU4YTczOWJmMTVmMWYuLjIxNGFhODVhZGM4ZDUKPiA+IDEwMDY0NAo+ ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9jbWFfaGVscGVyLmgKPiA+ICsrKyBiL2luY2x1 ZGUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5oCj4gPiBAQCAtOCw3ICs4LDkgQEAKPiA+ICAgKiBz dHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgQ01BIG1lbW9y eSBhbGxvY2F0aW9ucwo+ID4gICAqIEBiYXNlOiBiYXNlIEdFTSBvYmplY3QKPiA+ICAgKiBAcGFk ZHI6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGJhY2tpbmcgbWVtb3J5Cj4gPiAtICogQHNndDog c2NhdHRlci9nYXRoZXIgdGFibGUgZm9yIGltcG9ydGVkIFBSSU1FIGJ1ZmZlcnMKPiA+ICsgKiBA c2d0OiBzY2F0dGVyL2dhdGhlciB0YWJsZSBmb3IgaW1wb3J0ZWQgUFJJTUUgYnVmZmVycy4gVGhl IHRhYmxlIGNhbgo+ID4gaGF2ZSArICogICAgICAgbW9yZSB0aGFuIG9uZSBlbnRyeSBidXQgdGhl eSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlCj4gPiBjb250aWd1b3VzICsgKiAgICAgICBETUEgYWRk cmVzc2VzLgo+ID4gICAqIEB2YWRkcjoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYmFj a2luZyBtZW1vcnkKPiA+ICAgKi8KPiA+ICBzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0IHsKPiAK PiAtLSAKPiBSZWdhcmRzLAo+IAo+IExhdXJlbnQgUGluY2hhcnQKPiAKCi0tIAo9PT09PT09PT09 PT09PT09PT09PQp8IEkgd291bGQgbGlrZSB0byB8CnwgZml4IHRoZSB3b3JsZCwgIHwKfCBidXQg dGhleSdyZSBub3QgfAp8IGdpdmluZyBtZSB0aGUgICB8CiBcIHNvdXJjZSBjb2RlISAgLwogIC0t LS0tLS0tLS0tLS0tLQogICAgwq9cXyjjg4QpXy/CrwpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK