Deos any one have any comments on by-passing the get_user_pages function for
the buffers that meets the following condition ? If not, this code will be
merged into dspbridge tree.
if ((vma->vm_flags & VM_IO) | ((vma->vm_flags & VM_RESERVED) &&
+ (~pgprot_val(vma->vm_page_prot) & L_PTE_CACHEABLE) &&
+ (~pgprot_val(vma->vm_page_prot) & L_PTE_BUFFERABLE)))
Basically, the logic to get the pages would be as follows instead of calling
get_user_pages.
static u32 user_va2pa(struct mm_struct *mm, u32 address)
{
pgd_t *pgd;
pmd_t *pmd;
pte_t *ptep, pte;
pgd = pgd_offset(mm, address);
if (!(pgd_none(*pgd) || pgd_bad(*pgd))) {
pmd = pmd_offset(pgd, address);
if (!(pmd_none(*pmd) || pmd_bad(*pmd))) {
ptep = pte_offset_map(pmd, address);
if (ptep) {
pte = *ptep;
if (pte_present(pte))
return pte & PAGE_MASK;
}
}
}
return 0;
}
Thank you,
Best regards,
Hari
> -----Original Message-----
> From: [email protected] [mailto:linux-omap-
> [email protected]] On Behalf Of Kanigeri, Hari
> Sent: Thursday, June 11, 2009 12:24 PM
> To: Bagadia, Sripal; Hiroshi DOYU; Ramirez Luna, Omar
> Cc: [email protected]; [email protected]; Menon, Nishanth;
> [email protected]
> Subject: RE: [RFC][PATCH] DSPBRIDGE: Video Playback Cache Optimization
>
> Sripal,
>
> > Currently, display driver maps the video buffers to userspace with
> > VM_RESERVED flag and pgprot_writecombine(). We are considering changing
> > pgprot_writecombine() to pgprot_noncached() to eliminate the need of all
> > cache maintenance overheads for video buffers.
> >
> -- Is this change in the current LO kernel ?
>
> I agree there is an overhead of flushing the cache by calling
> get_user_pages function. But there is some additional stuff that this
> function does and I am afraid that by-passing this function call for a
> Buffer that has VM_RESERVED flag and the BUFFERABLBE flags might create
> issues.
>
> The only reason get_user_pages is not used for the buffer that has VM_IO
> flag set is get_user_pages fails if this flag is set for the buffer. I am
> not sure if it is safe to by-pass the get_user_pages function call for
> buffer that has VM_RESERVED flag set though.
>
> Thank you,
> Best regards,
> Hari
>
> > -----Original Message-----
> > From: Bagadia, Sripal
> > Sent: Thursday, June 11, 2009 11:24 AM
> > To: Hiroshi DOYU; Ramirez Luna, Omar
> > Cc: [email protected]; [email protected]; Menon,
> Nishanth;
> > Kanigeri, Hari; [email protected]
> > Subject: RE: [RFC][PATCH] DSPBRIDGE: Video Playback Cache Optimization
> >
> > > Would it be possible to tell the case/path, where
> > L_PTE_CACHEABLE/L_PTE_BUFFERABLE is set with VM_IO/VM_RESERVED ?
> >
> > Currently, display driver maps the video buffers to userspace with
> > VM_RESERVED flag and pgprot_writecombine(). We are considering changing
> > pgprot_writecombine() to pgprot_noncached() to eliminate the need of all
> > cache maintenance overheads for video buffers.
> >
> > Regarding Felipe's comment:
> > > L_PTE_BUFFERABLE is obsolete, isn't it? L_PTE_MT_BUFFERABLE should be
> > used instead.
> >
> > I was working on 2.6.27.10, and agree that this needs to be updated for
> > newer kernels.
> >
> >
> > Regards,
> > Sripal
> >
> > -----Original Message-----
> > From: Hiroshi DOYU [mailto:[email protected]]
> > Sent: Thursday, June 11, 2009 2:16 AM
> > To: Ramirez Luna, Omar
> > Cc: [email protected]; [email protected]; Menon,
> Nishanth;
> > Bagadia, Sripal; Kanigeri, Hari; [email protected]
> > Subject: Re: [RFC][PATCH] DSPBRIDGE: Video Playback Cache Optimization
> >
> > From: Hiroshi DOYU <[email protected]>
> > Subject: Re: [RFC][PATCH] DSPBRIDGE: Video Playback Cache Optimization
> > Date: Wed, 10 Jun 2009 10:25:39 +0300 (EEST)
> >
> > > From: "ext Ramirez Luna, Omar" <[email protected]>
> > > Subject: RE: [RFC][PATCH] DSPBRIDGE: Video Playback Cache Optimization
> > > Date: Wed, 10 Jun 2009 01:18:29 +0200
> > >
> > > > Hi,
> > > >
> > > > [sending as plain text to l-o]
> > > >
> > > > Could you please comment on this patch.
> > > >
> > > > From: Sripal Bagadia <[email protected]>
> > > > Date: Tue, 9 Jun 2009 16:05:09 -0500
> > > > Subject: [PATCH] DSPBRIDGE: Video Playback Cache Optimization
> > > >
> > > > Avoid get_user_pages cache flush overheads for uncached & reserved
> > > > buffers (e.g. display & camera buffers).
> > >
> > > Would it be possible to tell the case/path, where no
> > > L_PTE_CACHEABLE/L_PTE_BUFFERABLE is set with VM_IO/VM_RESERVED ?
> >
> > To be correct,
> > "where L_PTE_CACHEABLE/L_PTE_BUFFERABLE is set with VM_IO/VM_RESERVED"
> >
> > > >
> > > > Signed-off-by: Sripal Bagadia <[email protected]>
> > > > ---
> > > > drivers/dsp/bridge/wmd/tiomap3430.c | 4 +++-
> > > > 1 files changed, 3 insertions(+), 1 deletions(-)
> > > >
> > > > diff --git a/drivers/dsp/bridge/wmd/tiomap3430.c
> > > > b/drivers/dsp/bridge/wmd/tiomap3430.c
> > > > index 7a9603d..a2f32e8 100644
> > > > --- a/drivers/dsp/bridge/wmd/tiomap3430.c
> > > > +++ b/drivers/dsp/bridge/wmd/tiomap3430.c
> > > > @@ -1461,7 +1461,9 @@ static DSP_STATUS WMD_BRD_MemMap(struct
> > > > WMD_DEV_CONTEXT *hDevContext,
> > > > goto func_cont;
> > > > }
> > > >
> > > > - if (vma->vm_flags & VM_IO) {
> > > > + if ((vma->vm_flags & VM_IO) | ((vma->vm_flags & VM_RESERVED)
> > > > +&&
> > > > + (~pgprot_val(vma->vm_page_prot) & L_PTE_CACHEABLE)
> > > > +&&
> > > > + (~pgprot_val(vma->vm_page_prot) &
> > > > +L_PTE_BUFFERABLE))) {
> > > > numUsrPgs = ulNumBytes / PG_SIZE_4K;
> > > > mpuAddr = ulMpuAddr;
> > > > DBG_Trace(DBG_LEVEL4,
> > "WMD_BRD_MemMap:numOfActualTabEntries=%d,"
> > > > --
> > > > 1.6.2.4
> > > >
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html