All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@linux.ibm.com>
To: linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	"David S. Miller" <davem@davemloft.net>,
	Dennis Zhou <dennis@kernel.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Greentime Hu <green.hu@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guan Xuetao <gxt@pku.edu.cn>, Guo Ren <guoren@kernel.org>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michal Simek <monstr@monstr.eu>,
	Paul Burton <paul.burton@mips.com>,
	Petr Mladek <pmladek@suse.com>, Rich Felker <dalias@libc.org>,
	Richard Weinberger <richard@nod.at>, Rob Herring <robh+d>
Subject: [PATCH v2 02/21] powerpc: use memblock functions returning virtual address
Date: Mon, 21 Jan 2019 08:03:49 +0000	[thread overview]
Message-ID: <1548057848-15136-3-git-send-email-rppt@linux.ibm.com> (raw)
In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com>

From: Christophe Leroy <christophe.leroy@c-s.fr>

Since only the virtual address of allocated blocks is used,
lets use functions returning directly virtual address.

Those functions have the advantage of also zeroing the block.

[ MR:
 - updated error message in alloc_stack() to be more verbose
 - convereted several additional call sites ]

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/powerpc/kernel/dt_cpu_ftrs.c |  3 +--
 arch/powerpc/kernel/irq.c         |  5 -----
 arch/powerpc/kernel/paca.c        |  6 +++++-
 arch/powerpc/kernel/prom.c        |  5 ++++-
 arch/powerpc/kernel/setup_32.c    | 26 ++++++++++++++++----------
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 8be3721..2554824 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -813,7 +813,6 @@ static int __init process_cpufeatures_node(unsigned long node,
 	int len;
 
 	f = &dt_cpu_features[i];
-	memset(f, 0, sizeof(struct dt_cpu_feature));
 
 	f->node = node;
 
@@ -1008,7 +1007,7 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
 	/* Count and allocate space for cpu features */
 	of_scan_flat_dt_subnodes(node, count_cpufeatures_subnodes,
 						&nr_dt_cpu_features);
-	dt_cpu_features = __va(memblock_phys_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE));
+	dt_cpu_features = memblock_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE);
 
 	cpufeatures_setup_start(isa);
 
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 916ddc4..4a44bc3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -725,18 +725,15 @@ void exc_lvl_ctx_init(void)
 #endif
 #endif
 
-		memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = critirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = dbgirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
-		memset((void *)mcheckirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = mcheckirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = HARDIRQ_OFFSET;
@@ -754,12 +751,10 @@ void irq_ctx_init(void)
 	int i;
 
 	for_each_possible_cpu(i) {
-		memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
 		tp = softirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
 
-		memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
 		tp = hardirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 8c890c6..e7382ab 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -196,7 +196,11 @@ void __init allocate_paca_ptrs(void)
 	paca_nr_cpu_ids = nr_cpu_ids;
 
 	paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids;
-	paca_ptrs = __va(memblock_phys_alloc(paca_ptrs_size, SMP_CACHE_BYTES));
+	paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES);
+	if (!paca_ptrs)
+		panic("Failed to allocate %d bytes for paca pointers\n",
+		      paca_ptrs_size);
+
 	memset(paca_ptrs, 0x88, paca_ptrs_size);
 }
 
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index e97aaf2..c0ed4fa 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -127,7 +127,10 @@ static void __init move_device_tree(void)
 	if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
 	    !memblock_is_memory(start + size - 1) ||
 	    overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) {
-		p = __va(memblock_phys_alloc(size, PAGE_SIZE));
+		p = memblock_alloc_raw(size, PAGE_SIZE);
+		if (!p)
+			panic("Failed to allocate %lu bytes to move device tree\n",
+			      size);
 		memcpy(p, initial_boot_params, size);
 		initial_boot_params = p;
 		DBG("Moved device tree to 0x%px\n", p);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 947f904..1f0b762 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -196,6 +196,17 @@ static int __init ppc_init(void)
 }
 arch_initcall(ppc_init);
 
+static void *__init alloc_stack(void)
+{
+	void *ptr = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
+
+	if (!ptr)
+		panic("cannot allocate %d bytes for stack at %pS\n",
+		      THREAD_SIZE, (void *)_RET_IP_);
+
+	return ptr;
+}
+
 void __init irqstack_early_init(void)
 {
 	unsigned int i;
@@ -203,10 +214,8 @@ void __init irqstack_early_init(void)
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by default */
 	for_each_possible_cpu(i) {
-		softirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		hardirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		softirq_ctx[i] = alloc_stack();
+		hardirq_ctx[i] = alloc_stack();
 	}
 }
 
@@ -224,13 +233,10 @@ void __init exc_lvl_early_init(void)
 		hw_cpu = 0;
 #endif
 
-		critirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		critirq_ctx[hw_cpu] = alloc_stack();
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		dbgirq_ctx[hw_cpu] = alloc_stack();
+		mcheckirq_ctx[hw_cpu] = alloc_stack();
 #endif
 	}
 }
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	"David S. Miller" <davem@davemloft.net>,
	Dennis Zhou <dennis@kernel.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Greentime Hu <green.hu@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guan Xuetao <gxt@pku.edu.cn>, Guo Ren <guoren@kernel.org>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michal Simek <monstr@monstr.eu>,
	Paul Burton <paul.burton@mips.com>,
	Petr Mladek <pmladek@suse.com>, Rich Felker <dalias@libc.org>,
	Richard Weinberger <richard@nod.at>,
	Rob Herring <robh+dt@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	Stafford Horne <shorne@gmail.com>,
	Tony Luck <tony.luck@intel.com>,
	Vineet Gupta <vgupta@synopsys.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	devicetree@vger.kernel.org, kasan-dev@googlegroups.com,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-c6x-dev@linux-c6x.org, linux-ia64@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-mips@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org,
	linux-um@lists.infradead.org, linux-usb@vger.kernel.org,
	linux-xtensa@linux-xtensa.org, linuxppc-dev@lists.ozlabs.org,
	openrisc@lists.librecores.org, sparclinux@vger.kernel.org,
	uclinux-h8-devel@lists.sourceforge.jp, x86@kernel.org,
	xen-devel@lists.xenproject.org,
	Christophe Leroy <christophe.leroy@c-s.fr>,
	Mike Rapoport <rppt@linux.ibm.com>
Subject: [PATCH v2 02/21] powerpc: use memblock functions returning virtual address
Date: Mon, 21 Jan 2019 10:03:49 +0200	[thread overview]
Message-ID: <1548057848-15136-3-git-send-email-rppt@linux.ibm.com> (raw)
In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com>

From: Christophe Leroy <christophe.leroy@c-s.fr>

Since only the virtual address of allocated blocks is used,
lets use functions returning directly virtual address.

Those functions have the advantage of also zeroing the block.

