mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Antonio Vargas" <windenntw@gmail.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>,
	"Jeremy Fitzhardinge" <jeremy@xensource.com>,
	akpm@osdl.org, linux-kernel@vger.kernel.org,
	"Chris Wright" <chrisw@sous-sol.org>,
	"Christian Limpach" <Christian.Limpach@cl.cam.ac.uk>,
	"Christoph Lameter" <clameter@sgi.com>,
	"Gerd Hoffmann" <kraxel@suse.de>,
	"Hollis Blanchard" <hollisb@us.ibm.com>,
	"Ian Pratt" <ian.pratt@xensource.com>,
	"Rusty Russell" <rusty@rustcorp.com.au>,
	"Zachary Amsden" <zach@vmware.com>
Subject: Re: [PATCH 1 of 13] Add apply_to_page_range() which applies a function to a pte range
Date: Tue, 1 Aug 2006 14:34:17 +0200	[thread overview]
Message-ID: <69304d110608010534p5ecbdef6ta94bfd4748c3aa6c@mail.gmail.com> (raw)
In-Reply-To: <m1ejw0zmic.fsf@ebiederm.dsl.xmission.com>

On 8/1/06, Eric W. Biederman <ebiederm@xmission.com> wrote:
> Jeremy Fitzhardinge <jeremy@xensource.com> writes:
>
> > 2 files changed, 99 insertions(+)
> > include/linux/mm.h |    5 ++
> > mm/memory.c        |   94 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> >
> >
> > Add a new mm function apply_to_page_range() which applies a given
> > function to every pte in a given virtual address range in a given mm
> > structure. This is a generic alternative to cut-and-pasting the Linux
> > idiomatic pagetable walking code in every place that a sequence of
> > PTEs must be accessed.
> >
> > Although this interface is intended to be useful in a wide range of
> > situations, it is currently used specifically by several Xen
> > subsystems, for example: to ensure that pagetables have been allocated
> > for a virtual address range, and to construct batched special
> > pagetable update requests to map I/O memory (in ioremap()).
>
> - You don't handle huge pages.  For a generic function
>   that sounds like a problem.
> - I believe there is a reason the kernel doesn't already have
>   a function like this.  I seem to recall there being efficiency
>   and fast path arguments.

The proper trick for this is:

1. place you "for each page" code in a #define like so:

#define FOR_EACH_PAGE_INNER do{ ... code ... }while(0);

2. create your function in a separate .h file without the double-include guard

3. inside this code, exchange the indirect function call with your define name:

(*fn)(args); --> FOR_EACH_PAGE_INNER

4. document how the macro will receive certain variables from it's
outer scope, and should leave the "function result" in another one.

this in effect creates a different copy of the page walker for each
function, and inlines your code in it.. just like it would do with a
C++ template.

A place where you can see this technique working is the software
triangle filler from MESA.

The doubt is... is this acceptable regarding linux-kernel coding-style?


> - Placing this code in mm/memory.c without a common consumer is
>   pure kernel bloat for everyone who doesn't use this function,
>   which is just about everyone.
>


-- 
Greetz, Antonio Vargas aka winden of network

http://network.amigascne.org/
windNOenSPAMntw@gmail.com
thesameasabove@amigascne.org

Every day, every year
you have to work
you have to study
you have to scene.

  reply	other threads:[~2006-08-01 12:34 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <79a98a10911fc4e77dce.1154421372@ezr.goop.org>
2006-08-01 12:08 ` Eric W. Biederman
2006-08-01 12:34   ` Antonio Vargas [this message]
2006-08-01 21:14   ` Chris Wright
2006-08-01 21:31     ` Christoph Lameter
2006-08-02  4:16       ` Rusty Russell
2006-08-02  5:18         ` Christoph Lameter
2006-08-02  6:44           ` Ian Wienand
2006-08-02  6:54             ` Chris Wright
2006-08-02 13:17               ` Paul Cameron Davies

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=69304d110608010534p5ecbdef6ta94bfd4748c3aa6c@mail.gmail.com \
    --to=windenntw@gmail.com \
    --cc=Christian.Limpach@cl.cam.ac.uk \
    --cc=akpm@osdl.org \
    --cc=chrisw@sous-sol.org \
    --cc=clameter@sgi.com \
    --cc=ebiederm@xmission.com \
    --cc=hollisb@us.ibm.com \
    --cc=ian.pratt@xensource.com \
    --cc=jeremy@xensource.com \
    --cc=kraxel@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --cc=zach@vmware.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®