All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-01 14:14 ` Liviu Dudau
  0 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-01 14:14 UTC (permalink / raw)
  To: Brian Starkey
  Cc: Mali DP Maintainers, Daniel Vetter, David Airlie, DRI-devel,
	LKML, Jani Nikula, Sean Paul, Liviu Dudau

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 <brian.starkey@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
---

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

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-01 14:14 ` Liviu Dudau
  0 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-01 14:14 UTC (permalink / raw)
  To: Brian Starkey
  Cc: David Airlie, Liviu Dudau, LKML, Mali DP Maintainers, DRI-devel,
	Daniel Vetter

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 <brian.starkey@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
---

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

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-01 14:14 ` Liviu Dudau
@ 2017-11-10  4:26   ` Laurent Pinchart
  -1 siblings, 0 replies; 16+ messages in thread
From: Laurent Pinchart @ 2017-11-10  4:26 UTC (permalink / raw)
  To: dri-devel
  Cc: Liviu Dudau, Brian Starkey, David Airlie, Liviu Dudau, LKML,
	Mali DP Maintainers, Daniel Vetter

Hi Liviu,

Thank you for the patch.

On Wednesday, 1 November 2017 16:14:19 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: Brian Starkey <brian.starkey@arm.com>
> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> ---
> 
> 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.

CMA, as the memory allocator, doesn't care as it doesn't even see the sg 
table. The drm_gem_cma_helper is badly named as it doesn't depend on CMA, it 
should have been called drm_gem_dma_contig_helper or something similar.

The assumption at the base of that helper library is that the memory is DMA 
contiguous. Your patch guarantees that, so it should be fine. I've quickly 
checked the drivers using drm_gem_cma_prime_import_sg_table and none of them 
use cma_obj->sgt, so I think there's no risk of breakage. However, I would 
prefer if you updated the drm_gem_cma_object structure documentation to 
explicitly state that the sgt can contain multiple entries but that those 
entries are guaranteed to have contiguous DMA addresses.

With the documentation update,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

>  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);

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-10  4:26   ` Laurent Pinchart
  0 siblings, 0 replies; 16+ messages in thread
From: Laurent Pinchart @ 2017-11-10  4:26 UTC (permalink / raw)
  To: dri-devel
  Cc: David Airlie, Liviu Dudau, LKML, Mali DP Maintainers, Daniel Vetter

Hi Liviu,

Thank you for the patch.

On Wednesday, 1 November 2017 16:14:19 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: Brian Starkey <brian.starkey@arm.com>
> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> ---
> 
> 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.

CMA, as the memory allocator, doesn't care as it doesn't even see the sg 
table. The drm_gem_cma_helper is badly named as it doesn't depend on CMA, it 
should have been called drm_gem_dma_contig_helper or something similar.

The assumption at the base of that helper library is that the memory is DMA 
contiguous. Your patch guarantees that, so it should be fine. I've quickly 
checked the drivers using drm_gem_cma_prime_import_sg_table and none of them 
use cma_obj->sgt, so I think there's no risk of breakage. However, I would 
prefer if you updated the drm_gem_cma_object structure documentation to 
explicitly state that the sgt can contain multiple entries but that those 
entries are guaranteed to have contiguous DMA addresses.

With the documentation update,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

>  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);

-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-10  4:26   ` Laurent Pinchart
@ 2017-11-10 13:33     ` Liviu Dudau
  -1 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-10 13:33 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Daniel Vetter, Jani Nikula, Sean Paul, David Airlie,
	Brian Starkey, Mali DP Maintainers, DRI-devel, LKML, intel-gfx,
	Liviu Dudau

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 <laurent.pinchart@ideasonboard.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
---

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?

Many thanks,
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 {
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-10 13:33     ` Liviu Dudau
  0 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-10 13:33 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: David Airlie, intel-gfx, LKML, DRI-devel, Mali DP Maintainers,
	Daniel Vetter

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 <laurent.pinchart@ideasonboard.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
---

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?