[ MR:
 - updated error message in alloc_stack() to be more verbose
 - convereted several additional call sites ]

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/powerpc/kernel/dt_cpu_ftrs.c |  3 +--
 arch/powerpc/kernel/irq.c         |  5 -----
 arch/powerpc/kernel/paca.c        |  6 +++++-
 arch/powerpc/kernel/prom.c        |  5 ++++-
 arch/powerpc/kernel/setup_32.c    | 26 ++++++++++++++++----------
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 8be3721..2554824 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -813,7 +813,6 @@ static int __init process_cpufeatures_node(unsigned long node,
 	int len;
 
 	f = &dt_cpu_features[i];
-	memset(f, 0, sizeof(struct dt_cpu_feature));
 
 	f->node = node;
 
@@ -1008,7 +1007,7 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
 	/* Count and allocate space for cpu features */
 	of_scan_flat_dt_subnodes(node, count_cpufeatures_subnodes,
 						&nr_dt_cpu_features);
-	dt_cpu_features = __va(memblock_phys_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE));
+	dt_cpu_features = memblock_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE);
 
 	cpufeatures_setup_start(isa);
 
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 916ddc4..4a44bc3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -725,18 +725,15 @@ void exc_lvl_ctx_init(void)
 #endif
 #endif
 
-		memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = critirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = dbgirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
-		memset((void *)mcheckirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = mcheckirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = HARDIRQ_OFFSET;
@@ -754,12 +751,10 @@ void irq_ctx_init(void)
 	int i;
 
 	for_each_possible_cpu(i) {
-		memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
 		tp = softirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
 
-		memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
 		tp = hardirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 8c890c6..e7382ab 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -196,7 +196,11 @@ void __init allocate_paca_ptrs(void)
 	paca_nr_cpu_ids = nr_cpu_ids;
 
 	paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids;
-	paca_ptrs = __va(memblock_phys_alloc(paca_ptrs_size, SMP_CACHE_BYTES));
+	paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES);
+	if (!paca_ptrs)
+		panic("Failed to allocate %d bytes for paca pointers\n",
+		      paca_ptrs_size);
+
 	memset(paca_ptrs, 0x88, paca_ptrs_size);
 }
 
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index e97aaf2..c0ed4fa 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -127,7 +127,10 @@ static void __init move_device_tree(void)
 	if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
 	    !memblock_is_memory(start + size - 1) ||
 	    overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) {
-		p = __va(memblock_phys_alloc(size, PAGE_SIZE));
+		p = memblock_alloc_raw(size, PAGE_SIZE);
+		if (!p)
+			panic("Failed to allocate %lu bytes to move device tree\n",
+			      size);
 		memcpy(p, initial_boot_params, size);
 		initial_boot_params = p;
 		DBG("Moved device tree to 0x%px\n", p);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 947f904..1f0b762 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -196,6 +196,17 @@ static int __init ppc_init(void)
 }
 arch_initcall(ppc_init);
 
+static void *__init alloc_stack(void)
+{
+	void *ptr = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
+
+	if (!ptr)
+		panic("cannot allocate %d bytes for stack at %pS\n",
+		      THREAD_SIZE, (void *)_RET_IP_);
+
+	return ptr;
+}
+
 void __init irqstack_early_init(void)
 {
 	unsigned int i;
@@ -203,10 +214,8 @@ void __init irqstack_early_init(void)
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by default */
 	for_each_possible_cpu(i) {
-		softirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		hardirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		softirq_ctx[i] = alloc_stack();
+		hardirq_ctx[i] = alloc_stack();
 	}
 }
 
@@ -224,13 +233,10 @@ void __init exc_lvl_early_init(void)
 		hw_cpu = 0;
 #endif
 
-		critirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		critirq_ctx[hw_cpu] = alloc_stack();
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		dbgirq_ctx[hw_cpu] = alloc_stack();
+		mcheckirq_ctx[hw_cpu] = alloc_stack();
 #endif
 	}
 }
-- 
2.7.4


WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	"David S. Miller" <davem@davemloft.net>,
	Dennis Zhou <dennis@kernel.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Greentime Hu <green.hu@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guan Xuetao <gxt@pku.edu.cn>, Guo Ren <guoren@kernel.org>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michal Simek <monstr@monstr.eu>,
	Paul Burton <paul.burton@mips.com>,
	Petr Mladek <pmladek@suse.com>, Rich Felker <dalias@libc.org>,
	Richard Weinberger <richard@nod.at>, Rob Herring <robh+d>
Subject: [PATCH v2 02/21] powerpc: use memblock functions returning virtual address
Date: Mon, 21 Jan 2019 10:03:49 +0200	[thread overview]
Message-ID: <1548057848-15136-3-git-send-email-rppt@linux.ibm.com> (raw)
In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com>

From: Christophe Leroy <christophe.leroy@c-s.fr>

Since only the virtual address of allocated blocks is used,
lets use functions returning directly virtual address.

Those functions have the advantage of also zeroing the block.

[ MR:
 - updated error message in alloc_stack() to be more verbose
 - convereted several additional call sites ]

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/powerpc/kernel/dt_cpu_ftrs.c |  3 +--
 arch/powerpc/kernel/irq.c         |  5 -----
 arch/powerpc/kernel/paca.c        |  6 +++++-
 arch/powerpc/kernel/prom.c        |  5 ++++-
 arch/powerpc/kernel/setup_32.c    | 26 ++++++++++++++++----------
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 8be3721..2554824 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -813,7 +813,6 @@ static int __init process_cpufeatures_node(unsigned long node,
 	int len;
 
 	f = &dt_cpu_features[i];
-	memset(f, 0, sizeof(struct dt_cpu_feature));
 
 	f->node = node;
 
@@ -1008,7 +1007,7 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
 	/* Count and allocate space for cpu features */
 	of_scan_flat_dt_subnodes(node, count_cpufeatures_subnodes,
 						&nr_dt_cpu_features);
-	dt_cpu_features = __va(memblock_phys_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE));
+	dt_cpu_features = memblock_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE);
 
 	cpufeatures_setup_start(isa);
 
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 916ddc4..4a44bc3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -725,18 +725,15 @@ void exc_lvl_ctx_init(void)
 #endif
 #endif
 
-		memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = critirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = dbgirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
-		memset((void *)mcheckirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = mcheckirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = HARDIRQ_OFFSET;
@@ -754,12 +751,10 @@ void irq_ctx_init(void)
 	int i;
 
 	for_each_possible_cpu(i) {
-		memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
 		tp = softirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
 
-		memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
 		tp = hardirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 8c890c6..e7382ab 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -196,7 +196,11 @@ void __init allocate_paca_ptrs(void)
 	paca_nr_cpu_ids = nr_cpu_ids;
 
 	paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids;
-	paca_ptrs = __va(memblock_phys_alloc(paca_ptrs_size, SMP_CACHE_BYTES));
+	paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES);
+	if (!paca_ptrs)
+		panic("Failed to allocate %d bytes for paca pointers\n",
+		      paca_ptrs_size);
+
 	memset(paca_ptrs, 0x88, paca_ptrs_size);
 }
 
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index e97aaf2..c0ed4fa 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -127,7 +127,10 @@ static void __init move_device_tree(void)
 	if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
 	    !memblock_is_memory(start + size - 1) ||
 	    overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) {
-		p = __va(memblock_phys_alloc(size, PAGE_SIZE));
+		p = memblock_alloc_raw(size, PAGE_SIZE);
+		if (!p)
+			panic("Failed to allocate %lu bytes to move device tree\n",
+			      size);
 		memcpy(p, initial_boot_params, size);
 		initial_boot_params = p;
 		DBG("Moved device tree to 0x%px\n", p);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 947f904..1f0b762 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -196,6 +196,17 @@ static int __init ppc_init(void)
 }
 arch_initcall(ppc_init);
 
