RE: [PATCH 1/4] [OMAPZOOM] [UPDATE] DSPBRIDGE: Memory lock for DMM.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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: linux-omap-owner@xxxxxxxxxxxxxxx [mailto:linux-omap-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Ameya Palande
> Sent: Tuesday, April 07, 2009 3:20 PM
> To: Guzman Lugo, Fernando
> Cc: Pandita, Vikram; linux-omap@xxxxxxxxxxxxxxx
> 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 <x0095840@xxxxxx>
> wrote:
> >
> > Hi,
> >
> >        Patch updated wit the fix in page_count(pg).
> >
> >
> > From a5ab7e038b72e62358279ef3c4e64b2f260ceeee Mon Sep 17 00:00:00 2001
> > From: Hari Kanigeri <h-kanigeri2@xxxxxx>
> > 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 <h-kanigeri2@xxxxxx>
> > ---
> > +                       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
��.n��������+%������w��{.n�����{�������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux