mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCHv2 0/3] iovmm: fixes for iovmm module
@ 2010-10-04 21:02 Fernando Guzman Lugo
  2010-10-04 21:02 ` [PATCHv2 1/3] iovmm: no gap checking for fixed address Fernando Guzman Lugo
  0 siblings, 1 reply; 9+ messages in thread
From: Fernando Guzman Lugo @ 2010-10-04 21:02 UTC (permalink / raw)
  To: Hiroshi.DOYU, david.cohen
  Cc: felipe.contreras, ameya.palande, linux-kernel, andy.shevchenko,
	linux-omap, Fernando Guzman Lugo

iovmm: fixes for iovmm module

Version 2:
* Removed "iovmm: fixes for iovmm module" that patch was already
  sent.
* Modified "iovmm: fix roundup for next area and end check for the
  last area" patch, base on Davin Cohen's comments and rename it
  to a proper name that describes what it is doing now.

Fernando Guzman Lugo (3):
  iovmm: no gap checking for fixed address
  iovmm: add superpages support to fixed da address
  iovmm: replace __iounmap with omap_iounmap

 arch/arm/plat-omap/iovmm.c |   67 ++++++++++++++++++++++++++-----------------
 1 files changed, 40 insertions(+), 27 deletions(-)


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

* [PATCHv2 1/3] iovmm: no gap checking for fixed address
  2010-10-04 21:02 [PATCHv2 0/3] iovmm: fixes for iovmm module Fernando Guzman Lugo
@ 2010-10-04 21:02 ` Fernando Guzman Lugo
  2010-10-04 21:02   ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Fernando Guzman Lugo
  0 siblings, 1 reply; 9+ messages in thread
From: Fernando Guzman Lugo @ 2010-10-04 21:02 UTC (permalink / raw)
  To: Hiroshi.DOYU, david.cohen
  Cc: felipe.contreras, ameya.palande, linux-kernel, andy.shevchenko,
	linux-omap, Fernando Guzman Lugo

If some fixed da address is wanted to be mapped and the page
is freed but it is used as gap, the mapping will fail.
This patch is fixing that and olny keeps the gap for
not fixed address.

Signed-off-by: Fernando Guzman Lugo <x0095840@ti.com>
---
 arch/arm/plat-omap/iovmm.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