+static void *__init alloc_stack(void)
+{
+	void *ptr = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
+
+	if (!ptr)
+		panic("cannot allocate %d bytes for stack at %pS\n",
+		      THREAD_SIZE, (void *)_RET_IP_);
+
+	return ptr;
+}
+
 void __init irqstack_early_init(void)
 {
 	unsigned int i;
@@ -203,10 +214,8 @@ void __init irqstack_early_init(void)
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by default */
 	for_each_possible_cpu(i) {
-		softirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		hardirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		softirq_ctx[i] = alloc_stack();
+		hardirq_ctx[i] = alloc_stack();
 	}
 }
 
@@ -224,13 +233,10 @@ void __init exc_lvl_early_init(void)
 		hw_cpu = 0;
 #endif
 
-		critirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		critirq_ctx[hw_cpu] = alloc_stack();
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		dbgirq_ctx[hw_cpu] = alloc_stack();
+		mcheckirq_ctx[hw_cpu] = alloc_stack();
 #endif
 	}
 }
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	"David S. Miller" <davem@davemloft.net>,
	Dennis Zhou <dennis@kernel.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Greentime Hu <green.hu@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guan Xuetao <gxt@pku.edu.cn>, Guo Ren <guoren@kernel.org>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Mark Salter <msalter@redhat.com>,
	Matt Turner <mattst88@gmail.com>,
	Max Filippov <jcmvbkbc@gmail.com>,
	Michael Ellerman <mpe@ellerman.id.au>,
	Michal Simek <monstr@monstr.eu>,
	Paul Burton <paul.burton@mips.com>,
	Petr Mladek <pmladek@suse.com>, Rich Felker <dalias@libc.org>,
	Richard Weinberger <richard@nod.at>,
	Rob Herring <robh+dt@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	Stafford Horne <shorne@gmail.com>,
	Tony Luck <tony.luck@intel.com>,
	Vineet Gupta <vgupta@synopsys.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	devicetree@vger.kernel.org, kasan-dev@googlegroups.com,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-c6x-dev@linux-c6x.org, linux-ia64@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-mips@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org,
	linux-um@lists.infradead.org, linux-usb@vger.kernel.org,
	linux-xtensa@linux-xtensa.org, linuxppc-dev@lists.ozlabs.org,
	openrisc@lists.librecores.org, sparclinux@vger.kernel.org,
	uclinux-h8-devel@lists.sourceforge.jp, x86@kernel.org,
	xen-devel@lists.xenproject.org,
	Christophe Leroy <christophe.leroy@c-s.fr>,
	Mike Rapoport <rppt@linux.ibm.com>
Subject: [v2,02/21] powerpc: use memblock functions returning virtual address
Date: Mon, 21 Jan 2019 10:03:49 +0200	[thread overview]
Message-ID: <1548057848-15136-3-git-send-email-rppt@linux.ibm.com> (raw)

From: Christophe Leroy <christophe.leroy@c-s.fr>

Since only the virtual address of allocated blocks is used,
lets use functions returning directly virtual address.

Those functions have the advantage of also zeroing the block.

[ MR:
 - updated error message in alloc_stack() to be more verbose
 - convereted several additional call sites ]

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/powerpc/kernel/dt_cpu_ftrs.c |  3 +--
 arch/powerpc/kernel/irq.c         |  5 -----
 arch/powerpc/kernel/paca.c        |  6 +++++-
 arch/powerpc/kernel/prom.c        |  5 ++++-
 arch/powerpc/kernel/setup_32.c    | 26 ++++++++++++++++----------
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 8be3721..2554824 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -813,7 +813,6 @@ static int __init process_cpufeatures_node(unsigned long node,
 	int len;
 
 	f = &dt_cpu_features[i];
-	memset(f, 0, sizeof(struct dt_cpu_feature));
 
 	f->node = node;
 
@@ -1008,7 +1007,7 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
 	/* Count and allocate space for cpu features */
 	of_scan_flat_dt_subnodes(node, count_cpufeatures_subnodes,
 						&nr_dt_cpu_features);
-	dt_cpu_features = __va(memblock_phys_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE));
+	dt_cpu_features = memblock_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE);
 
 	cpufeatures_setup_start(isa);
 
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 916ddc4..4a44bc3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -725,18 +725,15 @@ void exc_lvl_ctx_init(void)
 #endif
 #endif
 
-		memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = critirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = dbgirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
-		memset((void *)mcheckirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = mcheckirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = HARDIRQ_OFFSET;
@@ -754,12 +751,10 @@ void irq_ctx_init(void)
 	int i;
 
 	for_each_possible_cpu(i) {
-		memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
 		tp = softirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
 
-		memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
 		tp = hardirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 8c890c6..e7382ab 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -196,7 +196,11 @@ void __init allocate_paca_ptrs(void)
 	paca_nr_cpu_ids = nr_cpu_ids;
 
 	paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids;
-	paca_ptrs = __va(memblock_phys_alloc(paca_ptrs_size, SMP_CACHE_BYTES));
+	paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES);
+	if (!paca_ptrs)
+		panic("Failed to allocate %d bytes for paca pointers\n",
+		      paca_ptrs_size);
+
 	memset(paca_ptrs, 0x88, paca_ptrs_size);
 }
 
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index e97aaf2..c0ed4fa 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -127,7 +127,10 @@ static void __init move_device_tree(void)
 	if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
 	    !memblock_is_memory(start + size - 1) ||
 	    overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) {
-		p = __va(memblock_phys_alloc(size, PAGE_SIZE));
+		p = memblock_alloc_raw(size, PAGE_SIZE);
+		if (!p)
+			panic("Failed to allocate %lu bytes to move device tree\n",
+			      size);
 		memcpy(p, initial_boot_params, size);
 		initial_boot_params = p;
 		DBG("Moved device tree to 0x%px\n", p);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 947f904..1f0b762 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -196,6 +196,17 @@ static int __init ppc_init(void)
 }
 arch_initcall(ppc_init);
 
+static void *__init alloc_stack(void)
+{
+	void *ptr = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
+
+	if (!ptr)
+		panic("cannot allocate %d bytes for stack at %pS\n",
+		      THREAD_SIZE, (void *)_RET_IP_);
+
+	return ptr;
+}
+
 void __init irqstack_early_init(void)
 {
 	unsigned int i;
@@ -203,10 +214,8 @@ void __init irqstack_early_init(void)
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by default */
 	for_each_possible_cpu(i) {
-		softirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		hardirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		softirq_ctx[i] = alloc_stack();
+		hardirq_ctx[i] = alloc_stack();
 	}
 }
 
@@ -224,13 +233,10 @@ void __init exc_lvl_early_init(void)
 		hw_cpu = 0;
 #endif
 
