From: Jerome Marchand <jmarchan@redhat.com>
To: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
akpm@linux-foundation.org
Cc: cl@linux.com, aneesh.kumar@linux.vnet.ibm.com,
dave.hansen@intel.com, aarcange@redhat.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm: add fields for compound destructor and order into struct page
Date: Thu, 11 Dec 2014 14:56:20 +0100 [thread overview]
Message-ID: <5489A284.6030702@redhat.com> (raw)
In-Reply-To: <1418304027-154173-1-git-send-email-kirill.shutemov@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 2788 bytes --]
On 12/11/2014 02:20 PM, Kirill A. Shutemov wrote:
> Currently, we use lru.next/lru.prev plus cast to access or set
> destructor and order of compound page.
>
> Let's replace it with explicit fields in struct page.
Thanks! That made everything much clearer: the complexity of page struct
should not be swept under the carpet.
>
> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Jerome Marchand <jmarchan@redhat.com>
> ---
> include/linux/mm.h | 9 ++++-----
> include/linux/mm_types.h | 8 ++++++++
> 2 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 5bfd9b9756fa..a8de6fe11d0a 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -525,29 +525,28 @@ int split_free_page(struct page *page);
> * prototype for that function and accessor functions.
> * These are _only_ valid on the head of a PG_compound page.
> */
> -typedef void compound_page_dtor(struct page *);
>
> static inline void set_compound_page_dtor(struct page *page,
> compound_page_dtor *dtor)
> {
> - page[1].lru.next = (void *)dtor;
> + page[1].compound_dtor = dtor;
> }
>
> static inline compound_page_dtor *get_compound_page_dtor(struct page *page)
> {
> - return (compound_page_dtor *)page[1].lru.next;
> + return page[1].compound_dtor;
> }
>
> static inline int compound_order(struct page *page)
> {
> if (!PageHead(page))
> return 0;
> - return (unsigned long)page[1].lru.prev;
> + return page[1].compound_order;
> }
>
> static inline void set_compound_order(struct page *page, unsigned long order)
> {
> - page[1].lru.prev = (void *)order;
> + page[1].compound_order = order;
> }
>
> #ifdef CONFIG_MMU
> diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
> index 03945eef1350..cbc71f32a53c 100644
> --- a/include/linux/mm_types.h
> +++ b/include/linux/mm_types.h
> @@ -28,6 +28,8 @@ struct mem_cgroup;
> IS_ENABLED(CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK))
> #define ALLOC_SPLIT_PTLOCKS (SPINLOCK_SIZE > BITS_PER_LONG/8)
>
> +typedef void compound_page_dtor(struct page *);
> +
> /*
> * Each physical page in the system has a struct page associated with
> * it to keep track of whatever it is we are using the page for at the
> @@ -131,6 +133,12 @@ struct page {
> struct rcu_head rcu_head; /* Used by SLAB
> * when destroying via RCU
> */
> + /* First tail page of compound page */
> + struct {
> + compound_page_dtor *compound_dtor;
> + unsigned long compound_order;
> + };
> +
> #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS
> pgtable_t pmd_huge_pte; /* protected by page->ptl */
> #endif
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
next prev parent reply other threads:[~2014-12-11 13:56 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-11 13:20 [PATCH] mm: add fields for compound destructor and order into struct page Kirill A. Shutemov
2014-12-11 13:20 ` Kirill A. Shutemov
2014-12-11 13:56 ` Jerome Marchand [this message]
2014-12-11 15:03 ` Christoph Lameter
2014-12-11 15:03 ` Christoph Lameter
2014-12-11 15:24 ` Johannes Weiner
2014-12-11 15:24 ` Johannes Weiner
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=5489A284.6030702@redhat.com \
--to=jmarchan@redhat.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=cl@linux.com \
--cc=dave.hansen@intel.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
/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.