mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@kernel.org>
To: Pavel Tatashin <pasha.tatashin@oracle.com>
Cc: linux-kernel@vger.kernel.org, sparclinux@vger.kernel.org,
	linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org,
	linux-s390@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	x86@kernel.org, kasan-dev@googlegroups.com,
	borntraeger@de.ibm.com, heiko.carstens@de.ibm.com,
	davem@davemloft.net, willy@infradead.org,
	ard.biesheuvel@linaro.org, will.deacon@arm.com,
	catalin.marinas@arm.com, sam@ravnborg.org
Subject: Re: [v6 08/15] mm: zero struct pages during initialization
Date: Fri, 11 Aug 2017 14:50:47 +0200	[thread overview]
Message-ID: <20170811125047.GJ30811@dhcp22.suse.cz> (raw)
In-Reply-To: <1502138329-123460-9-git-send-email-pasha.tatashin@oracle.com>

On Mon 07-08-17 16:38:42, Pavel Tatashin wrote:
> Add struct page zeroing as a part of initialization of other fields in
> __init_single_page().

I believe this deserves much more detailed explanation why this is safe.
What actually prevents any pfn walker from seeing an uninitialized
struct page? Please make your assumptions explicit in the commit log so
that we can check them independently.

Also this is done with some purpose which is the perfmance, right? You
have mentioned that in the cover letter but if somebody is going to read
through git logs this wouldn't be obvious from the specific commit.
So add that information here as well. Especially numbers will be
interesting.

As a sidenote, this will need some more followups for memory hotplug
after my recent changes which are not merged yet but I will take care of
that.

> Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com>
> Reviewed-by: Steven Sistare <steven.sistare@oracle.com>
> Reviewed-by: Daniel Jordan <daniel.m.jordan@oracle.com>
> Reviewed-by: Bob Picco <bob.picco@oracle.com>

After the relevant information is added feel free add
Acked-by: Michal Hocko <mhocko@suse.com>

