From: Nick Piggin <npiggin@suse.de>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
airlied@gmail.com, magnade@gmail.com
Subject: Re: [patch] agp: don't lock pages
Date: Thu, 26 Jul 2007 02:41:14 +0200 [thread overview]
Message-ID: <20070726004114.GA17294@wotan.suse.de> (raw)
In-Reply-To: <1185398813.5439.342.camel@localhost.localdomain>
[forgot to cc Dave Jones...]
On Thu, Jul 26, 2007 at 07:26:53AM +1000, Benjamin Herrenschmidt wrote:
> On Wed, 2007-07-25 at 13:19 +0200, Nick Piggin wrote:
> > Hi,
> >
> > Does this patch solve the X problem? Does anyone see anything wrong
> > with it or know why agp was locking the pages?
>
> We need to do a little bit of auditing here, but I suspect it will turn
> out all right. I think the reason it locked them in the first place was
> to avoid AGP pages mapped into process space from being swapped out.
>
> I think that should be taken care of by appropriate vma flags nowadays,
> but we need to double check. It also might have been a way around dodgy
> refcounting at one point but I think we got that right nowadays (I
> remember fixing issues in that area when we removed PageReserved from
> those pages back then).
Yeah I had a bit of a look around, and it seems OK (but would
appreciate an ack from someone who knows the code).
These pages will never get seen by page reclaim, so we're OK
there. There is a get_page before the SetPageLocked and a put_page
right before the unlock_page, so refcounting should not be broken
if it wasn't already: note that the lock_page doesn't pin a
reference on a page in general -- we can use it as such for pagecache
(although it isn't very clean), because the lock pins the page in
pagecache and the pagecache holds a ref.
Anyway, if Dave or David can take a look, that would be appreciated.
We'll need this for 2.6.23.
Nick
>
> Ben.
>
> > --
> > AGP should not need to lock pages. They are not protecting any race
> > because there is no lock_page calls, only SetPageLocked.
> >
> > This is causing hangs with d00806b183152af6d24f46f0c33f14162ca1262a.
> >
> > Signed-off-by: Nick Piggin <npiggin@suse.de>
> >
> > diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
> > index d535c40..3db4f40 100644
> > --- a/drivers/char/agp/generic.c
> > +++ b/drivers/char/agp/generic.c
> > @@ -1170,7 +1170,6 @@ void *agp_generic_alloc_page(struct agp_
> > map_page_into_agp(page);
> >
> > get_page(page);
> > - SetPageLocked(page);
> > atomic_inc(&agp_bridge->current_memory_agp);
> > return page_address(page);
> > }
> > @@ -1187,7 +1186,6 @@ void agp_generic_destroy_page(void *addr
> > page = virt_to_page(addr);
> > unmap_page_from_agp(page);
> > put_page(page);
> > - unlock_page(page);
> > free_page((unsigned long)addr);
> > atomic_dec(&agp_bridge->current_memory_agp);
> > }
> > diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
> > index a124060..2f319f4 100644
> > --- a/drivers/char/agp/intel-agp.c
> > +++ b/drivers/char/agp/intel-agp.c
> > @@ -213,7 +213,6 @@ static void *i8xx_alloc_pages(void)
> > }
> > global_flush_tlb();
> > get_page(page);
> > - SetPageLocked(page);
> > atomic_inc(&agp_bridge->current_memory_agp);
> > return page_address(page);
> > }
> > @@ -229,7 +228,6 @@ static void i8xx_destroy_pages(void *add
> > change_page_attr(page, 4, PAGE_KERNEL);
> > global_flush_tlb();
> > put_page(page);
> > - unlock_page(page);
> > __free_pages(page, 2);
> > atomic_dec(&agp_bridge->current_memory_agp);
> > }
> > diff --git a/drivers/char/agp/sgi-agp.c b/drivers/char/agp/sgi-agp.c
> > index cda608c..98cf8ab 100644
> > --- a/drivers/char/agp/sgi-agp.c
> > +++ b/drivers/char/agp/sgi-agp.c
> > @@ -51,7 +51,6 @@ static void *sgi_tioca_alloc_page(struct
> > return NULL;
> >
> > get_page(page);
> > - SetPageLocked(page);
> > atomic_inc(&agp_bridge->current_memory_agp);
> > return page_address(page);
> > }
next prev parent reply other threads:[~2007-07-26 0:41 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-25 11:19 Nick Piggin
2007-07-25 18:44 ` Bret Towe
2007-07-25 21:26 ` Benjamin Herrenschmidt
2007-07-26 0:41 ` Nick Piggin [this message]
2007-07-26 0:42 ` Nick Piggin
2007-07-26 1:44 ` Dave Airlie
2007-07-26 2:07 ` Nick Piggin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070726004114.GA17294@wotan.suse.de \
--to=npiggin@suse.de \
--cc=airlied@gmail.com \
--cc=benh@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
--cc=magnade@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®