All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: Rich Felker <dalias@libc.org>,
	linux-ia64@vger.kernel.org, linux-doc@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Michal Hocko <mhocko@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Max Filippov <jcmvbkbc@gmail.com>, Guo Ren <guoren@kernel.org>,
	linux-csky@vger.kernel.org, linux-parisc@vger.kernel.org,
	sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	Mike Rapoport <rppt@linux.ibm.com>,
	Greg Ungerer <gerg@linux-m68k.org>,
	linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-snps-arc@lists.infradead.org, linux-c6x-dev@linux-c6x.org,
	Baoquan He <bhe@redhat.com>, Jonathan Corbet <corbet@lwn.net>,
	linux-sh@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
	Helge Deller <deller@gmx.de>,
	x86@kernel.org, Russell King <linux@armlinux.or>
Subject: Re: [PATCH 15/21] mm: memmap_init: iterate over memblock regions rather that check each PFN
Date: Sat, 25 Apr 2020 19:49:47 +0300	[thread overview]
Message-ID: <20200425164947.GH14260@kernel.org> (raw)
In-Reply-To: <9143538a-4aaa-ca1d-9c8f-72ac949cf593@redhat.com>

On Fri, Apr 24, 2020 at 09:22:32AM +0200, David Hildenbrand wrote:
> On 12.04.20 21:48, Mike Rapoport wrote:
> > From: Baoquan He <bhe@redhat.com>
> > 
> > When called during boot the memmap_init_zone() function checks if each PFN
> > is valid and actually belongs to the node being initialized using
> > early_pfn_valid() and early_pfn_in_nid().
> > 
> > Each such check may cost up to O(log(n)) where n is the number of memory
> > banks, so for large amount of memory overall time spent in early_pfn*()
> > becomes substantial.
> > 
> > Since the information is anyway present in memblock, we can iterate over
> > memblock memory regions in memmap_init() and only call memmap_init_zone()
> > for PFN ranges that are know to be valid and in the appropriate node.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> > ---
> >  mm/page_alloc.c | 26 ++++++++++++++++----------
> >  1 file changed, 16 insertions(+), 10 deletions(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 7f6a3081edb8..c43ce8709457 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -5995,14 +5995,6 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
> >  		 * function.  They do not exist on hotplugged memory.
> >  		 */
> 
> After this change, the comment above is stale. the "holes in boot-time
> mem_map" are handled by the caller now AFAIKs.

Right, will update in v2.
Thanks!

> >  		if (context == MEMMAP_EARLY) {
> > -			if (!early_pfn_valid(pfn)) {
> > -				pfn = next_pfn(pfn);
> > -				continue;
> > -			}
> > -			if (!early_pfn_in_nid(pfn, nid)) {
> > -				pfn++;
> > -				continue;
> > -			}
> >  			if (overlap_memmap_init(zone, &pfn))
> >  				continue;
> >  			if (defer_init(nid, pfn, end_pfn))
> 
> 
> -- 
> Thanks,
> 
> David / dhildenb
> 

-- 
Sincerely yours,
Mike.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Baoquan He <bhe@redhat.com>, Brian Cain <bcain@codeaurora.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	"David S. Miller" <davem@davemloft.net>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Greentime Hu <green.hu@gmail.com>,
	Greg Ungerer <gerg@linux-m68k.org>, Guan Xuetao <gxt@pku.edu.cn>,
	Guo Ren <guoren@kernel.org>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Helge Deller <deller@gmx.de>,
	Hoan Tran <Hoan@os.amperecomputing.com>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Ley Foon Tan <ley.foon.tan@intel.com>,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michal Hocko <mhocko@kernel.org>, Michal Simek <monstr@monstr.eu>,
	Nick Hu <nickhu@andestech.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Richard Weinberger <richard@nod.at>,
	Rich Felker <dalias@libc.org>,
	Russell King <linux@armlinux.org.uk>,
	Stafford Horne <shorne@gmail.com>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Tony Luck <tony.luck@intel.com>,
	Vineet Gupta <vgupta@synopsys.com>,
	x86@kernel.org, Yoshinori Sato <ysato@users.sourceforge.jp>,
	linux-alpha@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-c6x-dev@linux-c6x.org, linux-csky@vger.kernel.org,
	linux-doc@vger.kernel.org, linux-hexagon@vger.kernel.org,
	linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-mips@vger.kernel.org, linux-mm@kvack.org,
	linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
	linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org,
	linux-um@lists.infradead.org, linux-xtensa@linux-xtensa.org,
	openrisc@lists.librecores.org, sparclinux@vger.kernel.org,
	uclinux-h8-devel@lists.sourceforge.jp,
	Mike Rapoport <rppt@linux.ibm.com>
Subject: Re: [PATCH 15/21] mm: memmap_init: iterate over memblock regions rather that check each PFN
Date: Sat, 25 Apr 2020 19:49:47 +0300	[thread overview]
Message-ID: <20200425164947.GH14260@kernel.org> (raw)
Message-ID: <20200425164947.tz0qVg--jQdnZUacvskYxyPObrgz5RW5gTlI_BqKvjI@z> (raw)
In-Reply-To: <9143538a-4aaa-ca1d-9c8f-72ac949cf593@redhat.com>

On Fri, Apr 24, 2020 at 09:22:32AM +0200, David Hildenbrand wrote:
> On 12.04.20 21:48, Mike Rapoport wrote:
> > From: Baoquan He <bhe@redhat.com>
> > 
> > When called during boot the memmap_init_zone() function checks if each PFN
> > is valid and actually belongs to the node being initialized using
> > early_pfn_valid() and early_pfn_in_nid().
> > 
> > Each such check may cost up to O(log(n)) where n is the number of memory
> > banks, so for large amount of memory overall time spent in early_pfn*()
> > becomes substantial.
> > 
> > Since the information is anyway present in memblock, we can iterate over
> > memblock memory regions in memmap_init() and only call memmap_init_zone()
> > for PFN ranges that are know to be valid and in the appropriate node.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> > ---
> >  mm/page_alloc.c | 26 ++++++++++++++++----------
> >  1 file changed, 16 insertions(+), 10 deletions(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 7f6a3081edb8..c43ce8709457 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -5995,14 +5995,6 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
> >  		 * function.  They do not exist on hotplugged memory.
> >  		 */
> 
> After this change, the comment above is stale. the "holes in boot-time
> mem_map" are handled by the caller now AFAIKs.

Right, will update in v2.
Thanks!

> >  		if (context == MEMMAP_EARLY) {
> > -			if (!early_pfn_valid(pfn)) {
> > -				pfn = next_pfn(pfn);
> > -				continue;
> > -			}
> > -			if (!early_pfn_in_nid(pfn, nid)) {
> > -				pfn++;
> > -				continue;
> > -			}
> >  			if (overlap_memmap_init(zone, &pfn))
> >  				continue;
> >  			if (defer_init(nid, pfn, end_pfn))
> 
> 
> -- 
> Thanks,
> 
> David / dhildenb
> 

-- 
Sincerely yours,
Mike.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: Rich Felker <dalias@libc.org>,
	linux-ia64@vger.kernel.org, linux-doc@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Michal Hocko <mhocko@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Max Filippov <jcmvbkbc@gmail.com>, Guo Ren <guoren@kernel.org>,
	linux-csky@vger.kernel.org, linux-parisc@vger.kernel.org,
	sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	Mike Rapoport <rppt@linux.ibm.com>,
	Greg Ungerer <gerg@linux-m68k.org>,
	linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-snps-arc@lists.infradead.org, linux-c6x-dev@linux-c6x.org,
	Baoquan He <bhe@redhat.com>, Jonathan Corbet <corbet@lwn.net>,
	linux-sh@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
	Helge Deller <deller@gmx.de>,
	x86@kernel.org, Russell King <linux@armlinux.org.uk>,
	Ley Foon Tan <ley.foon.tan@intel.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-arm-kernel@lists.infradead.org,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	linux-mips@vger.kernel.org,
	uclinux-h8-devel@lists.sourceforge.jp,
	linux-xtensa@linux-xtensa.org, linux-alpha@vger.kernel.org,
	linux-um@lists.infradead.org, linux-m68k@lists.linux-m68k.org,
	Tony Luck <tony.luck@intel.com>,
	Greentime Hu <green.hu@gmail.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Stafford Horne <shorne@gmail.com>, Guan Xuetao <gxt@pku.edu.cn>,
	Hoan Tran <Hoan@os.amperecomputing.com>,
	Michal Simek <monstr@monstr.eu>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Brian Cain <bcain@codeaurora.org>, Nick Hu <nickhu@andestech.com>,
	linux-mm@kvack.org, Vineet Gupta <vgupta@synopsys.com>,
	linux-kernel@vger.kernel.org, openrisc@lists.librecores.org,
	Richard Weinberger <richard@nod.at>,
	Andrew Morton <akpm@linux-foundation.org>,
	linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH 15/21] mm: memmap_init: iterate over memblock regions rather that check each PFN
Date: Sat, 25 Apr 2020 19:49:47 +0300	[thread overview]
Message-ID: <20200425164947.GH14260@kernel.org> (raw)
In-Reply-To: <9143538a-4aaa-ca1d-9c8f-72ac949cf593@redhat.com>

On Fri, Apr 24, 2020 at 09:22:32AM +0200, David Hildenbrand wrote:
> On 12.04.20 21:48, Mike Rapoport wrote:
> > From: Baoquan He <bhe@redhat.com>
> > 
> > When called during boot the memmap_init_zone() function checks if each PFN
> > is valid and actually belongs to the node being initialized using
> > early_pfn_valid() and early_pfn_in_nid().
> > 
> > Each such check may cost up to O(log(n)) where n is the number of memory
> > banks, so for large amount of memory overall time spent in early_pfn*()
> > becomes substantial.
> > 
> > Since the information is anyway present in memblock, we can iterate over
> > memblock memory regions in memmap_init() and only call memmap_init_zone()
> > for PFN ranges that are know to be valid and in the appropriate node.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> > ---
> >  mm/page_alloc.c | 26 ++++++++++++++++----------
> >  1 file changed, 16 insertions(+), 10 deletions(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 7f6a3081edb8..c43ce8709457 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -5995,14 +5995,6 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
> >  		 * function.  They do not exist on hotplugged memory.
> >  		 */
> 
> After this change, the comment above is stale. the "holes in boot-time
> mem_map" are handled by the caller now AFAIKs.

Right, will update in v2.
Thanks!

> >  		if (context == MEMMAP_EARLY) {
> > -			if (!early_pfn_valid(pfn)) {
> > -				pfn = next_pfn(pfn);
> > -				continue;
> > -			}
> > -			if (!early_pfn_in_nid(pfn, nid)) {
> > -				pfn++;
> > -				continue;
> > -			}
> >  			if (overlap_memmap_init(zone, &pfn))
> >  				continue;
> >  			if (defer_init(nid, pfn, end_pfn))
> 
> 
> -- 
> Thanks,
> 
> David / dhildenb
> 

-- 
Sincerely yours,
Mike.


WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: Rich Felker <dalias@libc.org>,
	linux-ia64@vger.kernel.org, linux-doc@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Michal Hocko <mhocko@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Max Filippov <jcmvbkbc@gmail.com>, Guo Ren <guoren@kernel.org>,
	linux-csky@vger.kernel.org, linux-parisc@vger.kernel.org,
	sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	Mike Rapoport <rppt@linux.ibm.com>,
	Greg Ungerer <gerg@linux-m68k.org>,
	linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-snps-arc@lists.infradead.org, linux-c6x-dev@linux-c6x.org,
	Baoquan He <bhe@redhat.com>, Jonathan Corbet <corbet@lwn.net>,
	linux-sh@vger.kernel.org, Helge Deller <deller@gmx.de>,
	x86@kernel.org, Russell King <linux@armlinux.org.uk>,
	Ley Foon Tan <ley.foon.tan@intel.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-arm-kernel@lists.infradead.org,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	linux-mips@vger.kernel.org,
	uclinux-h8-devel@lists.sourceforge.jp,
	linux-xtensa@linux-xtensa.org, linux-alpha@vger.kernel.org,
	linux-um@lists.infradead.org, linux-m68k@lists.linux-m68k.org,
	Tony Luck <tony.luck@intel.com>,
	Greentime Hu <green.hu@gmail.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Stafford Horne <shorne@gmail.com>, Guan Xuetao <gxt@pku.edu.cn>,
	Hoan Tran <Hoan@os.amperecomputing.com>,
	Michal Simek <monstr@monstr.eu>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Brian Cain <bcain@codeaurora.org>, Nick Hu <nickhu@andestech.com>,
	linux-mm@kvack.org, Vineet Gupta <vgupta@synopsys.com>,
	linux-kernel@vger.kernel.org, openrisc@lists.librecores.org,
	Richard Weinberger <richard@nod.at>,
	Andrew Morton <akpm@linux-foundation.org>,
	linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH 15/21] mm: memmap_init: iterate over memblock regions rather that check each PFN
Date: Sat, 25 Apr 2020 19:49:47 +0300	[thread overview]
Message-ID: <20200425164947.GH14260@kernel.org> (raw)
In-Reply-To: <9143538a-4aaa-ca1d-9c8f-72ac949cf593@redhat.com>

On Fri, Apr 24, 2020 at 09:22:32AM +0200, David Hildenbrand wrote:
> On 12.04.20 21:48, Mike Rapoport wrote:
> > From: Baoquan He <bhe@redhat.com>
> > 
> > When called during boot the memmap_init_zone() function checks if each PFN
> > is valid and actually belongs to the node being initialized using
> > early_pfn_valid() and early_pfn_in_nid().
> > 
> > Each such check may cost up to O(log(n)) where n is the number of memory
> > banks, so for large amount of memory overall time spent in early_pfn*()
> > becomes substantial.
> > 
> > Since the information is anyway present in memblock, we can iterate over
> > memblock memory regions in memmap_init() and only call memmap_init_zone()
> > for PFN ranges that are know to be valid and in the appropriate node.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> > ---
> >  mm/page_alloc.c | 26 ++++++++++++++++----------
> >  1 file changed, 16 insertions(+), 10 deletions(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 7f6a3081edb8..c43ce8709457 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -5995,14 +5995,6 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
> >  		 * function.  They do not exist on hotplugged memory.
> >  		 */
> 
> After this change, the comment above is stale. the "holes in boot-time
> mem_map" are handled by the caller now AFAIKs.

Right, will update in v2.
Thanks!

> >  		if (context == MEMMAP_EARLY) {
> > -			if (!early_pfn_valid(pfn)) {
> > -				pfn = next_pfn(pfn);
> > -				continue;
> > -			}
> > -			if (!early_pfn_in_nid(pfn, nid)) {
> > -				pfn++;
> > -				continue;
> > -			}
> >  			if (overlap_memmap_init(zone, &pfn))
> >  				continue;
> >  			if (defer_init(nid, pfn, end_pfn))
> 
> 
> -- 
> Thanks,
> 
> David / dhildenb
> 

-- 
Sincerely yours,
Mike.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: Rich Felker <dalias@libc.org>,
	linux-ia64@vger.kernel.org, linux-doc@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Michal Hocko <mhocko@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Max Filippov <jcmvbkbc@gmail.com>, Guo Ren <guoren@kernel.org>,
	linux-csky@vger.kernel.org, linux-parisc@vger.kernel.org,
	sparclinux@vger.kernel.org, linux-hexagon@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	Mike Rapoport <rppt@linux.ibm.com>,
	Greg Ungerer <gerg@linux-m68k.org>,
	linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-snps-arc@lists.infradead.org, linux-c6x-dev@linux-c6x.org,
	Baoquan He <bhe@redhat.com>, Jonathan Corbet <corbet@lwn.net>,
	linux-sh@vger.kernel.org, Michael Ellerman <mpe@ellerman.id.au>,
	Helge Deller <deller@gmx.de>,
	x86@kernel.org, Russell King <linux@armlinux.org.uk>,
	Ley Foon Tan <ley.foon.tan@intel.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	linux-arm-kernel@lists.infradead.org,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	linux-mips@vger.kernel.org,
	uclinux-h8-devel@lists.sourceforge.jp,
	linux-xtensa@linux-xtensa.org, linux-alpha@vger.kernel.org,
	linux-um@lists.infradead.org, linux-m68k@lists.linux-m68k.org,
	Tony Luck <tony.luck@intel.com>,
	Greentime Hu <green.hu@gmail.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Stafford Horne <shorne@gmail.com>, Guan Xuetao <gxt@pku.edu.cn>,
	Hoan Tran <Hoan@os.amperecomputing.com>,
	Michal Simek <monstr@monstr.eu>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Brian Cain <bcain@codeaurora.org>, Nick Hu <nickhu@andestech.com>,
	linux-mm@kvack.org, Vineet Gupta <vgupta@synopsys.com>,
	linux-kernel@vger.kernel.org, openrisc@lists.librecores.org,
	Richard Weinberger <richard@nod.at>,
	Andrew Morton <akpm@linux-foundation.org>,
	linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH 15/21] mm: memmap_init: iterate over memblock regions rather that check each PFN
Date: Sat, 25 Apr 2020 19:49:47 +0300	[thread overview]
Message-ID: <20200425164947.GH14260@kernel.org> (raw)
In-Reply-To: <9143538a-4aaa-ca1d-9c8f-72ac949cf593@redhat.com>

On Fri, Apr 24, 2020 at 09:22:32AM +0200, David Hildenbrand wrote:
> On 12.04.20 21:48, Mike Rapoport wrote:
> > From: Baoquan He <bhe@redhat.com>
> > 
> > When called during boot the memmap_init_zone() function checks if each PFN
> > is valid and actually belongs to the node being initialized using
> > early_pfn_valid() and early_pfn_in_nid().
> > 
> > Each such check may cost up to O(log(n)) where n is the number of memory
> > banks, so for large amount of memory overall time spent in early_pfn*()
> > becomes substantial.
> > 
> > Since the information is anyway present in memblock, we can iterate over
> > memblock memory regions in memmap_init() and only call memmap_init_zone()
> > for PFN ranges that are know to be valid and in the appropriate node.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> > ---
> >  mm/page_alloc.c | 26 ++++++++++++++++----------
> >  1 file changed, 16 insertions(+), 10 deletions(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 7f6a3081edb8..c43ce8709457 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -5995,14 +5995,6 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
> >  		 * function.  They do not exist on hotplugged memory.
> >  		 */
> 
> After this change, the comment above is stale. the "holes in boot-time
> mem_map" are handled by the caller now AFAIKs.

Right, will update in v2.
Thanks!

> >  		if (context == MEMMAP_EARLY) {
> > -			if (!early_pfn_valid(pfn)) {
> > -				pfn = next_pfn(pfn);
> > -				continue;
> > -			}
> > -			if (!early_pfn_in_nid(pfn, nid)) {
> > -				pfn++;
> > -				continue;
> > -			}
> >  			if (overlap_memmap_init(zone, &pfn))
> >  				continue;
> >  			if (defer_init(nid, pfn, end_pfn))
> 
> 
> -- 
> Thanks,
> 
> David / dhildenb
> 

-- 
Sincerely yours,
Mike.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: openrisc@lists.librecores.org
Subject: [OpenRISC] [PATCH 15/21] mm: memmap_init: iterate over memblock regions rather that check each PFN
Date: Sat, 25 Apr 2020 19:49:47 +0300	[thread overview]
Message-ID: <20200425164947.GH14260@kernel.org> (raw)
In-Reply-To: <9143538a-4aaa-ca1d-9c8f-72ac949cf593@redhat.com>

On Fri, Apr 24, 2020 at 09:22:32AM +0200, David Hildenbrand wrote:
> On 12.04.20 21:48, Mike Rapoport wrote:
> > From: Baoquan He <bhe@redhat.com>
> > 
> > When called during boot the memmap_init_zone() function checks if each PFN
> > is valid and actually belongs to the node being initialized using
> > early_pfn_valid() and early_pfn_in_nid().
> > 
> > Each such check may cost up to O(log(n)) where n is the number of memory
> > banks, so for large amount of memory overall time spent in early_pfn*()
> > becomes substantial.
> > 
> > Since the information is anyway present in memblock, we can iterate over
> > memblock memory regions in memmap_init() and only call memmap_init_zone()
> > for PFN ranges that are know to be valid and in the appropriate node.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
> > ---
> >  mm/page_alloc.c | 26 ++++++++++++++++----------
> >  1 file changed, 16 insertions(+), 10 deletions(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 7f6a3081edb8..c43ce8709457 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -5995,14 +5995,6 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
> >  		 * function.  They do not exist on hotplugged memory.
> >  		 */
> 
> After this change, the comment above is stale. the "holes in boot-time
> mem_map" are handled by the caller now AFAIKs.

Right, will update in v2.
Thanks!

> >  		if (context == MEMMAP_EARLY) {
> > -			if (!early_pfn_valid(pfn)) {
> > -				pfn = next_pfn(pfn);
> > -				continue;
> > -			}
> > -			if (!early_pfn_in_nid(pfn, nid)) {
> > -				pfn++;
> > -				continue;
> > -			}
> >  			if (overlap_memmap_init(zone, &pfn))
> >  				continue;
> >  			if (defer_init(nid, pfn, end_pfn))
> 
> 
> -- 
> Thanks,
> 
> David / dhildenb
> 

-- 
Sincerely yours,
Mike.

  reply	other threads:[~2020-04-25 16:49 UTC|newest]

Thread overview: 297+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-12 19:48 [PATCH 00/21] mm: rework free_area_init*() funcitons Mike Rapoport
2020-04-12 19:48 ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48 ` Mike Rapoport
2020-04-12 19:48 ` Mike Rapoport
2020-04-12 19:48 ` Mike Rapoport
2020-04-12 19:48 ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 01/21] mm: memblock: replace dereferences of memblock_region.nid with API calls Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-21  2:06   ` Baoquan He
2020-04-21  2:06     ` [OpenRISC] " Baoquan He
2020-04-21  2:06     ` Baoquan He
2020-04-21  2:06     ` Baoquan He
2020-04-21  2:06     ` Baoquan He
2020-04-21  2:06     ` Baoquan He
2020-04-12 19:48 ` [PATCH 02/21] mm: make early_pfn_to_nid() and related defintions close to each other Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-21  2:24   ` Baoquan He
2020-04-21  2:24     ` [OpenRISC] " Baoquan He
2020-04-21  2:24     ` Baoquan He
2020-04-21  2:24     ` Baoquan He
2020-04-21  2:24     ` Baoquan He
2020-04-21  2:24     ` Baoquan He
2020-04-21  8:49     ` Mike Rapoport
2020-04-21  8:49       ` [OpenRISC] " Mike Rapoport
2020-04-21  8:49       ` Mike Rapoport
2020-04-21  8:49       ` Mike Rapoport
2020-04-21  8:49       ` Mike Rapoport
2020-04-21  8:49       ` Mike Rapoport
2020-04-21  9:33       ` Baoquan He
2020-04-21  9:33         ` [OpenRISC] " Baoquan He
2020-04-21  9:33         ` Baoquan He
2020-04-21  9:33         ` Baoquan He
2020-04-21  9:33         ` Baoquan He
2020-04-21  9:33         ` Baoquan He
2020-04-21  3:31   ` Baoquan He
2020-04-21  3:31     ` [OpenRISC] " Baoquan He
2020-04-21  3:31     ` Baoquan He
2020-04-21  3:31     ` Baoquan He
2020-04-21  3:31     ` Baoquan He
2020-04-21  3:31     ` Baoquan He
2020-04-21  8:39     ` Mike Rapoport
2020-04-21  8:39       ` [OpenRISC] " Mike Rapoport
2020-04-21  8:39       ` Mike Rapoport
2020-04-21  8:39       ` Mike Rapoport
2020-04-21  8:39       ` Mike Rapoport
2020-04-21  8:39       ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 03/21] mm: remove CONFIG_HAVE_MEMBLOCK_NODE_MAP option Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-21  4:23   ` Baoquan He
2020-04-21  4:23     ` [OpenRISC] " Baoquan He
2020-04-21  4:23     ` Baoquan He
2020-04-21  4:23     ` Baoquan He
2020-04-21  4:23     ` Baoquan He
2020-04-21  4:23     ` Baoquan He
2020-04-21  9:09     ` Mike Rapoport
2020-04-21  9:09       ` [OpenRISC] " Mike Rapoport
2020-04-21  9:09       ` Mike Rapoport
2020-04-21  9:09       ` Mike Rapoport
2020-04-21  9:09       ` Mike Rapoport
2020-04-21  9:09       ` Mike Rapoport
2020-04-21  9:45       ` Baoquan He
2020-04-21  9:45         ` [OpenRISC] " Baoquan He
2020-04-21  9:45         ` Baoquan He
2020-04-21  9:45         ` Baoquan He
2020-04-21  9:45         ` Baoquan He
2020-04-21  9:45         ` Baoquan He
2020-04-12 19:48 ` [PATCH 04/21] mm: free_area_init: use maximal zone PFNs rather than zone sizes Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-22 23:41   ` Baoquan He
2020-04-22 23:41     ` [OpenRISC] " Baoquan He
2020-04-22 23:41     ` Baoquan He
2020-04-22 23:41     ` Baoquan He
2020-04-22 23:41     ` Baoquan He
2020-04-22 23:41     ` Baoquan He
2020-06-15  3:53   ` Greg Ungerer
2020-06-15  3:53     ` Greg Ungerer
2020-06-15  3:53     ` [OpenRISC] " Greg Ungerer
2020-06-15  3:53     ` Greg Ungerer
2020-06-15  3:53     ` Greg Ungerer
2020-06-15  3:53     ` Greg Ungerer
2020-06-15  3:53     ` Greg Ungerer
2020-06-15  3:53     ` Greg Ungerer
2020-06-15  6:22     ` Mike Rapoport
2020-06-15  6:22       ` Mike Rapoport
2020-06-15  6:22       ` [OpenRISC] " Mike Rapoport
2020-06-15  6:22       ` Mike Rapoport
2020-06-15  6:22       ` Mike Rapoport
2020-06-15  6:22       ` Mike Rapoport
2020-06-15  6:22       ` Mike Rapoport
2020-06-15  6:22       ` Mike Rapoport
2020-06-15  7:17       ` Greg Ungerer
2020-06-15  7:17         ` Greg Ungerer
2020-06-15  7:17         ` [OpenRISC] " Greg Ungerer
2020-06-15  7:17         ` Greg Ungerer
2020-06-15  7:17         ` Greg Ungerer
2020-06-15  7:17         ` Greg Ungerer
2020-06-15  7:17         ` Greg Ungerer
2020-06-15  7:17         ` Greg Ungerer
2020-06-15  7:17         ` Greg Ungerer
2020-06-15  8:29         ` Mike Rapoport
2020-06-15 13:02           ` Greg Ungerer
2020-04-12 19:48 ` [PATCH 05/21] mm: use free_area_init() instead of free_area_init_nodes() Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-23  0:02   ` Baoquan He
2020-04-23  0:02     ` [OpenRISC] " Baoquan He
2020-04-23  0:02     ` Baoquan He
2020-04-23  0:02     ` Baoquan He
2020-04-23  0:02     ` Baoquan He
2020-04-23  0:02     ` Baoquan He
2020-04-12 19:48 ` [PATCH 06/21] alpha: simplify detection of memory zone boundaries Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 07/21] arm: " Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 08/21] arm64: simplify detection of memory zone boundaries for UMA configs Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 09/21] csky: simplify detection of memory zone boundaries Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 10/21] m68k: mm: " Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 11/21] parisc: " Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 12/21] sparc32: " Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 13/21] unicore32: " Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 14/21] xtensa: " Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 15/21] mm: memmap_init: iterate over memblock regions rather that check each PFN Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-20 14:26   ` Qian Cai
2020-04-20 14:26     ` [OpenRISC] " Qian Cai
2020-04-20 14:26     ` Qian Cai
2020-04-20 14:26     ` Qian Cai
2020-04-20 14:26     ` Qian Cai
2020-04-20 14:26     ` Qian Cai
2020-04-24  7:22   ` David Hildenbrand
2020-04-24  7:22     ` [OpenRISC] " David Hildenbrand
2020-04-24  7:22     ` David Hildenbrand
2020-04-24  7:22     ` David Hildenbrand
2020-04-24  7:22     ` David Hildenbrand
2020-04-24  7:22     ` David Hildenbrand
2020-04-25 16:49     ` Mike Rapoport [this message]
2020-04-25 16:49       ` [OpenRISC] " Mike Rapoport
2020-04-25 16:49       ` Mike Rapoport
2020-04-25 16:49       ` Mike Rapoport
2020-04-25 16:49       ` Mike Rapoport
2020-04-25 16:49       ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 16/21] mm: remove early_pfn_in_nid() and CONFIG_NODES_SPAN_OTHER_NODES Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-23  1:13   ` Baoquan He
2020-04-23  1:13     ` [OpenRISC] " Baoquan He
2020-04-23  1:13     ` Baoquan He
2020-04-23  1:13     ` Baoquan He
2020-04-23  1:13     ` Baoquan He
2020-04-23  1:13     ` Baoquan He
2020-04-23  5:50     ` Mike Rapoport
2020-04-23  5:50       ` [OpenRISC] " Mike Rapoport
2020-04-23  5:50       ` Mike Rapoport
2020-04-23  5:50       ` Mike Rapoport
2020-04-23  5:50       ` Mike Rapoport
2020-04-23  5:50       ` Mike Rapoport
2020-05-18 21:38     ` Hoan Tran
2020-05-18 21:38       ` [OpenRISC] " Hoan Tran
2020-05-18 21:38       ` Hoan Tran
2020-05-18 21:38       ` Hoan Tran
2020-05-18 21:38       ` Hoan Tran
2020-05-18 21:38       ` Hoan Tran
2020-04-12 19:48 ` [PATCH 17/21] mm: free_area_init: allow defining max_zone_pfn in descending order Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-23  2:53   ` Baoquan He
2020-04-23  2:53     ` [OpenRISC] " Baoquan He
2020-04-23  2:53     ` Baoquan He
2020-04-23  2:53     ` Baoquan He
2020-04-23  2:53     ` Baoquan He
2020-04-23  2:53     ` Baoquan He
2020-04-23  2:57     ` Baoquan He
2020-04-23  2:57       ` [OpenRISC] " Baoquan He
2020-04-23  2:57       ` Baoquan He
2020-04-23  2:57       ` Baoquan He
2020-04-23  2:57       ` Baoquan He
2020-04-23  2:57       ` Baoquan He
2020-04-23  5:55       ` Mike Rapoport
2020-04-23  5:55         ` [OpenRISC] " Mike Rapoport
2020-04-23  5:55         ` Mike Rapoport
2020-04-23  5:55         ` Mike Rapoport
2020-04-23  5:55         ` Mike Rapoport
2020-04-23  5:55         ` Mike Rapoport
2020-04-24  0:33         ` Baoquan He
2020-04-24  0:33           ` [OpenRISC] " Baoquan He
2020-04-24  0:33           ` Baoquan He
2020-04-24  0:33           ` Baoquan He
2020-04-24  0:33           ` Baoquan He
2020-04-24  0:33           ` Baoquan He
2020-04-12 19:48 ` [PATCH 18/21] mm: rename free_area_init_node() to free_area_init_memoryless_node() Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-23  3:14   ` Baoquan He
2020-04-23  3:14     ` [OpenRISC] " Baoquan He
2020-04-23  3:14     ` Baoquan He
2020-04-23  3:14     ` Baoquan He
2020-04-23  3:14     ` Baoquan He
2020-04-23  3:14     ` Baoquan He
2020-04-23  6:18     ` Mike Rapoport
2020-04-23  6:18       ` [OpenRISC] " Mike Rapoport
2020-04-23  6:18       ` Mike Rapoport
2020-04-23  6:18       ` Mike Rapoport
2020-04-23  6:18       ` Mike Rapoport
2020-04-23  6:18       ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 19/21] mm: clean up free_area_init_node() and its helpers Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 20/21] mm: simplify find_min_pfn_with_active_regions() Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48 ` [PATCH 21/21] docs/vm: update memory-models documentation Mike Rapoport
2020-04-12 19:48   ` [OpenRISC] " Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport
2020-04-12 19:48   ` Mike Rapoport

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=20200425164947.GH14260@kernel.org \
    --to=rppt@kernel.org \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=bhe@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=dalias@libc.org \
    --cc=david@redhat.com \
    --cc=deller@gmx.de \
    --cc=gerg@linux-m68k.org \
    --cc=guoren@kernel.org \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jcmvbkbc@gmail.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-c6x-dev@linux-c6x.org \
    --cc=linux-csky@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-hexagon@vger.kernel.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=linux-snps-arc@lists.infradead.org \
    --cc=linux@armlinux.or \
    --cc=mhocko@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=rppt@linux.ibm.com \
    --cc=sparclinux@vger.kernel.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 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.