All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Christoph Lameter <clameter@sgi.com>
Cc: Hugh Dickins <hugh@veritas.com>, Nick Piggin <npiggin@suse.de>,
	dgc@sgi.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] Optimize compound_head() by avoiding a shared page flag
Date: Mon, 9 Apr 2007 11:45:45 -0700	[thread overview]
Message-ID: <20070409114545.3858d8f1.akpm@linux-foundation.org> (raw)
In-Reply-To: <Pine.LNX.4.64.0704091105550.8331@schroedinger.engr.sgi.com>

On Mon, 9 Apr 2007 11:09:40 -0700 (PDT)
Christoph Lameter <clameter@sgi.com> wrote:

> Add PageTail / PageHead in order to avoid multiple branches when compound 
> pages are checked.
> 
> The patch adds PageTail(page) and PageHead(page) to check if a page is the
> head or the tail of a compound page. This is done by masking the two
> bits describing the state of a compound page and then comparing them. So 
> one comparision and a branch instead of two bit checks and two branches.
> 

OK.  I'm still a bit concerned about bypassing the bitops synchronisation:
barriers, volatile, etc.  We had lengthy ruminations on that a few years
ago, I think when working on free_pages_check().


> @@ -221,12 +215,24 @@ static inline void SetPageUptodate(struc
>  #define __ClearPageCompound(page) __clear_bit(PG_compound, &(page)->flags)
>  
>  /*
> - * Note: PG_tail is an alias of another page flag. The result of PageTail()
> - * is only valid if PageCompound(page) is true.
> + * PG_reclaim is used in combination with PG_compound to mark the
> + * head and tail of a compound page
> + *
> + * PG_compound & PG_reclaim	=> Tail page
> + * PG_compound & ~PG_reclaim	=> Head page
>   */
> -#define PageTail(page)	test_bit(PG_tail, &(page)->flags)
> -#define __SetPageTail(page)	__set_bit(PG_tail, &(page)->flags)
> -#define __ClearPageTail(page)	__clear_bit(PG_tail, &(page)->flags)
> +
> +#define PG_head_tail_mask ((1L << PG_compound) | (1L << PG_reclaim))
> +
> +#define PageTail(page)	((page->flags & PG_head_tail_mask) \
> +				== PG_head_tail_mask)
> +#define __SetPageTail(page)	page->flags |= PG_head_tail_mask
> +#define __ClearPageTail(page)	page->flags ~= PG_head_tail_mask

hm.  The lack of parenthesisation here _might_ be OK, but I haven't
thought it through.

And I'd prefer not to have to, because I know that the do { } while (0)
thing works.  As do static inline functions.

> +#define PageHead(page)	((page->flags & PG_head_tail_mask) \
> +				== (1L << PG_compound))
> +#define __SetPageHead(page)	__SetCompoundPage(page)
> +#define __ClearPageHead(page)	__ClearCompoundPage(page)

You meant __SetPageCompound and __ClearPageCompound.



  reply	other threads:[~2007-04-09 18:45 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-05 22:36 [PATCH 1/2] Make page->private usable in compound pages V1 Christoph Lameter
2007-04-05 22:36 ` [PATCH 2/2] Optimize compound_head() by avoiding a shared page flag Christoph Lameter
2007-04-07  5:23   ` Andrew Morton
2007-04-07 22:16     ` Christoph Lameter
2007-04-07 22:51       ` Andrew Morton
2007-04-08  0:21         ` Christoph Lameter
2007-04-08  1:25           ` Andrew Morton
2007-04-08  1:32             ` Christoph Lameter
2007-04-08  1:48               ` Andrew Morton
2007-04-09 17:22                 ` Christoph Lameter
2007-04-09 18:09                 ` Christoph Lameter
2007-04-09 18:45                   ` Andrew Morton [this message]
2007-04-09 18:49                     ` Christoph Lameter
2007-04-09 22:05                     ` Christoph Lameter
2007-04-05 23:43 ` [PATCH 1/2] Make page->private usable in compound pages V1 Andrew Morton
2007-04-06 17:01   ` Christoph Lameter
2007-04-06 20:04     ` Andrew Morton
2007-04-06 20:28       ` Christoph Lameter
2007-04-06 19:46   ` Christoph Lameter

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=20070409114545.3858d8f1.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=clameter@sgi.com \
    --cc=dgc@sgi.com \
    --cc=hugh@veritas.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=npiggin@suse.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.