Re: omap3isp cache error when unloading

2011-03-04 Thread Hiroshi DOYU
From: Sakari Ailus sakari.ai...@maxwell.research.nokia.com
Subject: Re: omap3isp cache error when unloading
Date: Fri, 4 Mar 2011 09:38:22 +0200

 Hi Michael,
 
 Michael Jones wrote:
 On 03/02/2011 08:18 PM, Laurent Pinchart wrote:
 Hi Michael,

 On Tuesday 01 March 2011 17:41:01 Michael Jones wrote:
 Hi all,

 I get a warning about a cache error with the following steps:

 0. load omap3-isp
 1. set up media broken media pipeline. (e.g. set different formats on
 opposite ends of a link, as will be the case for using the lane shifter)
 2. try to capture images.  isp_video_streamon() returns -EPIPE from the
 failed isp_video_validate_pipeline() call.
 3. unload omap3-isp module

 then I get the following from kmem_cache_destroy():

 slab error in kmem_cache_destroy(): cache `iovm_area_cache': Can't free all
 objects [c0040318] (unwind_backtrace+0x0/0xec) from [c00bfe14]
 (kmem_cache_destroy+0x88/0xf4) [c00bfe14] (kmem_cache_destroy+0x88/0xf4)
 from [c00861f8] (sys_delete_module+0x1c4/0x230) [c00861f8]
 (sys_delete_module+0x1c4/0x230) from [c003b680]
 (ret_fast_syscall+0x0/0x30)

 Then, when reloading the module:
 SLAB: cache with size 32 has lost its name

 Can somebody else confirm that they also observe this behavior?

 I can't reproduce that (tried both 2.6.32 and 2.6.37). Could you give me 
 some 
 more details about your exact test procedure (such as how you configure the 
 pipeline) ?

 
 Sorry, I should've mentioned: I'm using your media-0005-omap3isp branch
 based on 2.6.38-rc5.  I didn't have the problem with 2.6.37, either.
 It's actually not related to mis-configuring the ISP pipeline like I
 thought at first- it also happens after I have successfully captured images.
 
 I've since tracked down the problem, although I don't understand the
 cache management well enough to be sure it's a proper fix, so hopefully
 some new recipients on this can make suggestions/comments.
 
 The patch below solves the problem, which modifies a commit by Fernando
 Guzman Lugo from December.
 
 Thanks for the patch.
 
 It looks like this patch from Fernando, perhaps unintentionally, also
 makes the first page mappable so the NULL address is also valid. The
 NULL address isn't considered valid by the ISP driver which thus does
 not iommu_vunmap() the NULL address.
 
 Hiroshi, David, what do you think? I think the patch is correct so it
 could be applied with description changed to mention it disallows
 mapping the first page again.

 Or is there a reason to allow mapping the first page automatically? I
 personally don't see any.

I think that was done unintentionally. The invalid first page may be
quite reasonable generally.
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: omap3isp cache error when unloading

2011-03-04 Thread David Cohen
Hi,

[snip]

 Sorry, I should've mentioned: I'm using your media-0005-omap3isp branch
 based on 2.6.38-rc5.  I didn't have the problem with 2.6.37, either.
 It's actually not related to mis-configuring the ISP pipeline like I
 thought at first- it also happens after I have successfully captured images.

 I've since tracked down the problem, although I don't understand the
 cache management well enough to be sure it's a proper fix, so hopefully
 some new recipients on this can make suggestions/comments.

 The patch below solves the problem, which modifies a commit by Fernando
 Guzman Lugo from December.

 -Michael

 From db35fb8edca2a4f8fd37197d77fd58676cb1dcac Mon Sep 17 00:00:00 2001
 From: Michael Jones michael.jo...@matrix-vision.de
 Date: Thu, 3 Mar 2011 16:50:39 +0100
 Subject: [PATCH] fix iovmm slab cache error on module unload

 modify OMAP: iommu: create new api to set valid da range

 This modifies commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb.
 ---
  arch/arm/plat-omap/iovmm.c |    5 -
  1 files changed, 4 insertions(+), 1 deletions(-)

 diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
 index 6dc1296..2fba6f1 100644
 --- a/arch/arm/plat-omap/iovmm.c
 +++ b/arch/arm/plat-omap/iovmm.c
 @@ -280,7 +280,10 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
 *obj, u32 da,
        alignement = PAGE_SIZE;

        if (flags  IOVMF_DA_ANON) {
 -               start = obj-da_start;
 +               /*
 +                * Reserve the first page for NULL
 +                */
 +               start = obj-da_start + PAGE_SIZE;

IMO if obj-da_start != 0, no need to add PAGE_SIZE. Otherwise, it
does make sense to correct wrong obj-da_start == 0. Another thing is
this piece of code is using alignement (alignment) variable instead of
PAGE_SIZE (which is the same value).

Br,

David
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: omap3isp cache error when unloading

2011-03-04 Thread Michael Jones
Hi David,

On 03/04/2011 02:12 PM, David Cohen wrote:
 Hi,
 
 [snip]
 
 Sorry, I should've mentioned: I'm using your media-0005-omap3isp branch
 based on 2.6.38-rc5.  I didn't have the problem with 2.6.37, either.
 It's actually not related to mis-configuring the ISP pipeline like I
 thought at first- it also happens after I have successfully captured images.

 I've since tracked down the problem, although I don't understand the
 cache management well enough to be sure it's a proper fix, so hopefully
 some new recipients on this can make suggestions/comments.

 The patch below solves the problem, which modifies a commit by Fernando
 Guzman Lugo from December.

 -Michael

 From db35fb8edca2a4f8fd37197d77fd58676cb1dcac Mon Sep 17 00:00:00 2001
 From: Michael Jones michael.jo...@matrix-vision.de
 Date: Thu, 3 Mar 2011 16:50:39 +0100
 Subject: [PATCH] fix iovmm slab cache error on module unload

 modify OMAP: iommu: create new api to set valid da range

 This modifies commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb.
 ---
  arch/arm/plat-omap/iovmm.c |5 -
  1 files changed, 4 insertions(+), 1 deletions(-)

 diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
 index 6dc1296..2fba6f1 100644
 --- a/arch/arm/plat-omap/iovmm.c
 +++ b/arch/arm/plat-omap/iovmm.c
 @@ -280,7 +280,10 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
 *obj, u32 da,
alignement = PAGE_SIZE;

if (flags  IOVMF_DA_ANON) {
 -   start = obj-da_start;
 +   /*
 +* Reserve the first page for NULL
 +*/
 +   start = obj-da_start + PAGE_SIZE;
 
 IMO if obj-da_start != 0, no need to add PAGE_SIZE. Otherwise, it
 does make sense to correct wrong obj-da_start == 0. Another thing is
 this piece of code is using alignement (alignment) variable instead of
 PAGE_SIZE (which is the same value).
 
 Br,
 
 David

I believe the following patch addresses your comments.  I couldn't
resist also fixing the misspelling of alignment when I was using the
variable in my patch.

-Michael

From 2712f2fd087ca782e964c912c7f1973e7d84f2b7 Mon Sep 17 00:00:00 2001
From: Michael Jones michael.jo...@matrix-vision.de
Date: Fri, 4 Mar 2011 15:09:48 +0100
Subject: [PATCH] omap: iovmm: disallow mapping NULL address

commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb allowed mapping
the NULL address if da_start==0, which would then not get unmapped. 
Disallow this again.  And spell variable 'alignment' correctly.

Signed-off-by: Michael Jones michael.jo...@matrix-vision.de
---
 arch/arm/plat-omap/iovmm.c |   16 ++--
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
index 6dc1296..11c9b76 100644
--- a/arch/arm/plat-omap/iovmm.c
+++ b/arch/arm/plat-omap/iovmm.c
@@ -271,20 +271,24 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
*obj, u32 da,
   size_t bytes, u32 flags)
 {
struct iovm_struct *new, *tmp;
-   u32 start, prev_end, alignement;
+   u32 start, prev_end, alignment;
 
if (!obj || !bytes)
return ERR_PTR(-EINVAL);
 
start = da;
-   alignement = PAGE_SIZE;
+   alignment = PAGE_SIZE;
 
if (flags  IOVMF_DA_ANON) {
-   start = obj-da_start;
+   /* Don't map address 0 */
+   if (obj-da_start)
+   start = obj-da_start;
+   else
+   start = obj-da_start + alignment;
 
if (flags  IOVMF_LINEAR)
-   alignement = iopgsz_max(bytes);
-   start = roundup(start, alignement);
+   alignment = iopgsz_max(bytes);
+   start = roundup(start, alignment);
} else if (start  obj-da_start || start  obj-da_end ||
obj-da_end - start  bytes) {
return ERR_PTR(-EINVAL);
@@ -304,7 +308,7 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
*obj, u32 da,
goto found;
 
if (tmp-da_end = start  flags  IOVMF_DA_ANON)
-   start = roundup(tmp-da_end + 1, alignement);
+   start = roundup(tmp-da_end + 1, alignment);
 
prev_end = tmp-da_end;
}
-- 
1.7.4.1



MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler
Registergericht: Amtsgericht Stuttgart, HRB 271090
Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: omap3isp cache error when unloading

2011-03-04 Thread David Cohen
On Fri, Mar 4, 2011 at 4:39 PM, Michael Jones
michael.jo...@matrix-vision.de wrote:
 Hi David,

Hi Michael,


 On 03/04/2011 02:12 PM, David Cohen wrote:
 Hi,

 [snip]

 Sorry, I should've mentioned: I'm using your media-0005-omap3isp branch
 based on 2.6.38-rc5.  I didn't have the problem with 2.6.37, either.
 It's actually not related to mis-configuring the ISP pipeline like I
 thought at first- it also happens after I have successfully captured images.

 I've since tracked down the problem, although I don't understand the
 cache management well enough to be sure it's a proper fix, so hopefully
 some new recipients on this can make suggestions/comments.

 The patch below solves the problem, which modifies a commit by Fernando
 Guzman Lugo from December.

 -Michael

 From db35fb8edca2a4f8fd37197d77fd58676cb1dcac Mon Sep 17 00:00:00 2001
 From: Michael Jones michael.jo...@matrix-vision.de
 Date: Thu, 3 Mar 2011 16:50:39 +0100
 Subject: [PATCH] fix iovmm slab cache error on module unload

 modify OMAP: iommu: create new api to set valid da range

 This modifies commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb.
 ---
  arch/arm/plat-omap/iovmm.c |    5 -
  1 files changed, 4 insertions(+), 1 deletions(-)

 diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
 index 6dc1296..2fba6f1 100644
 --- a/arch/arm/plat-omap/iovmm.c
 +++ b/arch/arm/plat-omap/iovmm.c
 @@ -280,7 +280,10 @@ static struct iovm_struct *alloc_iovm_area(struct 
 iommu *obj, u32 da,
        alignement = PAGE_SIZE;

        if (flags  IOVMF_DA_ANON) {
 -               start = obj-da_start;
 +               /*
 +                * Reserve the first page for NULL
 +                */
 +               start = obj-da_start + PAGE_SIZE;

 IMO if obj-da_start != 0, no need to add PAGE_SIZE. Otherwise, it
 does make sense to correct wrong obj-da_start == 0. Another thing is
 this piece of code is using alignement (alignment) variable instead of
 PAGE_SIZE (which is the same value).

 Br,

 David

 I believe the following patch addresses your comments.  I couldn't
 resist also fixing the misspelling of alignment when I was using the
 variable in my patch.

 -Michael

 From 2712f2fd087ca782e964c912c7f1973e7d84f2b7 Mon Sep 17 00:00:00 2001
 From: Michael Jones michael.jo...@matrix-vision.de
 Date: Fri, 4 Mar 2011 15:09:48 +0100
 Subject: [PATCH] omap: iovmm: disallow mapping NULL address

 commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb allowed mapping
 the NULL address if da_start==0, which would then not get unmapped.
 Disallow this again.  And spell variable 'alignment' correctly.

 Signed-off-by: Michael Jones michael.jo...@matrix-vision.de
 ---
  arch/arm/plat-omap/iovmm.c |   16 ++--
  1 files changed, 10 insertions(+), 6 deletions(-)

 diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
 index 6dc1296..11c9b76 100644
 --- a/arch/arm/plat-omap/iovmm.c
 +++ b/arch/arm/plat-omap/iovmm.c
 @@ -271,20 +271,24 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
 *obj, u32 da,
                                           size_t bytes, u32 flags)
  {
        struct iovm_struct *new, *tmp;
 -       u32 start, prev_end, alignement;
 +       u32 start, prev_end, alignment;

        if (!obj || !bytes)
                return ERR_PTR(-EINVAL);

        start = da;
 -       alignement = PAGE_SIZE;
 +       alignment = PAGE_SIZE;

        if (flags  IOVMF_DA_ANON) {
 -               start = obj-da_start;
 +               /* Don't map address 0 */
 +               if (obj-da_start)
 +                       start = obj-da_start;
 +               else
 +                       start = obj-da_start + alignment;

It seems to be fine for me now. Let's see what Hiroshi says.

Regards,

David


                if (flags  IOVMF_LINEAR)
 -                       alignement = iopgsz_max(bytes);
 -               start = roundup(start, alignement);
 +                       alignment = iopgsz_max(bytes);
 +               start = roundup(start, alignment);
        } else if (start  obj-da_start || start  obj-da_end ||
                                        obj-da_end - start  bytes) {
                return ERR_PTR(-EINVAL);
 @@ -304,7 +308,7 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
 *obj, u32 da,
                        goto found;

                if (tmp-da_end = start  flags  IOVMF_DA_ANON)
 -                       start = roundup(tmp-da_end + 1, alignement);
 +                       start = roundup(tmp-da_end + 1, alignment);

                prev_end = tmp-da_end;
        }
 --
 1.7.4.1



 MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler
 Registergericht: Amtsgericht Stuttgart, HRB 271090
 Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: omap3isp cache error when unloading

2011-03-04 Thread David Cohen
[snip]

 From 2712f2fd087ca782e964c912c7f1973e7d84f2b7 Mon Sep 17 00:00:00 2001
 From: Michael Jones michael.jo...@matrix-vision.de
 Date: Fri, 4 Mar 2011 15:09:48 +0100
 Subject: [PATCH] omap: iovmm: disallow mapping NULL address

 commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb allowed mapping
 the NULL address if da_start==0, which would then not get unmapped.
 Disallow this again.  And spell variable 'alignment' correctly.

 Signed-off-by: Michael Jones michael.jo...@matrix-vision.de
 ---
  arch/arm/plat-omap/iovmm.c |   16 ++--
  1 files changed, 10 insertions(+), 6 deletions(-)

 diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
 index 6dc1296..11c9b76 100644
 --- a/arch/arm/plat-omap/iovmm.c
 +++ b/arch/arm/plat-omap/iovmm.c
 @@ -271,20 +271,24 @@ static struct iovm_struct *alloc_iovm_area(struct 
 iommu *obj, u32 da,
                                           size_t bytes, u32 flags)
  {
        struct iovm_struct *new, *tmp;
 -       u32 start, prev_end, alignement;
 +       u32 start, prev_end, alignment;

        if (!obj || !bytes)
                return ERR_PTR(-EINVAL);

        start = da;
 -       alignement = PAGE_SIZE;
 +       alignment = PAGE_SIZE;

        if (flags  IOVMF_DA_ANON) {
 -               start = obj-da_start;
 +               /* Don't map address 0 */
 +               if (obj-da_start)
 +                       start = obj-da_start;
 +               else
 +                       start = obj-da_start + alignment;

 It seems to be fine for me now. Let's see what Hiroshi says.

Sorry, I'm afraid I changed my mind after take a look into the driver. :)
Try to correct obj-da_start in the functions iommu_set_da_range() and
omap_iommu_probe(). That should be the correct way. Your patch doesn't
fix this situation when IOVMF_DA_ANON isn't set.
After obj-da_start is correctly set, your current patch is non longer required.

Regards,

David


 Regards,

 David


                if (flags  IOVMF_LINEAR)
 -                       alignement = iopgsz_max(bytes);
 -               start = roundup(start, alignement);
 +                       alignment = iopgsz_max(bytes);
 +               start = roundup(start, alignment);
        } else if (start  obj-da_start || start  obj-da_end ||
                                        obj-da_end - start  bytes) {
                return ERR_PTR(-EINVAL);
 @@ -304,7 +308,7 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
 *obj, u32 da,
                        goto found;

                if (tmp-da_end = start  flags  IOVMF_DA_ANON)
 -                       start = roundup(tmp-da_end + 1, alignement);
 +                       start = roundup(tmp-da_end + 1, alignment);

                prev_end = tmp-da_end;
        }
 --
 1.7.4.1



 MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler
 Registergericht: Amtsgericht Stuttgart, HRB 271090
 Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: omap3isp cache error when unloading

2011-03-03 Thread Michael Jones
On 03/02/2011 08:18 PM, Laurent Pinchart wrote:
 Hi Michael,
 
 On Tuesday 01 March 2011 17:41:01 Michael Jones wrote:
 Hi all,

 I get a warning about a cache error with the following steps:

 0. load omap3-isp
 1. set up media broken media pipeline. (e.g. set different formats on
 opposite ends of a link, as will be the case for using the lane shifter)
 2. try to capture images.  isp_video_streamon() returns -EPIPE from the
 failed isp_video_validate_pipeline() call.
 3. unload omap3-isp module

 then I get the following from kmem_cache_destroy():

 slab error in kmem_cache_destroy(): cache `iovm_area_cache': Can't free all
 objects [c0040318] (unwind_backtrace+0x0/0xec) from [c00bfe14]
 (kmem_cache_destroy+0x88/0xf4) [c00bfe14] (kmem_cache_destroy+0x88/0xf4)
 from [c00861f8] (sys_delete_module+0x1c4/0x230) [c00861f8]
 (sys_delete_module+0x1c4/0x230) from [c003b680]
 (ret_fast_syscall+0x0/0x30)

 Then, when reloading the module:
 SLAB: cache with size 32 has lost its name

 Can somebody else confirm that they also observe this behavior?
 
 I can't reproduce that (tried both 2.6.32 and 2.6.37). Could you give me some 
 more details about your exact test procedure (such as how you configure the 
 pipeline) ?
 