index 24ca9c4..34f0012 100644
--- a/arch/arm/plat-omap/iovmm.c
+++ b/arch/arm/plat-omap/iovmm.c
@@ -289,7 +289,7 @@ static struct iovm_struct *alloc_iovm_area(struct iommu *obj, u32 da,
 	prev_end = 0;
 	list_for_each_entry(tmp, &obj->mmap, list) {
 
-		if (prev_end >= start)
+		if (prev_end > start)
 			break;
 
 		if (start + bytes <= tmp->da_start)
@@ -301,7 +301,7 @@ static struct iovm_struct *alloc_iovm_area(struct iommu *obj, u32 da,
 		prev_end = tmp->da_end;
 	}
 
-	if ((start > prev_end) && (ULONG_MAX - start >= bytes))
+	if ((start >= prev_end) && (ULONG_MAX - start + 1 >= bytes))
 		goto found;
 
 	dev_dbg(obj->dev, "%s: no space to fit %08x(%x) flags: %08x\n",
-- 
1.6.3.3


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

* [PATCHv2 2/3] iovmm: add superpages support to fixed da address
  2010-10-04 21:02 ` [PATCHv2 1/3] iovmm: no gap checking for fixed address Fernando Guzman Lugo
@ 2010-10-04 21:02   ` Fernando Guzman Lugo
  2010-10-04 21:02     ` [PATCHv2 3/3] iovmm: replace __iounmap with omap_iounmap Fernando Guzman Lugo
  2010-10-10 15:22     ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Felipe Contreras
  0 siblings, 2 replies; 9+ messages in thread
From: Fernando Guzman Lugo @ 2010-10-04 21:02 UTC (permalink / raw)
  To: Hiroshi.DOYU, david.cohen
  Cc: felipe.contreras, ameya.palande, linux-kernel, andy.shevchenko,
	linux-omap, Fernando Guzman Lugo

This patch adds superpages support to fixed ad address
inside iommu_kmap function.

Signed-off-by: Fernando Guzman Lugo <x0095840@ti.com>
---
 arch/arm/plat-omap/iovmm.c |   61 ++++++++++++++++++++++++++-----------------
 1 files changed, 37 insertions(+), 24 deletions(-)

diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
index 34f0012..8006a19 100644
--- a/arch/arm/plat-omap/iovmm.c
+++ b/arch/arm/plat-omap/iovmm.c
@@ -87,27 +87,37 @@ static size_t sgtable_len(const struct sg_table *sgt)
 }
 #define sgtable_ok(x)	(!!sgtable_len(x))
 
+
+static unsigned max_alignment(u32 addr)
+{
+	int i;
+	unsigned pagesize[] = { SZ_16M, SZ_1M, SZ_64K, SZ_4K, };
+	for (i = 0; i < ARRAY_SIZE(pagesize) && addr & (pagesize[i] - 1); i++)
+		;
+	return (i < ARRAY_SIZE(pagesize)) ? pagesize[i] : 0;
+}
+
+
 /*
  * calculate the optimal number sg elements from total bytes based on
  * iommu superpages
  */
-static unsigned int sgtable_nents(size_t bytes)
+static unsigned int sgtable_nents(size_t bytes, u32 da, u32 pa)
 {
-	int i;
-	unsigned int nr_entries;
-	const unsigned long pagesize[] = { SZ_16M, SZ_1M, SZ_64K, SZ_4K, };
+	unsigned int nr_entries = 0, ent_sz;
 
 	if (!IS_ALIGNED(bytes, PAGE_SIZE)) {
 		pr_err("%s: wrong size %08x\n", __func__, bytes);
 		return 0;
 	}
 
-	nr_entries = 0;
-	for (i = 0; i < ARRAY_SIZE(pagesize); i++) {
-		if (bytes >= pagesize[i]) {
-			nr_entries += (bytes / pagesize[i]);
-			bytes %= pagesize[i];
-		}
+	while (bytes) {
+		ent_sz = max_alignment(da | pa);
+		ent_sz = min(ent_sz, (unsigned)iopgsz_max(bytes));
+		nr_entries++;
+		da += ent_sz;
+		pa += ent_sz;
+		bytes -= ent_sz;
 	}
 	BUG_ON(bytes);
 
@@ -115,7 +125,8 @@ static unsigned int sgtable_nents(size_t bytes)
 }
 
 /* allocate and initialize sg_table header(a kind of 'superblock') */
-static struct sg_table *sgtable_alloc(const size_t bytes, u32 flags)
+static struct sg_table *sgtable_alloc(const size_t bytes, u32 flags,
+							u32 da, u32 pa)
 {
 	unsigned int nr_entries;
 	int err;
@@ -127,9 +138,8 @@ static struct sg_table *sgtable_alloc(const size_t bytes, u32 flags)
 	if (!IS_ALIGNED(bytes, PAGE_SIZE))
 		return ERR_PTR(-EINVAL);
 
-	/* FIXME: IOVMF_DA_FIXED should support 'superpages' */
-	if ((flags & IOVMF_LINEAR) && (flags & IOVMF_DA_ANON)) {
-		nr_entries = sgtable_nents(bytes);
+	if (flags & IOVMF_LINEAR) {
+		nr_entries = sgtable_nents(bytes, da, pa);
 		if (!nr_entries)
 			return ERR_PTR(-EINVAL);
 	} else
@@ -409,7 +419,8 @@ static inline void sgtable_drain_vmalloc(struct sg_table *sgt)
 	BUG_ON(!sgt);
 }
 
-static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, size_t len)
+static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, u32 da,
+								size_t len)
 {
 	unsigned int i;
 	struct scatterlist *sg;
@@ -420,7 +431,8 @@ static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, size_t len)
 	for_each_sg(sgt->sgl, sg, sgt->nents, i) {
 		size_t bytes;
 
-		bytes = iopgsz_max(len);
+		bytes = max_alignment(da | pa);
+		bytes = min(bytes, (size_t)iopgsz_max(len));
 
 		BUG_ON(!iopgsz_ok(bytes));
 
@@ -429,6 +441,7 @@ static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, size_t len)
 		 * 'pa' is cotinuous(linear).
 		 */
 		pa += bytes;
+		da += bytes;
 		len -= bytes;
 	}
 	BUG_ON(len);
@@ -695,18 +708,18 @@ u32 iommu_vmalloc(struct iommu *obj, u32 da, size_t bytes, u32 flags)
 	if (!va)
 		return -ENOMEM;
 
-	sgt = sgtable_alloc(bytes, flags);
+	flags &= IOVMF_HW_MASK;
+	flags |= IOVMF_DISCONT;
+	flags |= IOVMF_ALLOC;
+	flags |= (da ? IOVMF_DA_FIXED : IOVMF_DA_ANON);
+
+	sgt = sgtable_alloc(bytes, flags, da, 0);
 	if (IS_ERR(sgt)) {
 		da = PTR_ERR(sgt);
 		goto err_sgt_alloc;
 	}
 	sgtable_fill_vmalloc(sgt, va);
 
-	flags &= IOVMF_HW_MASK;
-	flags |= IOVMF_DISCONT;
-	flags |= IOVMF_ALLOC;
-	flags |= (da ? IOVMF_DA_FIXED : IOVMF_DA_ANON);
-
 	da = __iommu_vmap(obj, da, sgt, va, bytes, flags);
 	if (IS_ERR_VALUE(da))
 		goto err_iommu_vmap;
@@ -746,11 +759,11 @@ static u32 __iommu_kmap(struct iommu *obj, u32 da, u32 pa, void *va,
 {
 	struct sg_table *sgt;
 
-	sgt = sgtable_alloc(bytes, flags);
+	sgt = sgtable_alloc(bytes, flags, da, pa);
 	if (IS_ERR(sgt))
 		return PTR_ERR(sgt);
 
-	sgtable_fill_kmalloc(sgt, pa, bytes);
+	sgtable_fill_kmalloc(sgt, pa, da, bytes);
 
 	da = map_iommu_region(obj, da, sgt, va, bytes, flags);
 	if (IS_ERR_VALUE(da)) {
-- 
1.6.3.3


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

* [PATCHv2 3/3] iovmm: replace __iounmap with omap_iounmap
  2010-10-04 21:02   ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Fernando Guzman Lugo
@ 2010-10-04 21:02     ` Fernando Guzman Lugo
  2010-10-10 15:22     ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Felipe Contreras
  1 sibling, 0 replies; 9+ messages in thread
From: Fernando Guzman Lugo @ 2010-10-04 21:02 UTC (permalink / raw)
  To: Hiroshi.DOYU, david.cohen
  Cc: felipe.contreras, ameya.palande, linux-kernel, andy.shevchenko,
	linux-omap, Fernando Guzman Lugo

Omap platform is omap_iounmap function.

Signed-off-by: Fernando Guzman Lugo <x0095840@ti.com>
---
 arch/arm/plat-omap/iovmm.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
index 8006a19..75965a1 100644
--- a/arch/arm/plat-omap/iovmm.c
+++ b/arch/arm/plat-omap/iovmm.c
@@ -824,7 +824,7 @@ void iommu_kunmap(struct iommu *obj, u32 da)
 	struct sg_table *sgt;
 	typedef void (*func_t)(const void *);
 
-	sgt = unmap_vm_area(obj, da, (func_t)__iounmap,
+	sgt = unmap_vm_area(obj, da, (func_t)omap_iounmap,
 			    IOVMF_LINEAR | IOVMF_MMIO);
 	if (!sgt)
 		dev_dbg(obj->dev, "%s: No sgt\n", __func__);
-- 
1.6.3.3


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

* Re: [PATCHv2 2/3] iovmm: add superpages support to fixed da address
  2010-10-04 21:02   ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Fernando Guzman Lugo
  2010-10-04 21:02     ` [PATCHv2 3/3] iovmm: replace __iounmap with omap_iounmap Fernando Guzman Lugo
@ 2010-10-10 15:22     ` Felipe Contreras
  2010-10-11 15:33       ` Guzman Lugo, Fernando
  1 sibling, 1 reply; 9+ messages in thread
From: Felipe Contreras @ 2010-10-10 15:22 UTC (permalink / raw)
  To: Fernando Guzman Lugo
  Cc: Hiroshi.DOYU, david.cohen, felipe.contreras, ameya.palande,
	linux-kernel, andy.shevchenko, linux-omap

On Tue, Oct 5, 2010 at 12:02 AM, Fernando Guzman Lugo <x0095840@ti.com> wrote:
> This patch adds superpages support to fixed ad address
> inside iommu_kmap function.
>
> Signed-off-by: Fernando Guzman Lugo <x0095840@ti.com>
> ---
>  arch/arm/plat-omap/iovmm.c |   61 ++++++++++++++++++++++++++-----------------
>  1 files changed, 37 insertions(+), 24 deletions(-)
>
> diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
> index 34f0012..8006a19 100644
> --- a/arch/arm/plat-omap/iovmm.c
> +++ b/arch/arm/plat-omap/iovmm.c
> @@ -87,27 +87,37 @@ static size_t sgtable_len(const struct sg_table *sgt)
>  }
>  #define sgtable_ok(x)  (!!sgtable_len(x))
>
> +
> +static unsigned max_alignment(u32 addr)
> +{
> +       int i;
> +       unsigned pagesize[] = { SZ_16M, SZ_1M, SZ_64K, SZ_4K, };
> +       for (i = 0; i < ARRAY_SIZE(pagesize) && addr & (pagesize[i] - 1); i++)
> +               ;
> +       return (i < ARRAY_SIZE(pagesize)) ? pagesize[i] : 0;
> +}
> +
> +

I don't think those extra spaces make sense.

>  /*
>  * calculate the optimal number sg elements from total bytes based on
>  * iommu superpages
>  */
> -static unsigned int sgtable_nents(size_t bytes)
> +static unsigned int sgtable_nents(size_t bytes, u32 da, u32 pa)
>  {
> -       int i;
> -       unsigned int nr_entries;
> -       const unsigned long pagesize[] = { SZ_16M, SZ_1M, SZ_64K, SZ_4K, };
> +       unsigned int nr_entries = 0, ent_sz;

How about s/unsigned int/unsigned/?

>
>        if (!IS_ALIGNED(bytes, PAGE_SIZE)) {
>                pr_err("%s: wrong size %08x\n", __func__, bytes);
>                return 0;
>        }
>
> -       nr_entries = 0;
> -       for (i = 0; i < ARRAY_SIZE(pagesize); i++) {
> -               if (bytes >= pagesize[i]) {
> -                       nr_entries += (bytes / pagesize[i]);
> -                       bytes %= pagesize[i];
> -               }
> +       while (bytes) {
> +               ent_sz = max_alignment(da | pa);
> +               ent_sz = min(ent_sz, (unsigned)iopgsz_max(bytes));
> +               nr_entries++;
> +               da += ent_sz;
> +               pa += ent_sz;
> +               bytes -= ent_sz;
>        }
>        BUG_ON(bytes);
>
> @@ -115,7 +125,8 @@ static unsigned int sgtable_nents(size_t bytes)
>  }
>
>  /* allocate and initialize sg_table header(a kind of 'superblock') */
> -static struct sg_table *sgtable_alloc(const size_t bytes, u32 flags)
> +static struct sg_table *sgtable_alloc(const size_t bytes, u32 flags,
> +                                                       u32 da, u32 pa)
>  {
>        unsigned int nr_entries;
>        int err;
> @@ -127,9 +138,8 @@ static struct sg_table *sgtable_alloc(const size_t bytes, u32 flags)
>        if (!IS_ALIGNED(bytes, PAGE_SIZE))
>                return ERR_PTR(-EINVAL);
>
> -       /* FIXME: IOVMF_DA_FIXED should support 'superpages' */
> -       if ((flags & IOVMF_LINEAR) && (flags & IOVMF_DA_ANON)) {
> -               nr_entries = sgtable_nents(bytes);
> +       if (flags & IOVMF_LINEAR) {
> +               nr_entries = sgtable_nents(bytes, da, pa);
>                if (!nr_entries)
>                        return ERR_PTR(-EINVAL);
>        } else
> @@ -409,7 +419,8 @@ static inline void sgtable_drain_vmalloc(struct sg_table *sgt)
>        BUG_ON(!sgt);
>  }
>
> -static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, size_t len)
> +static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, u32 da,
> +                                                               size_t len)
>  {
>        unsigned int i;
>        struct scatterlist *sg;
> @@ -420,7 +431,8 @@ static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, size_t len)
>        for_each_sg(sgt->sgl, sg, sgt->nents, i) {
>                size_t bytes;
>
> -               bytes = iopgsz_max(len);
> +               bytes = max_alignment(da | pa);
> +               bytes = min(bytes, (size_t)iopgsz_max(len));

Why the size_t casting?

Otherwise:
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>

-- 
Felipe Contreras

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

* RE: [PATCHv2 2/3] iovmm: add superpages support to fixed da address
  2010-10-10 15:22     ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Felipe Contreras
@ 2010-10-11 15:33       ` Guzman Lugo, Fernando
  2010-10-12 11:09         ` Felipe Contreras
  0 siblings, 1 reply; 9+ messages in thread
From: Guzman Lugo, Fernando @ 2010-10-11 15:33 UTC (permalink / raw)
  To: Felipe Contreras
  Cc: Hiroshi.DOYU, david.cohen, felipe.contreras, ameya.palande,
	linux-kernel, andy.shevchenko, linux-omap

 

> -----Original Message-----
> From: Felipe Contreras [mailto:felipe.contreras@gmail.com] 
> Sent: Sunday, October 10, 2010 10:22 AM
> To: Guzman Lugo, Fernando
> Cc: Hiroshi.DOYU@nokia.com; david.cohen@nokia.com; 
> felipe.contreras@nokia.com; ameya.palande@nokia.com; 
> linux-kernel@vger.kernel.org; andy.shevchenko@gmail.com; 
> linux-omap@vger.kernel.org
> Subject: Re: [PATCHv2 2/3] iovmm: add superpages support to 
> fixed da address
> 
> On Tue, Oct 5, 2010 at 12:02 AM, Fernando Guzman Lugo 
> <x0095840@ti.com> wrote:
> > This patch adds superpages support to fixed ad address inside 
> > iommu_kmap function.
> >
> > Signed-off-by: Fernando Guzman Lugo <x0095840@ti.com>
> > ---
> >  arch/arm/plat-omap/iovmm.c |   61 
> > ++++++++++++++++++++++++++-----------------
> >  1 files changed, 37 insertions(+), 24 deletions(-)
> >
> > diff --git a/arch/arm/plat-omap/iovmm.c 
> b/arch/arm/plat-omap/iovmm.c 
> > index 34f0012..8006a19 100644
> > --- a/arch/arm/plat-omap/iovmm.c
> > +++ b/arch/arm/plat-omap/iovmm.c
> > @@ -87,27 +87,37 @@ static size_t sgtable_len(const struct sg_table 
> > *sgt)
> >  }
> >  #define sgtable_ok(x)  (!!sgtable_len(x))
> >
> > +
> > +static unsigned max_alignment(u32 addr) {
> > +       int i;
> > +       unsigned pagesize[] = { SZ_16M, SZ_1M, SZ_64K, SZ_4K, };
> > +       for (i = 0; i < ARRAY_SIZE(pagesize) && addr & 
> (pagesize[i] - 
> > +1); i++)
> > +               ;
> > +       return (i < ARRAY_SIZE(pagesize)) ? pagesize[i] : 0; }
> > +
> > +
> 
> I don't think those extra spaces make sense.

Ok, it will be fixed.

> 
> >  /*
> >  * calculate the optimal number sg elements from total 
> bytes based on
> >  * iommu superpages
> >  */
> > -static unsigned int sgtable_nents(size_t bytes)
> > +static unsigned int sgtable_nents(size_t bytes, u32 da, u32 pa)
> >  {
> > -       int i;
> > -       unsigned int nr_entries;
> > -       const unsigned long pagesize[] = { SZ_16M, SZ_1M, SZ_64K, 
> > SZ_4K, };
> > +       unsigned int nr_entries = 0, ent_sz;
> 
> How about s/unsigned int/unsigned/?

It is exactly the same, but not problem for me.

> 
> >
> >        if (!IS_ALIGNED(bytes, PAGE_SIZE)) {
> >                pr_err("%s: wrong size %08x\n", __func__, bytes);
> >                return 0;
> >        }
> >
> > -       nr_entries = 0;
> > -       for (i = 0; i < ARRAY_SIZE(pagesize); i++) {
> > -               if (bytes >= pagesize[i]) {
> > -                       nr_entries += (bytes / pagesize[i]);
> > -                       bytes %= pagesize[i];
> > -               }
> > +       while (bytes) {
> > +               ent_sz = max_alignment(da | pa);
> > +               ent_sz = min(ent_sz, (unsigned)iopgsz_max(bytes));
> > +               nr_entries++;
> > +               da += ent_sz;
> > +               pa += ent_sz;
> > +               bytes -= ent_sz;
> >        }
> >        BUG_ON(bytes);
> >
> > @@ -115,7 +125,8 @@ static unsigned int sgtable_nents(size_t bytes)
> >  }
> >
> >  /* allocate and initialize sg_table header(a kind of 
> 'superblock') */ 
> > -static struct sg_table *sgtable_alloc(const size_t bytes, 
> u32 flags)
> > +static struct sg_table *sgtable_alloc(const size_t bytes, 
> u32 flags,
> > +                                                       u32 da, u32 
> > +pa)
> >  {
> >        unsigned int nr_entries;
> >        int err;
> > @@ -127,9 +138,8 @@ static struct sg_table 
> *sgtable_alloc(const size_t 
> > bytes, u32 flags)
> >        if (!IS_ALIGNED(bytes, PAGE_SIZE))
> >                return ERR_PTR(-EINVAL);
> >
> > -       /* FIXME: IOVMF_DA_FIXED should support 'superpages' */
> > -       if ((flags & IOVMF_LINEAR) && (flags & IOVMF_DA_ANON)) {
> > -               nr_entries = sgtable_nents(bytes);
> > +       if (flags & IOVMF_LINEAR) {
> > +               nr_entries = sgtable_nents(bytes, da, pa);
> >                if (!nr_entries)
> >                        return ERR_PTR(-EINVAL);
> >        } else
> > @@ -409,7 +419,8 @@ static inline void sgtable_drain_vmalloc(struct 
> > sg_table *sgt)
> >        BUG_ON(!sgt);
> >  }
> >
> > -static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 
> pa, size_t 
> > len)
> > +static void sgtable_fill_kmalloc(struct sg_table *sgt, u32 pa, u32 
> > +da,
> > +                                                           
>     size_t 
> > +len)
> >  {
> >        unsigned int i;
> >        struct scatterlist *sg;
> > @@ -420,7 +431,8 @@ static void sgtable_fill_kmalloc(struct 
> sg_table 
> > *sgt, u32 pa, size_t len)
> >        for_each_sg(sgt->sgl, sg, sgt->nents, i) {
> >                size_t bytes;
> >
> > -               bytes = iopgsz_max(len);
> > +               bytes = max_alignment(da | pa);
> > +               bytes = min(bytes, (size_t)iopgsz_max(len));
> 
> Why the size_t casting?

To void this warning:
arch/arm/plat-omap/iovmm.c:440: warning: comparison of distinct pointer types lacks a cast

I will update with minor changes and resend.

Thanks and regards,
Fernando.

> 
> Otherwise:
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> 
> --
> Felipe Contreras
> 

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

* Re: [PATCHv2 2/3] iovmm: add superpages support to fixed da address
  2010-10-11 15:33       ` Guzman Lugo, Fernando
@ 2010-10-12 11:09         ` Felipe Contreras
  2010-10-12 14:10           ` Guzman Lugo, Fernando
  0 siblings, 1 reply; 9+ messages in thread
From: Felipe Contreras @ 2010-10-12 11:09 UTC (permalink / raw)
  To: Guzman Lugo, Fernando
  Cc: Hiroshi.DOYU, david.cohen, felipe.contreras, ameya.palande,
	linux-kernel, andy.shevchenko, linux-omap

On Mon, Oct 11, 2010 at 6:33 PM, Guzman Lugo, Fernando
<fernando.lugo@ti.com> wrote:
>> > @@ -420,7 +431,8 @@ static void sgtable_fill_kmalloc(struct
>> sg_table
>> > *sgt, u32 pa, size_t len)
>> >        for_each_sg(sgt->sgl, sg, sgt->nents, i) {
>> >                size_t bytes;
>> >
>> > -               bytes = iopgsz_max(len);
>> > +               bytes = max_alignment(da | pa);
>> > +               bytes = min(bytes, (size_t)iopgsz_max(len));
>>
>> Why the size_t casting?
>
> To void this warning:
> arch/arm/plat-omap/iovmm.c:440: warning: comparison of distinct pointer types lacks a cast

But how is that possible? iopgsz_max is returning constants, like
SZ_1M, so they should not need casts, if anything, the cast should be
done in iopgsz_max itself.

-- 
Felipe Contreras

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

* RE: [PATCHv2 2/3] iovmm: add superpages support to fixed da address
  2010-10-12 11:09         ` Felipe Contreras
@ 2010-10-12 14:10           ` Guzman Lugo, Fernando
  2010-10-13 16:43             ` Felipe Contreras
  0 siblings, 1 reply; 9+ messages in thread
From: Guzman Lugo, Fernando @ 2010-10-12 14:10 UTC (permalink / raw)
  To: Felipe Contreras
  Cc: Hiroshi.DOYU, david.cohen, felipe.contreras, ameya.palande,
	linux-kernel, andy.shevchenko, linux-omap

 

> -----Original Message-----
> From: Felipe Contreras [mailto:felipe.contreras@gmail.com] 
> Sent: Tuesday, October 12, 2010 6:09 AM
> To: Guzman Lugo, Fernando
> Cc: Hiroshi.DOYU@nokia.com; david.cohen@nokia.com; 
> felipe.contreras@nokia.com; ameya.palande@nokia.com; 
> linux-kernel@vger.kernel.org; andy.shevchenko@gmail.com; 
> linux-omap@vger.kernel.org
> Subject: Re: [PATCHv2 2/3] iovmm: add superpages support to 
> fixed da address
> 
> On Mon, Oct 11, 2010 at 6:33 PM, Guzman Lugo, Fernando 
> <fernando.lugo@ti.com> wrote:
> >> > @@ -420,7 +431,8 @@ static void sgtable_fill_kmalloc(struct
> >> sg_table
> >> > *sgt, u32 pa, size_t len)
> >> >        for_each_sg(sgt->sgl, sg, sgt->nents, i) {
> >> >                size_t bytes;
> >> >
> >> > -               bytes = iopgsz_max(len);
> >> > +               bytes = max_alignment(da | pa);
> >> > +               bytes = min(bytes, (size_t)iopgsz_max(len));
> >>
> >> Why the size_t casting?
> >
> > To void this warning:
> > arch/arm/plat-omap/iovmm.c:440: warning: comparison of distinct 
> > pointer types lacks a cast
> 
> But how is that possible? iopgsz_max is returning constants, 
> like SZ_1M, so they should not need casts, if anything, the 
> cast should be done in iopgsz_max itself.

The min macro make a "typeof" of the parameter, so the typeof of a 
Constants should be int I think and that's the reason of the warning.

I can use min_t instead to avoid the warning, something like this:

			bytes = min_t(size_t, bytes, iopgsz_max(len));

What do you think?

Regards,
Fernando.

> 
> --
> Felipe Contreras
> 

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

* RE: [PATCHv2 2/3] iovmm: add superpages support to fixed da address
  2010-10-12 14:10           ` Guzman Lugo, Fernando
@ 2010-10-13 16:43             ` Felipe Contreras
  0 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2010-10-13 16:43 UTC (permalink / raw)
  To: fernando.lugo, felipe.contreras
  Cc: hiroshi.doyu, david.cohen, ameya.palande, linux-kernel,
	andy.shevchenko, linux-omap

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1282 bytes --]

fernando.lugo@ti.com wrote:
> > On Mon, Oct 11, 2010 at 6:33 PM, Guzman Lugo, Fernando 
> > <fernando.lugo@ti.com> wrote:
> > >> > @@ -420,7 +431,8 @@ static void sgtable_fill_kmalloc(struct
> > >> sg_table
> > >> > *sgt, u32 pa, size_t len)
> > >> >        for_each_sg(sgt->sgl, sg, sgt->nents, i) {
> > >> >                size_t bytes;
> > >> >
> > >> > -               bytes = iopgsz_max(len);
> > >> > +               bytes = max_alignment(da | pa);
> > >> > +               bytes = min(bytes, (size_t)iopgsz_max(len));
> > >>
> > >> Why the size_t casting?
> > >
> > > To void this warning:
> > > arch/arm/plat-omap/iovmm.c:440: warning: comparison of distinct 
> > > pointer types lacks a cast
> > 
> > But how is that possible? iopgsz_max is returning constants, 
> > like SZ_1M, so they should not need casts, if anything, the 
> > cast should be done in iopgsz_max itself.
> 
> The min macro make a "typeof" of the parameter, so the typeof of a 
> Constants should be int I think and that's the reason of the warning.
> 
> I can use min_t instead to avoid the warning, something like this:
> 
> 			bytes = min_t(size_t, bytes, iopgsz_max(len));
> 
> What do you think?

Right, I forgot about that one... much better.

-- 
Felipe Contreras

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

end of thread, other threads:[~2010-10-13 16:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-04 21:02 [PATCHv2 0/3] iovmm: fixes for iovmm module Fernando Guzman Lugo
2010-10-04 21:02 ` [PATCHv2 1/3] iovmm: no gap checking for fixed address Fernando Guzman Lugo
2010-10-04 21:02   ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Fernando Guzman Lugo
2010-10-04 21:02     ` [PATCHv2 3/3] iovmm: replace __iounmap with omap_iounmap Fernando Guzman Lugo
2010-10-10 15:22     ` [PATCHv2 2/3] iovmm: add superpages support to fixed da address Felipe Contreras
2010-10-11 15:33       ` Guzman Lugo, Fernando
2010-10-12 11:09         ` Felipe Contreras
2010-10-12 14:10           ` Guzman Lugo, Fernando
2010-10-13 16:43             ` Felipe Contreras

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®