-		critirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		critirq_ctx[hw_cpu] = alloc_stack();
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		dbgirq_ctx[hw_cpu] = alloc_stack();
+		mcheckirq_ctx[hw_cpu] = alloc_stack();
 #endif
 	}
 }

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: linux-mm@kvack.org
Cc: Rich Felker <dalias@libc.org>,
	linux-ia64@vger.kernel.org, devicetree@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	x86@kernel.org, linux-mips@vger.kernel.org,
	Max Filippov <jcmvbkbc@gmail.com>, Guo Ren <guoren@kernel.org>,
	sparclinux@vger.kernel.org, Christoph Hellwig <hch@lst.de>,
	linux-s390@vger.kernel.org, linux-c6x-dev@linux-c6x.org,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	Richard Weinberger <richard@nod.at>,
	linux-sh@vger.kernel.org, Russell King <linux@armlinux.org.uk>,
	kasan-dev@googlegroups.com, Mike Rapoport <rppt@linux.ibm.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Mark Salter <msalter@redhat.com>, Dennis Zhou <dennis@kernel.org>,
	Matt Turner <mattst88@gmail.com>,
	linux-snps-arc@lists.infradead.org,
	uclinux-h8-devel@lists.sourceforge.jp,
	Petr Mladek <pmladek@suse.com>,
	linux-xtensa@linux-xtensa.org, linux-alpha@vger.kernel.org,
	linux-um@lists.infradead.org, linux-m68k@lists.linux-m68k.org,
	Rob Herring <robh+dt@kernel.org>,
	Greentime Hu <green.hu@gmail.com>,
	xen-devel@lists.xenproject.org, Stafford Horne <shorne@gmail.com>,
	Guan Xuetao <gxt@pku.edu.cn>,
	linux-arm-kernel@lists.infradead.org,
	Michal Simek <monstr@monstr.eu>, Tony Luck <tony.luck@intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	Paul Burton <paul.burton@mips.com>,
	Vineet Gupta <vgupta@synopsys.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	linuxppc-dev@lists.ozlabs.org,
	"David S. Miller" <davem@davemloft.net>,
	openrisc@lists.librecores.org
Subject: [PATCH v2 02/21] powerpc: use memblock functions returning virtual address
Date: Mon, 21 Jan 2019 10:03:49 +0200	[thread overview]
Message-ID: <1548057848-15136-3-git-send-email-rppt@linux.ibm.com> (raw)
In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com>

From: Christophe Leroy <christophe.leroy@c-s.fr>

Since only the virtual address of allocated blocks is used,
lets use functions returning directly virtual address.

Those functions have the advantage of also zeroing the block.

[ MR:
 - updated error message in alloc_stack() to be more verbose
 - convereted several additional call sites ]

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/powerpc/kernel/dt_cpu_ftrs.c |  3 +--
 arch/powerpc/kernel/irq.c         |  5 -----
 arch/powerpc/kernel/paca.c        |  6 +++++-
 arch/powerpc/kernel/prom.c        |  5 ++++-
 arch/powerpc/kernel/setup_32.c    | 26 ++++++++++++++++----------
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 8be3721..2554824 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -813,7 +813,6 @@ static int __init process_cpufeatures_node(unsigned long node,
 	int len;
 
 	f = &dt_cpu_features[i];
-	memset(f, 0, sizeof(struct dt_cpu_feature));
 
 	f->node = node;
 
@@ -1008,7 +1007,7 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
 	/* Count and allocate space for cpu features */
 	of_scan_flat_dt_subnodes(node, count_cpufeatures_subnodes,
 						&nr_dt_cpu_features);
-	dt_cpu_features = __va(memblock_phys_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE));
+	dt_cpu_features = memblock_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE);
 
 	cpufeatures_setup_start(isa);
 
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 916ddc4..4a44bc3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -725,18 +725,15 @@ void exc_lvl_ctx_init(void)
 #endif
 #endif
 
-		memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = critirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = dbgirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
-		memset((void *)mcheckirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = mcheckirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = HARDIRQ_OFFSET;
@@ -754,12 +751,10 @@ void irq_ctx_init(void)
 	int i;
 
 	for_each_possible_cpu(i) {
-		memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
 		tp = softirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
 
-		memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
 		tp = hardirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 8c890c6..e7382ab 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -196,7 +196,11 @@ void __init allocate_paca_ptrs(void)
 	paca_nr_cpu_ids = nr_cpu_ids;
 
 	paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids;
-	paca_ptrs = __va(memblock_phys_alloc(paca_ptrs_size, SMP_CACHE_BYTES));
+	paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES);
+	if (!paca_ptrs)
+		panic("Failed to allocate %d bytes for paca pointers\n",
+		      paca_ptrs_size);
+
 	memset(paca_ptrs, 0x88, paca_ptrs_size);
 }
 
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index e97aaf2..c0ed4fa 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -127,7 +127,10 @@ static void __init move_device_tree(void)
 	if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
 	    !memblock_is_memory(start + size - 1) ||
 	    overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) {
-		p = __va(memblock_phys_alloc(size, PAGE_SIZE));
+		p = memblock_alloc_raw(size, PAGE_SIZE);
+		if (!p)
+			panic("Failed to allocate %lu bytes to move device tree\n",
+			      size);
 		memcpy(p, initial_boot_params, size);
 		initial_boot_params = p;
 		DBG("Moved device tree to 0x%px\n", p);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 947f904..1f0b762 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -196,6 +196,17 @@ static int __init ppc_init(void)
 }
 arch_initcall(ppc_init);
 
+static void *__init alloc_stack(void)
+{
+	void *ptr = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
+
+	if (!ptr)
+		panic("cannot allocate %d bytes for stack at %pS\n",
+		      THREAD_SIZE, (void *)_RET_IP_);
+
+	return ptr;
+}
+
 void __init irqstack_early_init(void)
 {
 	unsigned int i;
@@ -203,10 +214,8 @@ void __init irqstack_early_init(void)
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by default */
 	for_each_possible_cpu(i) {
-		softirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		hardirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		softirq_ctx[i] = alloc_stack();
+		hardirq_ctx[i] = alloc_stack();
 	}
 }
 
@@ -224,13 +233,10 @@ void __init exc_lvl_early_init(void)
 		hw_cpu = 0;
 #endif
 
-		critirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		critirq_ctx[hw_cpu] = alloc_stack();
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		dbgirq_ctx[hw_cpu] = alloc_stack();
+		mcheckirq_ctx[hw_cpu] = alloc_stack();
 #endif
 	}
 }
-- 
2.7.4


WARNING: multiple messages have this Message-ID (diff)
From: rppt@linux.ibm.com (Mike Rapoport)
To: linux-snps-arc@lists.infradead.org
Subject: [PATCH v2 02/21] powerpc: use memblock functions returning virtual address
Date: Mon, 21 Jan 2019 10:03:49 +0200	[thread overview]
Message-ID: <1548057848-15136-3-git-send-email-rppt@linux.ibm.com> (raw)
In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com>

From: Christophe Leroy <christophe.leroy@c-s.fr>

Since only the virtual address of allocated blocks is used,
lets use functions returning directly virtual address.

Those functions have the advantage of also zeroing the block.

[ MR:
 - updated error message in alloc_stack() to be more verbose
 - convereted several additional call sites ]

Signed-off-by: Christophe Leroy <christophe.leroy at c-s.fr>
Signed-off-by: Mike Rapoport <rppt at linux.ibm.com>
---
 arch/powerpc/kernel/dt_cpu_ftrs.c |  3 +--
 arch/powerpc/kernel/irq.c         |  5 -----
 arch/powerpc/kernel/paca.c        |  6 +++++-
 arch/powerpc/kernel/prom.c        |  5 ++++-
 arch/powerpc/kernel/setup_32.c    | 26 ++++++++++++++++----------
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 8be3721..2554824 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -813,7 +813,6 @@ static int __init process_cpufeatures_node(unsigned long node,
 	int len;
 
 	f = &dt_cpu_features[i];
-	memset(f, 0, sizeof(struct dt_cpu_feature));
 
 	f->node = node;
 
@@ -1008,7 +1007,7 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
 	/* Count and allocate space for cpu features */
 	of_scan_flat_dt_subnodes(node, count_cpufeatures_subnodes,
 						&nr_dt_cpu_features);
-	dt_cpu_features = __va(memblock_phys_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE));
+	dt_cpu_features = memblock_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE);
 
 	cpufeatures_setup_start(isa);
 
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 916ddc4..4a44bc3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -725,18 +725,15 @@ void exc_lvl_ctx_init(void)
 #endif
 #endif
 
