Ameya,

> If this is the case then what is the point of having following code?
> if (page_count(pg) < 1)  <-- This will always evaluate to FALSE.

-- As you mentioned this case shouldn't be hit. This check is to only to ensure 
that the translations from user space VA to Physical address is taking place 
correctly and flag the user if something went bad.


Thank you,
Best regards,
Hari

> -----Original Message-----
> From: [email protected] [mailto:linux-omap-
> [email protected]] On Behalf Of Ameya Palande
> Sent: Tuesday, April 07, 2009 3:20 PM
> To: Guzman Lugo, Fernando
> Cc: Pandita, Vikram; [email protected]
> Subject: Re: [PATCH 1/4] [OMAPZOOM] [UPDATE] DSPBRIDGE: Memory lock for
> DMM.
> 
> Hi Fernando,
> 
> On Tue, Apr 7, 2009 at 10:26 PM, Guzman Lugo, Fernando <[email protected]>
> wrote:
> >
> > Hi,
> >
> >        Patch updated wit the fix in page_count(pg).
> >
> >
> > From a5ab7e038b72e62358279ef3c4e64b2f260ceeee Mon Sep 17 00:00:00 2001
> > From: Hari Kanigeri <[email protected]>
> > Date: Thu, 26 Mar 2009 15:47:50 -0500
> > Subject: [PATCH] DSPBRIDGE: Memory lock for DMM.
> >
> > Lock down the pages that are mapped to DSP virtual memory to prevent
> from
> > getting swapped out
> >
> > Signed-off-by: Hari Kanigeri <[email protected]>
> > ---
> > +                       if (pfn_valid(__phys_to_pfn(patemp))) {
> > +                               pg = phys_to_page(patemp);
> > +                               get_page(pg);
> 
> get_page() makes sure that page->count is not zero and atomically
> increments it.
> That means after execution of get_page(); page->count will be always 1
> or greater
> than 1.
> 
> If this is the case then what is the point of having following code?
> if (page_count(pg) < 1)  <-- This will always evaluate to FALSE.
> 
> > +                               if (page_count(pg) < 1) {
> > +                                       printk(KERN_EMERG "DSPBRIDGE:MAP
>  "
> > +                                               "function: COUNT 0 FOR
> PA "
> > +                                               "0x%x\n", patemp);
> > +                                       printk(KERN_EMERG "Bad page
> state"
> > +                                               "in process '%s'\n"
> > +                                               "page:%p flags:0x%0*lx "
> > +                                               "mapping:%p mapcount:%d
> "
> > +                                               "count:%d\n"
> > +                                               "Trying to fix it up,
> but "
> > +                                               "a reboot is needed\n"
> > +                                               "Backtrace:\n",
> > +                                               current->comm, pg,
> > +                                               (int)(2*sizeof(unsigned
> long)),
> > +                                               (unsigned long)pg-
> >flags,
> > +                                               pg->mapping,
> page_mapcount(pg),
> > +                                               page_count(pg));
> > +                                       dump_stack();
> > +                                       BUG_ON(1);
> > +                               }
> 
> Cheers,
> Ameya.
> N�����r��y���b�X��ǧv�^�)޺{.n�+����{��f��{ay�ʇڙ�,j
��f���h���z��w���
> 
> ���j:+v���w�j�m����
����zZ+�����ݢj"��!�i

Reply via email to