> ---
>  include/linux/mm.h | 9 +++++++++
>  mm/page_alloc.c    | 1 +
>  2 files changed, 10 insertions(+)
> 
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 46b9ac5e8569..183ac5e733db 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -93,6 +93,15 @@ extern int mmap_rnd_compat_bits __read_mostly;
>  #define mm_forbids_zeropage(X)	(0)
>  #endif
>  
> +/*
> + * On some architectures it is expensive to call memset() for small sizes.
> + * Those architectures should provide their own implementation of "struct page"
> + * zeroing by defining this macro in <asm/pgtable.h>.
> + */
> +#ifndef mm_zero_struct_page
> +#define mm_zero_struct_page(pp)  ((void)memset((pp), 0, sizeof(struct page)))
> +#endif
> +
>  /*
>   * Default maximum number of active map areas, this limits the number of vmas
>   * per mm struct. Users can overwrite this number by sysctl but there is a
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 983de0a8047b..4d32c1fa4c6c 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -1168,6 +1168,7 @@ static void free_one_page(struct zone *zone,
>  static void __meminit __init_single_page(struct page *page, unsigned long pfn,
>  				unsigned long zone, int nid)
>  {
> +	mm_zero_struct_page(page);
>  	set_page_links(page, zone, nid, pfn);
>  	init_page_count(page);
>  	page_mapcount_reset(page);
> -- 
> 2.14.0

-- 
Michal Hocko
SUSE Labs

  reply	other threads:[~2017-08-11 12:50 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-07 20:38 [v6 00/15] complete deferred page initialization Pavel Tatashin
2017-08-07 20:38 ` [v6 01/15] x86/mm: reserve only exiting low pages Pavel Tatashin
2017-08-11  8:07   ` Michal Hocko
2017-08-11 15:24     ` Pasha Tatashin
2017-08-14 11:40       ` Michal Hocko
2017-08-14 13:30         ` Pasha Tatashin
2017-08-14 13:55   ` Michal Hocko
2017-08-17 15:37     ` Pasha Tatashin
2017-08-07 20:38 ` [v6 02/15] x86/mm: setting fields in deferred pages Pavel Tatashin
2017-08-11  9:02   ` Michal Hocko
2017-08-11 15:39     ` Pasha Tatashin
2017-08-14 11:43       ` Michal Hocko
2017-08-14 13:32         ` Pasha Tatashin
2017-08-07 20:38 ` [v6 03/15] sparc64/mm: " Pavel Tatashin
2017-08-07 20:38 ` [v6 04/15] mm: discard memblock data later Pavel Tatashin
2017-08-11  9:32   ` Michal Hocko
2017-08-11  9:50     ` Mel Gorman
2017-08-11 15:49     ` Pasha Tatashin
2017-08-11 16:04       ` Michal Hocko
2017-08-11 16:22         ` Pasha Tatashin
2017-08-14 11:36           ` Michal Hocko
2017-08-14 13:35             ` Pasha Tatashin
2017-08-11 19:00     ` Pasha Tatashin
2017-08-14 11:34       ` Michal Hocko
2017-08-14 13:39         ` Pasha Tatashin
2017-08-14 13:42           ` Michal Hocko
2017-08-07 20:38 ` [v6 05/15] mm: don't accessed uninitialized struct pages Pavel Tatashin
2017-08-11  9:37   ` Michal Hocko
2017-08-11 15:55     ` Pasha Tatashin
2017-08-14 11:47       ` Michal Hocko
2017-08-14 13:51         ` Pasha Tatashin
2017-08-17 15:28           ` Pasha Tatashin
2017-08-17 15:43             ` Michal Hocko
2017-08-15  9:33   ` Michal Hocko
2017-08-07 20:38 ` [v6 06/15] sparc64: simplify vmemmap_populate Pavel Tatashin
2017-08-07 20:38 ` [v6 07/15] mm: defining memblock_virt_alloc_try_nid_raw Pavel Tatashin
2017-08-11 12:39   ` Michal Hocko
2017-08-11 15:58     ` Pasha Tatashin
2017-08-11 16:06       ` Michal Hocko
2017-08-11 16:24         ` Pasha Tatashin
2017-08-07 20:38 ` [v6 08/15] mm: zero struct pages during initialization Pavel Tatashin
2017-08-11 12:50   ` Michal Hocko [this message]
2017-08-11 16:03     ` Pasha Tatashin
2017-08-07 20:38 ` [v6 09/15] sparc64: optimized struct page zeroing Pavel Tatashin
2017-08-11 12:53   ` Michal Hocko
2017-08-11 16:04     ` Pasha Tatashin
2017-08-07 20:38 ` [v6 10/15] x86/kasan: explicitly zero kasan shadow memory Pavel Tatashin
2017-08-07 20:38 ` [v6 11/15] arm64/kasan: " Pavel Tatashin
2017-08-08  9:07   ` Will Deacon
2017-08-08 11:49     ` Pasha Tatashin
2017-08-08 12:30       ` Will Deacon
2017-08-08 12:49         ` Pasha Tatashin
2017-08-08 13:15       ` David Laight
2017-08-08 13:30         ` Pasha Tatashin
2017-08-07 20:38 ` [v6 12/15] mm: explicitly zero pagetable memory Pavel Tatashin
2017-08-07 20:38 ` [v6 13/15] mm: stop zeroing memory during allocation in vmemmap Pavel Tatashin
2017-08-11 13:04   ` Michal Hocko
2017-08-11 16:11     ` Pasha Tatashin
2017-08-07 20:38 ` [v6 14/15] mm: optimize early system hash allocations Pavel Tatashin
2017-08-11 13:05   ` Michal Hocko
2017-08-11 16:13     ` Pasha Tatashin
2017-08-07 20:38 ` [v6 15/15] mm: debug for raw alloctor Pavel Tatashin
2017-08-11 13:08   ` Michal Hocko
2017-08-11 16:18     ` Pasha Tatashin
2017-08-14 11:50       ` Michal Hocko
2017-08-14 14:01         ` Pasha Tatashin
2017-08-15  9:36           ` Michal Hocko
2017-08-11  7:58 ` [v6 00/15] complete deferred page initialization Michal Hocko
2017-08-11 15:13   ` Pasha Tatashin
2017-08-11 15:22     ` Michal Hocko

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=20170811125047.GJ30811@dhcp22.suse.cz \
    --to=mhocko@kernel.org \
    --cc=ard.biesheuvel@linaro.org \
    --cc=borntraeger@de.ibm.com \
    --cc=catalin.marinas@arm.com \
    --cc=davem@davemloft.net \
    --cc=heiko.carstens@de.ibm.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=pasha.tatashin@oracle.com \
    --cc=sam@ravnborg.org \
    --cc=sparclinux@vger.kernel.org \
    --cc=will.deacon@arm.com \
    --cc=willy@infradead.org \
    --cc=x86@kernel.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 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®