From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>, Baoquan He <bhe@redhat.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Borislav Petkov <bp@alien8.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Christoph Hellwig <hch@lst.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
Emil Renner Berthing <kernel@esmil.dk>,
Ingo Molnar <mingo@redhat.com>,
Hari Bathini <hbathini@linux.ibm.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Max Filippov <jcmvbkbc@gmail.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Michal Simek <monstr@monstr.eu>,
Mike Rapoport <rppt@linux.ibm.com>,
Mike Rapoport <rppt@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Mackerras <paulus@samba.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Peter Zijlstra <peterz@infradead.org>
Subject: [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 2 Aug 2020 19:35:47 +0300 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Emil Renner Berthing <kernel@esmil.dk>,
linux-sh@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mips@vger.kernel.org, Max Filippov <jcmvbkbc@gmail.com>,
Paul Mackerras <paulus@samba.org>,
sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org,
Will Deacon <will@kernel.org>, Christoph Hellwig <hch@lst.de>,
linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
linux-c6x-dev@linux-c6x.org,
Michael Ellerman <mpe@ellerman.id.au>,
x86@kernel.org, Russell King <linux@armlinux.org.uk>,
Mike Rapoport <rppt@linux.ibm.com>,
clang-built-linux@googlegroups.com,
Ingo Molnar <mingo@redhat.com>,
linux-arm-kernel@lists.infradead.org,
Catalin Marinas <catalin.marinas@arm.com>,
uclinux-h8-devel@lists.sourceforge.jp,
linux-xtensa@linux-xtensa.org, openrisc@lists.librecores.org,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Stafford Horne <shorne@gmail.com>,
Hari Bathini <hbathini@linux.ibm.com>,
Michal Simek <monstr@monstr.eu>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
iommu@lists.linux-foundation.org,
Palmer Dabbelt <palmer@dabbelt.com>,
linuxppc-dev@lists.ozlabs.org, Mike Rapoport <rppt@kernel.org>
Subject: [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 2 Aug 2020 19:35:47 +0300 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>, Baoquan He <bhe@redhat.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Borislav Petkov <bp@alien8.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Christoph Hellwig <hch@lst.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
Emil Renner Berthing <kernel@esmil.dk>,
Ingo Molnar <mingo@redhat.com>,
Hari Bathini <hbathini@linux.ibm.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Max Filippov <jcmvbkbc@gmail.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Michal Simek <monstr@monstr.eu>,
Mike Rapoport <rppt@linux.ibm.com>,
Mike Rapoport <rppt@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Mackerras <paulus@samba.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Peter Zijlstra <peterz@infradead.org>,
Russell King <linux@armlinux.org.uk>,
Stafford Horne <shorne@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Will Deacon <will@kernel.org>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
clang-built-linux@googlegroups.com,
iommu@lists.linux-foundation.org, linux-arch@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-c6x-dev@linux-c6x.org, linux-kernel@vger.kernel.org,
linux-mips@vger.kernel.org, linux-mm@kvack.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
linux-sh@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
Subject: [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 2 Aug 2020 19:35:47 +0300 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Emil Renner Berthing <kernel@esmil.dk>,
linux-sh@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mips@vger.kernel.org, Max Filippov <jcmvbkbc@gmail.com>,
Paul Mackerras <paulus@samba.org>,
sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org,
Will Deacon <will@kernel.org>, Christoph Hellwig <hch@lst.de>,
Marek Szyprowski <m.szyprowski@samsung.com>,
linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
linux-c6x-dev@linux-c6x.org, Baoquan He <bhe@redhat.com>,
Michael Ellerman <mpe@ellerman.id.au>,
x86@kernel.org, Russell King <linux@armlinux.org.uk>,
Mike Rapoport <rppt@linux.ibm.com>,
clang-built-linux@googlegroups.com,
Ingo Molnar <mingo@redhat.com>,
linux-arm-kernel@lists.infradead.org,
Catalin Marinas <catalin.marinas@arm.com>,
uclinux-h8-devel@lists.sourceforge.jp,
linux-xtensa@linux-xtensa.org, openrisc@lists.librecores.org,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Stafford Horne <shorne@gmail.com>,
Hari Bathini <hbathini@linux.ibm.com>,
Michal Simek <monstr@monstr.eu>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
iommu@lists.linux-foundation.org,
Palmer Dabbelt <palmer@dabbelt.com>,
linuxppc-dev@lists.ozlabs.org, Mike Rapoport <rppt@kernel.org>
Subject: [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 2 Aug 2020 19:35:47 +0300 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>, Baoquan He <bhe@redhat.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Borislav Petkov <bp@alien8.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Christoph Hellwig <hch@lst.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
Emil Renner Berthing <kernel@esmil.dk>,
Ingo Molnar <mingo@redhat.com>,
Hari Bathini <hbathini@linux.ibm.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Max Filippov <jcmvbkbc@gmail.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Michal Simek <monstr@monstr.eu>,
Mike Rapoport <rppt@linux.ibm.com>,
Mike Rapoport <rppt@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Paul Mackerras <paulus@samba.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Peter Zijlstra <peterz@infradead.org>
Subject: [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 02 Aug 2020 16:35:47 +0000 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start = end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start = end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: openrisc@lists.librecores.org
Subject: [OpenRISC] [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 2 Aug 2020 19:35:47 +0300 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Emil Renner Berthing <kernel@esmil.dk>,
linux-sh@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mips@vger.kernel.org, Max Filippov <jcmvbkbc@gmail.com>,
Paul Mackerras <paulus@samba.org>,
sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org,
Will Deacon <will@kernel.org>, Christoph Hellwig <hch@lst.de>,
Marek Szyprowski <m.szyprowski@samsung.com>,
linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
linux-c6x-dev@linux-c6x.org, Baoquan He <bhe@redhat.com>,
x86@kernel.org, Russell King <linux@armlinux.org.uk>,
Mike Rapoport <rppt@linux.ibm.com>,
clang-built-linux@googlegroups.com,
Ingo Molnar <mingo@redhat.com>,
linux-arm-kernel@lists.infradead.org,
Catalin Marinas <catalin.marinas@arm.com>,
uclinux-h8-devel@lists.sourceforge.jp,
linux-xtensa@linux-xtensa.org, openrisc@lists.librecores.org,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Stafford Horne <shorne@gmail.com>,
Hari Bathini <hbathini@linux.ibm.com>,
Michal Simek <monstr@monstr.eu>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
iommu@lists.linux-foundation.org,
Palmer Dabbelt <palmer@dabbelt.com>,
linuxppc-dev@lists.ozlabs.org, Mike Rapoport <rppt@kernel.org>
Subject: [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 2 Aug 2020 19:35:47 +0300 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Emil Renner Berthing <kernel@esmil.dk>,
linux-sh@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
linux-mips@vger.kernel.org, Max Filippov <jcmvbkbc@gmail.com>,
Paul Mackerras <paulus@samba.org>,
sparclinux@vger.kernel.org, linux-riscv@lists.infradead.org,
Will Deacon <will@kernel.org>, Christoph Hellwig <hch@lst.de>,
Marek Szyprowski <m.szyprowski@samsung.com>,
linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
linux-c6x-dev@linux-c6x.org, Baoquan He <bhe@redhat.com>,
Michael Ellerman <mpe@ellerman.id.au>,
x86@kernel.org, Russell King <linux@armlinux.org.uk>,
Mike Rapoport <rppt@linux.ibm.com>,
clang-built-linux@googlegroups.com,
Ingo Molnar <mingo@redhat.com>,
linux-arm-kernel@lists.infradead.org,
Catalin Marinas <catalin.marinas@arm.com>,
uclinux-h8-devel@lists.sourceforge.jp,
linux-xtensa@linux-xtensa.org, openrisc@lists.librecores.org,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Paul Walmsley <paul.walmsley@sifive.com>,
Stafford Horne <shorne@gmail.com>,
Hari Bathini <hbathini@linux.ibm.com>,
Michal Simek <monstr@monstr.eu>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
iommu@lists.linux-foundation.org,
Palmer Dabbelt <palmer@dabbelt.com>,
linuxppc-dev@lists.ozlabs.org, Mike Rapoport <rppt@kernel.org>
Subject: [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages
Date: Sun, 2 Aug 2020 19:35:47 +0300 [thread overview]
Message-ID: <20200802163601.8189-4-rppt@kernel.org> (raw)
In-Reply-To: <20200802163601.8189-1-rppt@kernel.org>
From: Mike Rapoport <rppt@linux.ibm.com>
The function free_highpages() in both arm and xtensa essentially open-code
for_each_free_mem_range() loop to detect high memory pages that were not
reserved and that should be initialized and passed to the buddy allocator.
Replace open-coded implementation of for_each_free_mem_range() with usage
of memblock API to simplify the code.
Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
Tested-by: Max Filippov <jcmvbkbc@gmail.com> # xtensa
---
arch/arm/mm/init.c | 48 +++++++------------------------------
arch/xtensa/mm/init.c | 55 ++++++++-----------------------------------
2 files changed, 18 insertions(+), 85 deletions(-)
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 01e18e43b174..626af348eb8f 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -352,61 +352,29 @@ static void __init free_unused_memmap(void)
#endif
}
-#ifdef CONFIG_HIGHMEM
-static inline void free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-#endif
-
static void __init free_highpages(void)
{
#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
#endif
}
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index a05b306cf371..ad9d59d93f39 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -79,67 +79,32 @@ void __init zones_init(void)
free_area_init(max_zone_pfn);
}
-#ifdef CONFIG_HIGHMEM
-static void __init free_area_high(unsigned long pfn, unsigned long end)
-{
- for (; pfn < end; pfn++)
- free_highmem_page(pfn_to_page(pfn));
-}
-
static void __init free_highpages(void)
{
+#ifdef CONFIG_HIGHMEM
unsigned long max_low = max_low_pfn;
- struct memblock_region *mem, *res;
+ phys_addr_t range_start, range_end;
+ u64 i;
- reset_all_zones_managed_pages();
/* set highmem page free */
- for_each_memblock(memory, mem) {
- unsigned long start = memblock_region_memory_base_pfn(mem);
- unsigned long end = memblock_region_memory_end_pfn(mem);
+ for_each_free_mem_range(i, NUMA_NO_NODE, MEMBLOCK_NONE,
+ &range_start, &range_end, NULL) {
+ unsigned long start = PHYS_PFN(range_start);
+ unsigned long end = PHYS_PFN(range_end);
/* Ignore complete lowmem entries */
if (end <= max_low)
continue;
- if (memblock_is_nomap(mem))
- continue;
-
/* Truncate partial highmem entries */
if (start < max_low)
start = max_low;
- /* Find and exclude any reserved regions */
- for_each_memblock(reserved, res) {
- unsigned long res_start, res_end;
-
- res_start = memblock_region_reserved_base_pfn(res);
- res_end = memblock_region_reserved_end_pfn(res);
-
- if (res_end < start)
- continue;
- if (res_start < start)
- res_start = start;
- if (res_start > end)
- res_start = end;
- if (res_end > end)
- res_end = end;
- if (res_start != start)
- free_area_high(start, res_start);
- start = res_end;
- if (start == end)
- break;
- }
-
- /* And now free anything which remains */
- if (start < end)
- free_area_high(start, end);
+ for (; start < end; start++)
+ free_highmem_page(pfn_to_page(start));
}
-}
-#else
-static void __init free_highpages(void)
-{
-}
#endif
+}
/*
* Initialize memory pages.
--
2.26.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-08-02 16:36 UTC|newest]
Thread overview: 274+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-02 16:35 [PATCH v2 00/17] memblock: seasonal cleaning^w cleanup Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 01/17] KVM: PPC: Book3S HV: simplify kvm_cma_reserve() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-04 13:53 ` Daniel Axtens
2020-08-04 13:53 ` Daniel Axtens
2020-08-04 13:53 ` Daniel Axtens
2020-08-04 13:53 ` [OpenRISC] " Daniel Axtens
2020-08-04 13:53 ` Daniel Axtens
2020-08-04 13:53 ` Daniel Axtens
2020-08-04 13:53 ` Daniel Axtens
2020-08-04 13:53 ` Daniel Axtens
2020-08-04 13:53 ` Daniel Axtens
2020-08-02 16:35 ` [PATCH v2 02/17] dma-contiguous: simplify cma_early_percent_memory() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-05 3:50 ` Baoquan He
2020-08-05 3:50 ` Baoquan He
2020-08-05 3:50 ` Baoquan He
2020-08-05 3:50 ` [OpenRISC] " Baoquan He
2020-08-05 3:50 ` Baoquan He
2020-08-05 3:50 ` Baoquan He
2020-08-05 3:50 ` Baoquan He
2020-08-05 3:50 ` Baoquan He
2020-08-02 16:35 ` Mike Rapoport [this message]
2020-08-02 16:35 ` [PATCH v2 03/17] arm, xtensa: simplify initialization of high memory pages Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 04/17] arm64: numa: simplify dummy_numa_init() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 05/17] h8300, nds32, openrisc: simplify detection of memory extents Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 06/17] riscv: drop unneeded node initialization Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 07/17] mircoblaze: drop unneeded NUMA and sparsemem initializations Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 08/17] memblock: make for_each_memblock_type() iterator private Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 09/17] memblock: make memblock_debug and related functionality private Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 10/17] memblock: reduce number of parameters in for_each_mem_range() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 11/17] arch, mm: replace for_each_memblock() with for_each_mem_pfn_range() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-05 3:57 ` Baoquan He
2020-08-05 3:57 ` Baoquan He
2020-08-05 3:57 ` Baoquan He
2020-08-05 3:57 ` [OpenRISC] " Baoquan He
2020-08-05 3:57 ` Baoquan He
2020-08-05 3:57 ` Baoquan He
2020-08-05 3:57 ` Baoquan He
2020-08-05 3:57 ` Baoquan He
2020-08-02 16:35 ` [PATCH v2 12/17] arch, drivers: replace for_each_membock() with for_each_mem_range() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-03 17:19 ` kernel test robot
2020-08-05 11:00 ` Thomas Bogendoerfer
2020-08-05 11:00 ` Thomas Bogendoerfer
2020-08-05 11:00 ` Thomas Bogendoerfer
2020-08-05 11:00 ` [OpenRISC] " Thomas Bogendoerfer
2020-08-05 11:00 ` Thomas Bogendoerfer
2020-08-05 11:00 ` Thomas Bogendoerfer
2020-08-05 11:00 ` Thomas Bogendoerfer
2020-08-05 11:00 ` Thomas Bogendoerfer
2020-08-02 16:35 ` [PATCH v2 13/17] x86/setup: simplify initrd relocation and reservation Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 18:01 ` Ingo Molnar
2020-08-02 18:01 ` Ingo Molnar
2020-08-02 18:01 ` Ingo Molnar
2020-08-02 18:01 ` [OpenRISC] " Ingo Molnar
2020-08-02 18:01 ` Ingo Molnar
2020-08-02 18:01 ` Ingo Molnar
2020-08-02 18:01 ` Ingo Molnar
2020-08-02 18:01 ` Ingo Molnar
2020-08-05 4:20 ` Baoquan He
2020-08-05 4:20 ` Baoquan He
2020-08-05 4:20 ` Baoquan He
2020-08-05 4:20 ` [OpenRISC] " Baoquan He
2020-08-05 4:20 ` Baoquan He
2020-08-05 4:20 ` Baoquan He
2020-08-05 4:20 ` Baoquan He
2020-08-05 4:20 ` Baoquan He
2020-08-05 5:59 ` Mike Rapoport
2020-08-05 5:59 ` Mike Rapoport
2020-08-05 5:59 ` Mike Rapoport
2020-08-05 5:59 ` [OpenRISC] " Mike Rapoport
2020-08-05 5:59 ` Mike Rapoport
2020-08-05 5:59 ` Mike Rapoport
2020-08-05 5:59 ` Mike Rapoport
2020-08-05 5:59 ` Mike Rapoport
2020-08-02 16:35 ` [PATCH v2 14/17] x86/setup: simplify reserve_crashkernel() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 18:02 ` Ingo Molnar
2020-08-02 18:02 ` Ingo Molnar
2020-08-02 18:02 ` Ingo Molnar
2020-08-02 18:02 ` [OpenRISC] " Ingo Molnar
2020-08-02 18:02 ` Ingo Molnar
2020-08-02 18:02 ` Ingo Molnar
2020-08-02 18:02 ` Ingo Molnar
2020-08-02 18:02 ` Ingo Molnar
2020-08-05 6:00 ` Baoquan He
2020-08-05 6:00 ` Baoquan He
2020-08-05 6:00 ` Baoquan He
2020-08-05 6:00 ` [OpenRISC] " Baoquan He
2020-08-05 6:00 ` Baoquan He
2020-08-05 6:00 ` Baoquan He
2020-08-05 6:00 ` Baoquan He
2020-08-05 6:00 ` Baoquan He
2020-08-02 16:35 ` [PATCH v2 15/17] memblock: remove unused memblock_mem_size() Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-02 16:35 ` Mike Rapoport
2020-08-05 8:29 ` Baoquan He
2020-08-05 8:29 ` Baoquan He
2020-08-05 8:29 ` Baoquan He
2020-08-05 8:29 ` [OpenRISC] " Baoquan He
2020-08-05 8:29 ` Baoquan He
2020-08-05 8:29 ` Baoquan He
2020-08-05 8:29 ` Baoquan He
2020-08-05 8:29 ` Baoquan He
[not found] ` <20200802163601.8189-1-rppt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2020-08-02 16:36 ` [PATCH v2 16/17] memblock: implement for_each_reserved_mem_region() using __next_mem_region() Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-05 9:11 ` Baoquan He
2020-08-05 9:11 ` Baoquan He
2020-08-05 9:11 ` Baoquan He
2020-08-05 9:11 ` [OpenRISC] " Baoquan He
2020-08-05 9:11 ` Baoquan He
2020-08-05 9:11 ` Baoquan He
2020-08-05 9:11 ` Baoquan He
2020-08-05 9:11 ` Baoquan He
2020-08-05 17:11 ` Miguel Ojeda
2020-08-05 17:11 ` Miguel Ojeda
2020-08-05 17:11 ` Miguel Ojeda
2020-08-05 17:11 ` [OpenRISC] " Miguel Ojeda
2020-08-05 17:11 ` Miguel Ojeda
2020-08-05 17:11 ` Miguel Ojeda
2020-08-05 17:11 ` Miguel Ojeda
2020-08-05 17:11 ` Miguel Ojeda
2020-08-02 16:36 ` [PATCH v2 17/17] memblock: use separate iterators for memory and reserved regions Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` [OpenRISC] " Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 16:36 ` Mike Rapoport
2020-08-02 18:03 ` Ingo Molnar
2020-08-02 18:03 ` Ingo Molnar
2020-08-02 18:03 ` Ingo Molnar
2020-08-02 18:03 ` [OpenRISC] " Ingo Molnar
2020-08-02 18:03 ` Ingo Molnar
2020-08-02 18:03 ` Ingo Molnar
2020-08-02 18:03 ` Ingo Molnar
2020-08-02 18:03 ` Ingo Molnar
[not found] ` <20200802163601.8189-18-rppt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2020-08-05 9:29 ` Baoquan He
2020-08-05 9:29 ` Baoquan He
2020-08-05 9:29 ` Baoquan He
2020-08-05 9:29 ` [OpenRISC] " Baoquan He
2020-08-05 9:29 ` Baoquan He
2020-08-05 9:29 ` Baoquan He
2020-08-05 9:29 ` Baoquan He
2020-08-05 9:29 ` Baoquan He
2020-08-05 10:58 ` Thomas Bogendoerfer
2020-08-05 10:58 ` Thomas Bogendoerfer
2020-08-05 10:58 ` Thomas Bogendoerfer
2020-08-05 10:58 ` [OpenRISC] " Thomas Bogendoerfer
2020-08-05 10:58 ` Thomas Bogendoerfer
2020-08-05 10:58 ` Thomas Bogendoerfer
2020-08-05 10:58 ` Thomas Bogendoerfer
2020-08-05 10:58 ` Thomas Bogendoerfer
2020-08-05 17:10 ` Miguel Ojeda
2020-08-05 17:10 ` Miguel Ojeda
2020-08-05 17:10 ` Miguel Ojeda
2020-08-05 17:10 ` [OpenRISC] " Miguel Ojeda
2020-08-05 17:10 ` Miguel Ojeda
2020-08-05 17:10 ` Miguel Ojeda
2020-08-05 17:10 ` Miguel Ojeda
2020-08-05 17:10 ` Miguel Ojeda
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=20200802163601.8189-4-rppt@kernel.org \
--to=rppt@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=bhe@redhat.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=hbathini@linux.ibm.com \
--cc=hch@lst.de \
--cc=jcmvbkbc@gmail.com \
--cc=kernel@esmil.dk \
--cc=luto@kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mingo@redhat.com \
--cc=monstr@monstr.eu \
--cc=mpe@ellerman.id.au \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=rppt@linux.ibm.com \
/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.