On Fri, Mar 4, 2011 at 4:39 PM, Michael Jones <michael.jones@xxxxxxxxxxxxxxxx> 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.jones@xxxxxxxxxxxxxxxx> >>> 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.jones@xxxxxxxxxxxxxxxx> > 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.jones@xxxxxxxxxxxxxxxx> > --- > Â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-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html