Sorry, I should've mentioned: I'm using your media-0005-omap3isp branch
based on 2.6.38-rc5.  I didn't have the problem with 2.6.37, either.
It's actually not related to mis-configuring the ISP pipeline like I
thought at first- it also happens after I have successfully captured images.

I've since tracked down the problem, although I don't understand the
cache management well enough to be sure it's a proper fix, so hopefully
some new recipients on this can make suggestions/comments.

The patch below solves the problem, which modifies a commit by Fernando
Guzman Lugo from December.

-Michael

From db35fb8edca2a4f8fd37197d77fd58676cb1dcac Mon Sep 17 00:00:00 2001
From: Michael Jones michael.jo...@matrix-vision.de
Date: Thu, 3 Mar 2011 16:50:39 +0100
Subject: [PATCH] fix iovmm slab cache error on module unload

modify OMAP: iommu: create new api to set valid da range

This modifies commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb.
---
 arch/arm/plat-omap/iovmm.c |5 -
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
index 6dc1296..2fba6f1 100644
--- a/arch/arm/plat-omap/iovmm.c
+++ b/arch/arm/plat-omap/iovmm.c
@@ -280,7 +280,10 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
*obj, u32 da,
alignement = PAGE_SIZE;
 
if (flags  IOVMF_DA_ANON) {
-   start = obj-da_start;
+   /*
+* Reserve the first page for NULL
+*/
+   start = obj-da_start + PAGE_SIZE;
 
if (flags  IOVMF_LINEAR)
alignement = iopgsz_max(bytes);
-- 
1.7.4.1



MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler
Registergericht: Amtsgericht Stuttgart, HRB 271090
Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: omap3isp cache error when unloading

2011-03-03 Thread Sakari Ailus
Hi Michael,

Michael Jones wrote:
 On 03/02/2011 08:18 PM, Laurent Pinchart wrote:
 Hi Michael,

 On Tuesday 01 March 2011 17:41:01 Michael Jones wrote:
 Hi all,

 I get a warning about a cache error with the following steps:

 0. load omap3-isp
 1. set up media broken media pipeline. (e.g. set different formats on
 opposite ends of a link, as will be the case for using the lane shifter)
 2. try to capture images.  isp_video_streamon() returns -EPIPE from the
 failed isp_video_validate_pipeline() call.
 3. unload omap3-isp module

 then I get the following from kmem_cache_destroy():

 slab error in kmem_cache_destroy(): cache `iovm_area_cache': Can't free all
 objects [c0040318] (unwind_backtrace+0x0/0xec) from [c00bfe14]
 (kmem_cache_destroy+0x88/0xf4) [c00bfe14] (kmem_cache_destroy+0x88/0xf4)
 from [c00861f8] (sys_delete_module+0x1c4/0x230) [c00861f8]
 (sys_delete_module+0x1c4/0x230) from [c003b680]
 (ret_fast_syscall+0x0/0x30)

 Then, when reloading the module:
 SLAB: cache with size 32 has lost its name

 Can somebody else confirm that they also observe this behavior?

 I can't reproduce that (tried both 2.6.32 and 2.6.37). Could you give me 
 some 
 more details about your exact test procedure (such as how you configure the 
 pipeline) ?

 
 Sorry, I should've mentioned: I'm using your media-0005-omap3isp branch
 based on 2.6.38-rc5.  I didn't have the problem with 2.6.37, either.
 It's actually not related to mis-configuring the ISP pipeline like I
 thought at first- it also happens after I have successfully captured images.
 
 I've since tracked down the problem, although I don't understand the
 cache management well enough to be sure it's a proper fix, so hopefully
 some new recipients on this can make suggestions/comments.
 
 The patch below solves the problem, which modifies a commit by Fernando
 Guzman Lugo from December.

Thanks for the patch.

It looks like this patch from Fernando, perhaps unintentionally, also
makes the first page mappable so the NULL address is also valid. The
NULL address isn't considered valid by the ISP driver which thus does
not iommu_vunmap() the NULL address.

Hiroshi, David, what do you think? I think the patch is correct so it
could be applied with description changed to mention it disallows
mapping the first page again.

Or is there a reason to allow mapping the first page automatically? I
personally don't see any.

Cheers,

 From db35fb8edca2a4f8fd37197d77fd58676cb1dcac Mon Sep 17 00:00:00 2001
 From: Michael Jones michael.jo...@matrix-vision.de
 Date: Thu, 3 Mar 2011 16:50:39 +0100
 Subject: [PATCH] fix iovmm slab cache error on module unload
 
 modify OMAP: iommu: create new api to set valid da range
 
 This modifies commit c7f4ab26e3bcdaeb3e19ec658e3ad9092f1a6ceb.
 ---
  arch/arm/plat-omap/iovmm.c |5 -
  1 files changed, 4 insertions(+), 1 deletions(-)
 
 diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c
 index 6dc1296..2fba6f1 100644
 --- a/arch/arm/plat-omap/iovmm.c
 +++ b/arch/arm/plat-omap/iovmm.c
 @@ -280,7 +280,10 @@ static struct iovm_struct *alloc_iovm_area(struct iommu 
 *obj, u32 da,
   alignement = PAGE_SIZE;
  
   if (flags  IOVMF_DA_ANON) {
 - start = obj-da_start;
 + /*
 +  * Reserve the first page for NULL
 +  */
 + start = obj-da_start + PAGE_SIZE;
  
   if (flags  IOVMF_LINEAR)
   alignement = iopgsz_max(bytes);


-- 
Sakari Ailus
sakari.ai...@maxwell.research.nokia.com
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html