Many thanks,
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 {
-- 
2.14.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* ✓ Fi.CI.BAT: success for drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-01 14:14 ` Liviu Dudau
  (?)
  (?)
@ 2017-11-10 14:19 ` Patchwork
  -1 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2017-11-10 14:19 UTC (permalink / raw)
  To: Liviu Dudau; +Cc: intel-gfx

== Series Details ==

Series: drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
URL   : https://patchwork.freedesktop.org/series/33602/
State : success

== Summary ==

Series 33602v1 drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
https://patchwork.freedesktop.org/api/1.0/series/33602/revisions/1/mbox/

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:444s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:458s
fi-blb-e6850     total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:382s
fi-bsw-n3050     total:289  pass:243  dwarn:0   dfail:0   fail:0   skip:46  time:535s
fi-bwr-2160      total:289  pass:183  dwarn:0   dfail:0   fail:0   skip:106 time:274s
fi-bxt-dsi       total:289  pass:259  dwarn:0   dfail:0   fail:0   skip:30  time:494s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:501s
fi-byt-j1900     total:289  pass:254  dwarn:0   dfail:0   fail:0   skip:35  time:498s
fi-byt-n2820     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:489s
fi-elk-e7500     total:289  pass:229  dwarn:0   dfail:0   fail:0   skip:60  time:425s
fi-gdg-551       total:289  pass:178  dwarn:1   dfail:0   fail:1   skip:109 time:265s
fi-glk-1         total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:540s
fi-hsw-4770      total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:430s
fi-hsw-4770r     total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:442s
fi-ilk-650       total:289  pass:228  dwarn:0   dfail:0   fail:0   skip:61  time:424s
fi-ivb-3520m     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:476s
fi-ivb-3770      total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:460s
fi-kbl-7500u     total:289  pass:264  dwarn:1   dfail:0   fail:0   skip:24  time:483s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:522s
fi-kbl-7567u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:478s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:535s
fi-pnv-d510      total:289  pass:222  dwarn:1   dfail:0   fail:0   skip:66  time:572s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:443s
fi-skl-6600u     total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:543s
fi-skl-6700hq    total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:565s
fi-skl-6700k     total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:528s
fi-skl-6770hq    total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:496s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:458s
fi-snb-2520m     total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:555s
fi-snb-2600      total:289  pass:249  dwarn:0   dfail:0   fail:0   skip:40  time:411s
Blacklisted hosts:
fi-cfl-s         total:289  pass:254  dwarn:3   dfail:0   fail:0   skip:32  time:536s
fi-cnl-y         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:552s
fi-glk-dsi       total:289  pass:259  dwarn:0   dfail:0   fail:0   skip:30  time:493s

c36994b067f0771eee4d3136f40c0c6040a8fa77 drm-tip: 2017y-11m-10d-11h-48m-19s UTC integration manifest
b0d0eb465a6f drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7061/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* ✓ Fi.CI.IGT: success for drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-01 14:14 ` Liviu Dudau
                   ` (2 preceding siblings ...)
  (?)
@ 2017-11-10 16:10 ` Patchwork
  -1 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2017-11-10 16:10 UTC (permalink / raw)
  To: Liviu Dudau; +Cc: intel-gfx

== Series Details ==

Series: drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
URL   : https://patchwork.freedesktop.org/series/33602/
State : success

== Summary ==

Test kms_busy:
        Subgroup extended-modeset-hang-oldfb-with-reset-render-c:
                dmesg-warn -> PASS       (shard-hsw) fdo#102249
Test kms_sysfs_edid_timing:
                pass       -> WARN       (shard-hsw) fdo#100047

fdo#102249 https://bugs.freedesktop.org/show_bug.cgi?id=102249
fdo#100047 https://bugs.freedesktop.org/show_bug.cgi?id=100047

shard-hsw        total:2584 pass:1452 dwarn:1   dfail:2   fail:10  skip:1118 time:9292s
Blacklisted hosts:
shard-apl        total:2584 pass:1603 dwarn:3   dfail:2   fail:21  skip:955 time:12880s
shard-kbl        total:2462 pass:1602 dwarn:22  dfail:6   fail:25  skip:804 time:9310s
shard-snb        total:2584 pass:1199 dwarn:1   dfail:2   fail:11  skip:1371 time:7791s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_7061/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-10 13:33     ` Liviu Dudau
@ 2017-11-11 12:47       ` Laurent Pinchart
  -1 siblings, 0 replies; 16+ messages in thread
From: Laurent Pinchart @ 2017-11-11 12:47 UTC (permalink / raw)
  To: Liviu Dudau
  Cc: Daniel Vetter, Jani Nikula, Sean Paul, David Airlie,
	Brian Starkey, Mali DP Maintainers, DRI-devel, LKML, intel-gfx,
	Liviu Dudau

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 <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> ---
> 
> 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.

>  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

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-11 12:47       ` Laurent Pinchart
  0 siblings, 0 replies; 16+ messages in thread
From: Laurent Pinchart @ 2017-11-11 12:47 UTC (permalink / raw)
  To: Liviu Dudau
  Cc: David Airlie, intel-gfx, Liviu Dudau, LKML, DRI-devel,
	Mali DP Maintainers, Daniel Vetter

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 <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> ---
> 
> 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.

>  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

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-11 12:47       ` Laurent Pinchart
@ 2017-11-15 13:04         ` Liviu Dudau
  -1 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-15 13:04 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Daniel Vetter, Jani Nikula, Sean Paul, David Airlie,
	Brian Starkey, Mali DP Maintainers, DRI-devel, LKML, intel-gfx

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 <laurent.pinchart@ideasonboard.com>
> > Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> > ---
> > 
> > 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!  /
  ---------------
    ¯\_(ツ)_/¯

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-15 13:04         ` Liviu Dudau
  0 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-15 13:04 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: David Airlie, intel-gfx, LKML, DRI-devel, Mali DP Maintainers,
	Daniel Vetter

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 <laurent.pinchart@ideasonboard.com>
> > Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> > ---
> > 
> > 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!  /
  ---------------
    ¯\_(ツ)_/¯
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-15 13:04         ` Liviu Dudau
@ 2017-11-15 14:24           ` Noralf Trønnes
  -1 siblings, 0 replies; 16+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:24 UTC (permalink / raw)
  To: Liviu Dudau, Laurent Pinchart
  Cc: David Airlie, intel-gfx, LKML, DRI-devel, Mali DP Maintainers,
	Daniel Vetter


Den 15.11.2017 14.04, skrev Liviu Dudau:
> 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 <laurent.pinchart@ideasonboard.com>
>>> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
>>> ---
>>>
>>> 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?

Sure, I can do it this evening.

Noralf.

>   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
>>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-15 14:24           ` Noralf Trønnes
  0 siblings, 0 replies; 16+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:24 UTC (permalink / raw)
  To: Liviu Dudau, Laurent Pinchart
  Cc: David Airlie, intel-gfx, LKML, DRI-devel, Mali DP Maintainers,
	Daniel Vetter


Den 15.11.2017 14.04, skrev Liviu Dudau:
> 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 <laurent.pinchart@ideasonboard.com>
>>> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
>>> ---
>>>
>>> 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?

Sure, I can do it this evening.

Noralf.

>   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
>>

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
  2017-11-15 14:24           ` Noralf Trønnes
@ 2017-11-15 14:41             ` Liviu Dudau
  -1 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-15 14:41 UTC (permalink / raw)
  To: Noralf Trønnes
  Cc: Laurent Pinchart, David Airlie, intel-gfx, LKML, DRI-devel,
	Mali DP Maintainers, Daniel Vetter

On Wed, Nov 15, 2017 at 03:24:41PM +0100, Noralf Trønnes wrote:
> 
> Den 15.11.2017 14.04, skrev Liviu Dudau:
> > 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 <laurent.pinchart@ideasonboard.com>
> > > > Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> > > > ---
> > > > 
> > > > 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?
> 
> Sure, I can do it this evening.

Cheers, much appreciated!

Best regards,
Liviu

> 
> Noralf.
> 
> >   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!  /
  ---------------
    ¯\_(ツ)_/¯

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v2] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1
@ 2017-11-15 14:41             ` Liviu Dudau
  0 siblings, 0 replies; 16+ messages in thread
From: Liviu Dudau @ 2017-11-15 14:41 UTC (permalink / raw)
  To: Noralf Trønnes
  Cc: David Airlie, intel-gfx, LKML, DRI-devel, Mali DP Maintainers,
	Laurent Pinchart, Daniel Vetter

On Wed, Nov 15, 2017 at 03:24:41PM +0100, Noralf Trønnes wrote:
> 
> Den 15.11.2017 14.04, skrev Liviu Dudau:
> > 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 <laurent.pinchart@ideasonboard.com>
> > > > Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
> > > > ---
> > > > 
> > > > 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?
> 
> Sure, I can do it this evening.

Cheers, much appreciated!

Best regards,
Liviu

> 
> Noralf.
> 
> >   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!  /
  ---------------
    ¯\_(ツ)_/¯
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2017-11-15 14:41 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-01 14:14 [PATCH] drm: gem_cma_helper.c: Allow importing of contiguous scatterlists with nents > 1 Liviu Dudau
2017-11-01 14:14 ` Liviu Dudau
2017-11-10  4:26 ` Laurent Pinchart
2017-11-10  4:26   ` Laurent Pinchart
2017-11-10 13:33   ` [PATCH v2] " Liviu Dudau
2017-11-10 13:33     ` Liviu Dudau
2017-11-11 12:47     ` Laurent Pinchart
2017-11-11 12:47       ` Laurent Pinchart
2017-11-15 13:04       ` Liviu Dudau
2017-11-15 13:04         ` Liviu Dudau
2017-11-15 14:24         ` Noralf Trønnes
2017-11-15 14:24           ` Noralf Trønnes
2017-11-15 14:41           ` Liviu Dudau
2017-11-15 14:41             ` Liviu Dudau
2017-11-10 14:19 ` ✓ Fi.CI.BAT: success for " Patchwork
2017-11-10 16:10 ` ✓ Fi.CI.IGT: " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.