-		memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = critirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = dbgirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
-		memset((void *)mcheckirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = mcheckirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = HARDIRQ_OFFSET;
@@ -754,12 +751,10 @@ void irq_ctx_init(void)
 	int i;
 
 	for_each_possible_cpu(i) {
-		memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
 		tp = softirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
 
-		memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
 		tp = hardirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 8c890c6..e7382ab 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -196,7 +196,11 @@ void __init allocate_paca_ptrs(void)
 	paca_nr_cpu_ids = nr_cpu_ids;
 
 	paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids;
-	paca_ptrs = __va(memblock_phys_alloc(paca_ptrs_size, SMP_CACHE_BYTES));
+	paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES);
+	if (!paca_ptrs)
+		panic("Failed to allocate %d bytes for paca pointers\n",
+		      paca_ptrs_size);
+
 	memset(paca_ptrs, 0x88, paca_ptrs_size);
 }
 
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index e97aaf2..c0ed4fa 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -127,7 +127,10 @@ static void __init move_device_tree(void)
 	if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
 	    !memblock_is_memory(start + size - 1) ||
 	    overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) {
-		p = __va(memblock_phys_alloc(size, PAGE_SIZE));
+		p = memblock_alloc_raw(size, PAGE_SIZE);
+		if (!p)
+			panic("Failed to allocate %lu bytes to move device tree\n",
+			      size);
 		memcpy(p, initial_boot_params, size);
 		initial_boot_params = p;
 		DBG("Moved device tree to 0x%px\n", p);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 947f904..1f0b762 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -196,6 +196,17 @@ static int __init ppc_init(void)
 }
 arch_initcall(ppc_init);
 
+static void *__init alloc_stack(void)
+{
+	void *ptr = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
+
+	if (!ptr)
+		panic("cannot allocate %d bytes for stack at %pS\n",
+		      THREAD_SIZE, (void *)_RET_IP_);
+
+	return ptr;
+}
+
 void __init irqstack_early_init(void)
 {
 	unsigned int i;
@@ -203,10 +214,8 @@ void __init irqstack_early_init(void)
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by default */
 	for_each_possible_cpu(i) {
-		softirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		hardirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		softirq_ctx[i] = alloc_stack();
+		hardirq_ctx[i] = alloc_stack();
 	}
 }
 
@@ -224,13 +233,10 @@ void __init exc_lvl_early_init(void)
 		hw_cpu = 0;
 #endif
 
-		critirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		critirq_ctx[hw_cpu] = alloc_stack();
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		dbgirq_ctx[hw_cpu] = alloc_stack();
+		mcheckirq_ctx[hw_cpu] = alloc_stack();
 #endif
 	}
 }
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: openrisc@lists.librecores.org
Subject: [OpenRISC] [PATCH v2 02/21] powerpc: use memblock functions returning virtual address
Date: Mon, 21 Jan 2019 10:03:49 +0200	[thread overview]
Message-ID: <1548057848-15136-3-git-send-email-rppt@linux.ibm.com> (raw)
In-Reply-To: <1548057848-15136-1-git-send-email-rppt@linux.ibm.com>

From: Christophe Leroy <christophe.leroy@c-s.fr>

Since only the virtual address of allocated blocks is used,
lets use functions returning directly virtual address.

Those functions have the advantage of also zeroing the block.

[ MR:
 - updated error message in alloc_stack() to be more verbose
 - convereted several additional call sites ]

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
---
 arch/powerpc/kernel/dt_cpu_ftrs.c |  3 +--
 arch/powerpc/kernel/irq.c         |  5 -----
 arch/powerpc/kernel/paca.c        |  6 +++++-
 arch/powerpc/kernel/prom.c        |  5 ++++-
 arch/powerpc/kernel/setup_32.c    | 26 ++++++++++++++++----------
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/arch/powerpc/kernel/dt_cpu_ftrs.c b/arch/powerpc/kernel/dt_cpu_ftrs.c
index 8be3721..2554824 100644
--- a/arch/powerpc/kernel/dt_cpu_ftrs.c
+++ b/arch/powerpc/kernel/dt_cpu_ftrs.c
@@ -813,7 +813,6 @@ static int __init process_cpufeatures_node(unsigned long node,
 	int len;
 
 	f = &dt_cpu_features[i];
-	memset(f, 0, sizeof(struct dt_cpu_feature));
 
 	f->node = node;
 
@@ -1008,7 +1007,7 @@ static int __init dt_cpu_ftrs_scan_callback(unsigned long node, const char
 	/* Count and allocate space for cpu features */
 	of_scan_flat_dt_subnodes(node, count_cpufeatures_subnodes,
 						&nr_dt_cpu_features);
-	dt_cpu_features = __va(memblock_phys_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE));
+	dt_cpu_features = memblock_alloc(sizeof(struct dt_cpu_feature) * nr_dt_cpu_features, PAGE_SIZE);
 
 	cpufeatures_setup_start(isa);
 
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 916ddc4..4a44bc3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -725,18 +725,15 @@ void exc_lvl_ctx_init(void)
 #endif
 #endif
 
-		memset((void *)critirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = critirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
 #ifdef CONFIG_BOOKE
-		memset((void *)dbgirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = dbgirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = 0;
 
-		memset((void *)mcheckirq_ctx[cpu_nr], 0, THREAD_SIZE);
 		tp = mcheckirq_ctx[cpu_nr];
 		tp->cpu = cpu_nr;
 		tp->preempt_count = HARDIRQ_OFFSET;
@@ -754,12 +751,10 @@ void irq_ctx_init(void)
 	int i;
 
 	for_each_possible_cpu(i) {
-		memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
 		tp = softirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
 
-		memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
 		tp = hardirq_ctx[i];
 		tp->cpu = i;
 		klp_init_thread_info(tp);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index 8c890c6..e7382ab 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -196,7 +196,11 @@ void __init allocate_paca_ptrs(void)
 	paca_nr_cpu_ids = nr_cpu_ids;
 
 	paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids;
-	paca_ptrs = __va(memblock_phys_alloc(paca_ptrs_size, SMP_CACHE_BYTES));
+	paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES);
+	if (!paca_ptrs)
+		panic("Failed to allocate %d bytes for paca pointers\n",
+		      paca_ptrs_size);
+
 	memset(paca_ptrs, 0x88, paca_ptrs_size);
 }
 
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index e97aaf2..c0ed4fa 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -127,7 +127,10 @@ static void __init move_device_tree(void)
 	if ((memory_limit && (start + size) > PHYSICAL_START + memory_limit) ||
 	    !memblock_is_memory(start + size - 1) ||
 	    overlaps_crashkernel(start, size) || overlaps_initrd(start, size)) {
-		p = __va(memblock_phys_alloc(size, PAGE_SIZE));
+		p = memblock_alloc_raw(size, PAGE_SIZE);
+		if (!p)
+			panic("Failed to allocate %lu bytes to move device tree\n",
+			      size);
 		memcpy(p, initial_boot_params, size);
 		initial_boot_params = p;
 		DBG("Moved device tree to 0x%px\n", p);
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 947f904..1f0b762 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -196,6 +196,17 @@ static int __init ppc_init(void)
 }
 arch_initcall(ppc_init);
 
+static void *__init alloc_stack(void)
+{
+	void *ptr = memblock_alloc(THREAD_SIZE, THREAD_SIZE);
+
+	if (!ptr)
+		panic("cannot allocate %d bytes for stack at %pS\n",
+		      THREAD_SIZE, (void *)_RET_IP_);
+
+	return ptr;
+}
+
 void __init irqstack_early_init(void)
 {
 	unsigned int i;
@@ -203,10 +214,8 @@ void __init irqstack_early_init(void)
 	/* interrupt stacks must be in lowmem, we get that for free on ppc32
 	 * as the memblock is limited to lowmem by default */
 	for_each_possible_cpu(i) {
-		softirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		hardirq_ctx[i] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		softirq_ctx[i] = alloc_stack();
+		hardirq_ctx[i] = alloc_stack();
 	}
 }
 
@@ -224,13 +233,10 @@ void __init exc_lvl_early_init(void)
 		hw_cpu = 0;
 #endif
 
-		critirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		critirq_ctx[hw_cpu] = alloc_stack();
 #ifdef CONFIG_BOOKE
-		dbgirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
-		mcheckirq_ctx[hw_cpu] = (struct thread_info *)
-			__va(memblock_phys_alloc(THREAD_SIZE, THREAD_SIZE));
+		dbgirq_ctx[hw_cpu] = alloc_stack();
+		mcheckirq_ctx[hw_cpu] = alloc_stack();
 #endif
 	}
 }
-- 
2.7.4


  parent reply	other threads:[~2019-01-21  8:03 UTC|newest]

Thread overview: 469+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-21  8:03 [PATCH v2 00/21] Refine memblock API Mike Rapoport
2019-01-21  8:03 ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 01/21] openrisc: prefer memblock APIs returning virtual address Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,01/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 01/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-27  3:07   ` Stafford Horne
2019-01-27  3:07   ` Stafford Horne
2019-01-27  3:07     ` [OpenRISC] " Stafford Horne
2019-01-27  3:07     ` Stafford Horne
2019-01-27  3:07     ` Stafford Horne
2019-01-27  3:07     ` [v2,01/21] " Stafford Horne
2019-01-27  3:07     ` [PATCH v2 01/21] " Stafford Horne
2019-01-27  3:07     ` Stafford Horne
2019-01-27  3:07     ` Stafford Horne
2019-01-21  8:03 ` Mike Rapoport [this message]
2019-01-21  8:03   ` [OpenRISC] [PATCH v2 02/21] powerpc: use memblock functions " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,02/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 02/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-29  9:52   ` Michael Ellerman
2019-01-29  9:52     ` [OpenRISC] " Michael Ellerman
2019-01-29  9:52     ` Michael Ellerman
2019-01-29  9:52     ` Michael Ellerman
2019-01-29  9:52     ` [v2,02/21] " Michael Ellerman
2019-01-29  9:52     ` [PATCH v2 02/21] " Michael Ellerman
2019-01-29  9:52     ` Michael Ellerman
2019-01-29  9:52   ` Michael Ellerman
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 03/21] memblock: replace memblock_alloc_base(ANYWHERE) with memblock_phys_alloc Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,03/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 03/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 04/21] memblock: drop memblock_alloc_base_nid() Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,04/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 04/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 05/21] memblock: emphasize that memblock_alloc_range() returns a physical address Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,05/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 05/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 06/21] memblock: memblock_phys_alloc_try_nid(): don't panic Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,06/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 06/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-25 17:45   ` Catalin Marinas
2019-01-25 17:45   ` Catalin Marinas
2019-01-25 17:45     ` [OpenRISC] " Catalin Marinas
2019-01-25 17:45     ` Catalin Marinas
2019-01-25 17:45     ` Catalin Marinas
2019-01-25 17:45     ` [v2,06/21] " Catalin Marinas
2019-01-25 17:45     ` [PATCH v2 06/21] " Catalin Marinas
2019-01-25 17:45     ` Catalin Marinas
2019-01-25 17:45     ` Catalin Marinas
2019-01-25 19:32     ` Mike Rapoport
2019-01-25 19:32       ` [OpenRISC] " Mike Rapoport
2019-01-25 19:32       ` Mike Rapoport
2019-01-25 19:32       ` Mike Rapoport
2019-01-25 19:32       ` [v2,06/21] " Mike Rapoport
2019-01-25 19:32       ` [PATCH v2 06/21] " Mike Rapoport
2019-01-25 19:32       ` Mike Rapoport
2019-01-25 19:32       ` Mike Rapoport
2019-01-25 19:32     ` Mike Rapoport
2019-01-29  9:56   ` Michael Ellerman
2019-01-29  9:56   ` Michael Ellerman
2019-01-29  9:56     ` [OpenRISC] " Michael Ellerman
2019-01-29  9:56     ` Michael Ellerman
2019-01-29  9:56     ` Michael Ellerman
2019-01-29  9:56     ` Michael Ellerman
2019-01-29  9:56     ` [v2,06/21] " Michael Ellerman
2019-01-29  9:56     ` [PATCH v2 06/21] " Michael Ellerman
2019-01-29  9:56     ` Michael Ellerman
2019-01-29  9:56     ` Michael Ellerman
2019-01-29  9:58     ` Michael Ellerman
2019-01-29  9:58     ` Michael Ellerman
2019-01-29  9:58       ` [OpenRISC] " Michael Ellerman
2019-01-29  9:58       ` Michael Ellerman
2019-01-29  9:58       ` Michael Ellerman
2019-01-29  9:58       ` Michael Ellerman
2019-01-29  9:58       ` [v2,06/21] " Michael Ellerman
2019-01-29  9:58       ` [PATCH v2 06/21] " Michael Ellerman
2019-01-29  9:58       ` Michael Ellerman
2019-01-29  9:58       ` Michael Ellerman
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 07/21] memblock: memblock_phys_alloc(): " Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,07/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 07/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 08/21] memblock: drop __memblock_alloc_base() Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,08/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 08/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 09/21] memblock: drop memblock_alloc_base() Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,09/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 09/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-29 10:29   ` Michael Ellerman
2019-01-29 10:29     ` [OpenRISC] " Michael Ellerman
2019-01-29 10:29     ` Michael Ellerman
2019-01-29 10:29     ` Michael Ellerman
2019-01-29 10:29     ` Michael Ellerman
2019-01-29 10:29     ` [v2,09/21] " Michael Ellerman
2019-01-29 10:29     ` [PATCH v2 09/21] " Michael Ellerman
2019-01-29 10:29     ` Michael Ellerman
2019-01-29 10:29     ` Michael Ellerman
2019-01-29 10:29   ` Michael Ellerman
2019-01-21  8:03 ` [PATCH v2 10/21] memblock: refactor internal allocation functions Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,10/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 10/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-02-03  9:39   ` Michael Ellerman
2019-02-03  9:39   ` Michael Ellerman
2019-02-03  9:39     ` [OpenRISC] " Michael Ellerman
2019-02-03  9:39     ` Michael Ellerman
2019-02-03  9:39     ` Michael Ellerman
2019-02-03  9:39     ` Michael Ellerman
2019-02-03  9:39     ` [v2,10/21] " Michael Ellerman
2019-02-03  9:39     ` [PATCH v2 10/21] " Michael Ellerman
2019-02-03  9:39     ` Michael Ellerman
2019-02-03  9:39     ` Michael Ellerman
2019-02-03 10:04     ` Mike Rapoport
2019-02-03 10:04       ` [OpenRISC] " Mike Rapoport
2019-02-03 10:04       ` Mike Rapoport
2019-02-03 10:04       ` Mike Rapoport
2019-02-03 10:04       ` [v2,10/21] " Mike Rapoport
2019-02-03 10:04       ` [PATCH v2 10/21] " Mike Rapoport
2019-02-03 10:04       ` Mike Rapoport
2019-02-03 10:04       ` Mike Rapoport
2019-02-03 10:04     ` Mike Rapoport
2019-02-03 11:39     ` Mike Rapoport
2019-02-03 11:39       ` Mike Rapoport
2019-02-04  8:45       ` Michael Ellerman
2019-02-04  8:45         ` Michael Ellerman
2019-02-04 23:08         ` Stephen Rothwell
2019-02-04 23:08           ` Stephen Rothwell
2019-01-21  8:03 ` [PATCH v2 11/21] memblock: make memblock_find_in_range_node() and choose_memblock_flags() static Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,11/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 11/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03 ` [PATCH v2 12/21] arch: use memblock_alloc() instead of memblock_alloc_from(size, align, 0) Mike Rapoport
2019-01-21  8:03   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` [v2,12/21] " Mike Rapoport
2019-01-21  8:03   ` [PATCH v2 12/21] " Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03   ` Mike Rapoport
2019-01-21  8:03 ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 13/21] arch: don't memset(0) memory returned by memblock_alloc() Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,13/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 13/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04 ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 14/21] ia64: add checks for the return value of memblock_alloc*() Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,14/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 14/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 15/21] sparc: " Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,15/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 15/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04 ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 16/21] mm/percpu: " Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,16/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 16/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 17/21] init/main: " Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,17/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 17/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04 ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 18/21] swiotlb: " Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,18/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 18/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04 ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 19/21] treewide: " Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,19/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 19/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:39   ` Geert Uytterhoeven
2019-01-21  8:39   ` Geert Uytterhoeven
2019-01-21  8:39     ` Geert Uytterhoeven
2019-01-21  8:39     ` Geert Uytterhoeven
2019-01-21  8:39     ` [OpenRISC] " Geert Uytterhoeven
2019-01-21  8:39     ` Geert Uytterhoeven
2019-01-21  8:39     ` Geert Uytterhoeven
2019-01-21  8:39     ` Geert Uytterhoeven
2019-01-21  8:39     ` Geert Uytterhoeven
2019-01-21  8:39     ` Geert Uytterhoeven
2019-01-21 17:18   ` Rob Herring
2019-01-21 17:18   ` Rob Herring
2019-01-21 17:18     ` [OpenRISC] " Rob Herring
2019-01-21 17:18     ` Rob Herring
2019-01-21 17:18     ` Rob Herring
2019-01-21 17:18     ` [v2,19/21] " Rob Herring
2019-01-21 17:18     ` [PATCH v2 19/21] " Rob Herring
2019-01-21 17:18     ` Rob Herring
2019-01-21 17:18     ` Rob Herring
2019-01-31  6:07   ` Christophe Leroy
2019-01-31  6:07     ` [OpenRISC] " Christophe Leroy
2019-01-31  6:07     ` Christophe Leroy
2019-01-31  6:07     ` Christophe Leroy
2019-01-31  6:07     ` [v2,19/21] " Christophe Leroy
2019-01-31  6:07     ` [PATCH v2 19/21] " Christophe Leroy
2019-01-31  6:07     ` Christophe Leroy
2019-01-31  6:07     ` Christophe Leroy
2019-01-31  6:41     ` Mike Rapoport
2019-01-31  6:41     ` Mike Rapoport
2019-01-31  6:41       ` Mike Rapoport
2019-01-31  6:41       ` [OpenRISC] " Mike Rapoport
2019-01-31  6:41       ` Mike Rapoport
2019-01-31  6:41       ` Mike Rapoport
2019-01-31  6:41       ` [v2,19/21] " Mike Rapoport
2019-01-31  6:41       ` [PATCH v2 19/21] " Mike Rapoport
2019-01-31  6:41       ` Mike Rapoport
2019-01-31  6:41       ` Mike Rapoport
2019-01-31  6:44       ` Christophe Leroy
2019-01-31  6:44       ` Christophe Leroy
2019-01-31  6:44         ` [OpenRISC] " Christophe Leroy
2019-01-31  6:44         ` Christophe Leroy
2019-01-31  6:44         ` Christophe Leroy
2019-01-31  6:44         ` [v2,19/21] " Christophe Leroy
2019-01-31  6:44         ` [PATCH v2 19/21] " Christophe Leroy
2019-01-31  6:44         ` Christophe Leroy
2019-01-31  6:44         ` Christophe Leroy
2019-01-31  7:07         ` Christophe Leroy
2019-01-31  7:07           ` [OpenRISC] " Christophe Leroy
2019-01-31  7:07           ` Christophe Leroy
2019-01-31  7:07           ` Christophe Leroy
2019-01-31  7:07           ` [v2,19/21] " Christophe Leroy
2019-01-31  7:07           ` [PATCH v2 19/21] " Christophe Leroy
2019-01-31  7:07           ` Christophe Leroy
2019-01-31  7:07           ` Christophe Leroy
2019-01-31  7:14           ` Mike Rapoport
2019-01-31  7:14           ` Mike Rapoport
2019-01-31  7:14             ` Mike Rapoport
2019-01-31  7:14             ` [OpenRISC] " Mike Rapoport
2019-01-31  7:14             ` Mike Rapoport
2019-01-31  7:14             ` Mike Rapoport
2019-01-31  7:14             ` [v2,19/21] " Mike Rapoport
2019-01-31  7:14             ` [PATCH v2 19/21] " Mike Rapoport
2019-01-31  7:14             ` Mike Rapoport
2019-01-31  7:14             ` Mike Rapoport
2019-01-31  7:07         ` Christophe Leroy
2019-01-31  6:07   ` Christophe Leroy
2019-01-31 15:23   ` Max Filippov
2019-01-31 15:23   ` Max Filippov
2019-01-31 15:23     ` Max Filippov
2019-01-31 15:23     ` Max Filippov
2019-01-31 15:23     ` [OpenRISC] " Max Filippov
2019-01-31 15:23     ` Max Filippov
2019-01-31 15:23     ` Max Filippov
2019-01-31 15:23     ` Max Filippov
2019-01-31 15:23     ` Max Filippov
2019-01-21  8:04 ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 20/21] memblock: memblock_alloc_try_nid: don't panic Mike Rapoport
2019-01-21  8:04 ` Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,20/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 20/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04 ` [PATCH v2 21/21] memblock: drop memblock_alloc_*_nopanic() variants Mike Rapoport
2019-01-21  8:04 ` Mike Rapoport
2019-01-21  8:04   ` [OpenRISC] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` [v2,21/21] " Mike Rapoport
2019-01-21  8:04   ` [PATCH v2 21/21] " Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-21  8:04   ` Mike Rapoport
2019-01-30 13:38   ` Petr Mladek
2019-01-30 13:38   ` Petr Mladek
2019-01-30 13:38     ` [OpenRISC] " Petr Mladek
2019-01-30 13:38     ` Petr Mladek
2019-01-30 13:38     ` Petr Mladek
2019-01-30 13:38     ` [v2,21/21] " Petr Mladek
2019-01-30 13:38     ` [PATCH v2 21/21] " Petr Mladek
2019-01-30 13:38     ` Petr Mladek
2019-01-30 13:38     ` Petr Mladek
2019-09-24 17:52 ` [PATCH v2 00/21] Refine memblock API Adam Ford
2019-09-24 17:52   ` [OpenRISC] " Adam Ford
2019-09-24 17:52   ` [Xen-devel] " Adam Ford
2019-09-24 17:52   ` Adam Ford
2019-09-24 17:52   ` Adam Ford
2019-09-24 17:52   ` Adam Ford
2019-09-24 17:52   ` Adam Ford
2019-09-24 17:52   ` Adam Ford
2019-09-25  6:42   ` Mike Rapoport
2019-09-25  6:42     ` Mike Rapoport
2019-09-25 12:12   ` Fabio Estevam
2019-09-25 12:12     ` [OpenRISC] " Fabio Estevam
2019-09-25 12:12     ` [Xen-devel] " Fabio Estevam
2019-09-25 12:12     ` Fabio Estevam
2019-09-25 12:12     ` Fabio Estevam
2019-09-25 12:12     ` Fabio Estevam
2019-09-25 12:17     ` Adam Ford
2019-09-25 12:17       ` [OpenRISC] " Adam Ford
2019-09-25 12:17       ` [Xen-devel] " Adam Ford
2019-09-25 12:17       ` Adam Ford
2019-09-25 12:17       ` Adam Ford
2019-09-25 12:17       ` Adam Ford
2019-09-25 15:17       ` Fabio Estevam
2019-09-25 15:17         ` [OpenRISC] " Fabio Estevam
2019-09-25 15:17         ` [Xen-devel] " Fabio Estevam
2019-09-25 15:17         ` Fabio Estevam
2019-09-25 15:17         ` Fabio Estevam
2019-09-25 15:17         ` Fabio Estevam
2019-09-26 13:09         ` Adam Ford
2019-09-26 13:09           ` [OpenRISC] " Adam Ford
2019-09-26 13:09           ` [Xen-devel] " Adam Ford
2019-09-26 13:09           ` Adam Ford
2019-09-26 13:09           ` Adam Ford
2019-09-26 13:09           ` Adam Ford
2019-09-26 16:04           ` Mike Rapoport
2019-09-26 16:04             ` [OpenRISC] " Mike Rapoport
2019-09-26 16:04             ` [Xen-devel] " Mike Rapoport
2019-09-26 16:04             ` Mike Rapoport
2019-09-26 16:04             ` Mike Rapoport
2019-09-26 16:04             ` Mike Rapoport
2019-09-26 19:35             ` Adam Ford
2019-09-26 19:35               ` [OpenRISC] " Adam Ford
2019-09-26 19:35               ` [Xen-devel] " Adam Ford
2019-09-26 19:35               ` Adam Ford
2019-09-26 19:35               ` Adam Ford
2019-09-26 19:35               ` Adam Ford
2019-09-28  7:33               ` Mike Rapoport
2019-09-28  7:33                 ` [OpenRISC] " Mike Rapoport
2019-09-28  7:33                 ` [Xen-devel] " Mike Rapoport
2019-09-28  7:33                 ` Mike Rapoport
2019-09-28  7:33                 ` Mike Rapoport
2019-09-28  7:33                 ` Mike Rapoport
2019-09-29 13:33                 ` Adam Ford
2019-09-29 13:33                   ` [OpenRISC] " Adam Ford
2019-09-29 13:33                   ` [Xen-devel] " Adam Ford
2019-09-29 13:33                   ` Adam Ford
2019-09-29 13:33                   ` Adam Ford
2019-09-29 13:33                   ` Adam Ford
2019-10-02  0:14                   ` Adam Ford
2019-10-02  0:14                     ` [OpenRISC] " Adam Ford
2019-10-02  0:14                     ` [Xen-devel] " Adam Ford
2019-10-02  0:14                     ` Adam Ford
2019-10-02  0:14                     ` Adam Ford
2019-10-02  0:14                     ` Adam Ford
2019-10-02  7:36                     ` Mike Rapoport
2019-10-02  7:36                       ` [OpenRISC] " Mike Rapoport
2019-10-02  7:36                       ` [Xen-devel] " Mike Rapoport
2019-10-02  7:36                       ` Mike Rapoport
2019-10-02  7:36                       ` Mike Rapoport
2019-10-02  7:36                       ` Mike Rapoport
2019-10-02  7:36                       ` Mike Rapoport
2019-10-02 11:14                       ` Adam Ford
2019-10-02 11:14                         ` [OpenRISC] " Adam Ford
2019-10-02 11:14                         ` [Xen-devel] " Adam Ford
2019-10-02 11:14                         ` Adam Ford
2019-10-02 11:14                         ` Adam Ford
2019-10-02 11:14                         ` Adam Ford
2019-10-03  5:34                         ` Mike Rapoport
2019-10-03  5:34                           ` Mike Rapoport
2019-10-03  8:49                           ` Russell King - ARM Linux admin
2019-10-03  8:49                             ` Russell King - ARM Linux admin
2019-10-03 11:30                             ` Mike Rapoport
2019-10-03 11:30                               ` Mike Rapoport
2019-10-03 13:17                               ` Lucas Stach
2019-10-03 13:17                                 ` Lucas Stach
2019-10-03 13:17                                 ` Lucas Stach
2019-10-04  9:27                               ` Russell King - ARM Linux admin
2019-10-04  9:27                                 ` Russell King - ARM Linux admin
2019-10-04 13:21                                 ` Lucas Stach
2019-10-04 13:21                                   ` Lucas Stach
2019-10-04 13:21                                   ` Lucas Stach
2019-10-04 13:58                                   ` Adam Ford
2019-10-04 13:58                                     ` Adam Ford
2019-10-04 13:58                                     ` Adam Ford
2019-10-04 17:10                                   ` Mike Rapoport
2019-10-04 17:10                                     ` Mike Rapoport
2019-10-04 17:29                                 ` Mike Rapoport
2019-10-04 17:29                                   ` Mike Rapoport
2019-10-03 14:46                             ` Chris Healy
2019-10-03 14:46                               ` Chris Healy
2019-10-03 14:46                               ` Chris Healy
2019-10-04  9:12                               ` Russell King - ARM Linux admin
2019-10-04  9:12                                 ` Russell King - ARM Linux admin

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=1548057848-15136-3-git-send-email-rppt@linux.ibm.com \
    --to=rppt@linux.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=dalias@libc.org \
    --cc=davem@davemloft.net \
    --cc=dennis@kernel.org \
    --cc=geert@linux-m68k.org \
    --cc=green.hu@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=guoren@kernel.org \
    --cc=gxt@pku.edu.cn \
    --cc=hch@lst.de \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jcmvbkbc@gmail.com \
    --cc=linux-mm@kvack.org \
    --cc=mattst88@gmail.com \
    --cc=monstr@monstr.eu \
    --cc=mpe@ellerman.id.au \
    --cc=msalter@redhat.com \
    --cc=paul.burton@mips.com \
    --cc=pmladek@suse.com \
    --cc=richard@nod.at \
    /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.