* [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic
@ 2018-10-19 4:13 Michael Ellerman
2018-10-19 4:13 ` [PATCH 2/6] powerpc/mm/radix: Fix overuse of small pages in splitting logic Michael Ellerman
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-10-19 4:13 UTC (permalink / raw)
To: linuxppc-dev; +Cc: aneesh.kumar
When we have CONFIG_STRICT_KERNEL_RWX enabled, we try to split the
kernel linear (1:1) mapping so that the kernel text is in a separate
page to kernel data, so we can mark the former read-only.
We could achieve that just by always using 64K pages for the linear
mapping, but we try to be smarter. Instead we use huge pages when
possible, and only switch to smaller pages when necessary.
However we have an off-by-one bug in that logic, which causes us to
calculate the wrong boundary between text and data.
For example with the end of the kernel text at 16M we see:
radix-mmu: Mapped 0x0000000000000000-0x0000000001200000 with 64.0 KiB pages
radix-mmu: Mapped 0x0000000001200000-0x0000000040000000 with 2.00 MiB pages
radix-mmu: Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages
ie. we mapped from 0 to 18M with 64K pages, even though the boundary
between text and data is at 16M.
With the fix we see we're correctly hitting the 16M boundary:
radix-mmu: Mapped 0x0000000000000000-0x0000000001000000 with 64.0 KiB pages
radix-mmu: Mapped 0x0000000001000000-0x0000000040000000 with 2.00 MiB pages
radix-mmu: Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/mm/pgtable-radix.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index c879979faa73..d88d76231754 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -294,14 +294,14 @@ static int __meminit create_physical_mapping(unsigned long start,
}
if (split_text_mapping && (mapping_size == PUD_SIZE) &&
- (addr <= __pa_symbol(__init_begin)) &&
+ (addr < __pa_symbol(__init_begin)) &&
(addr + mapping_size) >= __pa_symbol(_stext)) {
max_mapping_size = PMD_SIZE;
goto retry;
}
if (split_text_mapping && (mapping_size == PMD_SIZE) &&
- (addr <= __pa_symbol(__init_begin)) &&
+ (addr < __pa_symbol(__init_begin)) &&
(addr + mapping_size) >= __pa_symbol(_stext)) {
mapping_size = PAGE_SIZE;
psize = mmu_virtual_psize;
--
2.17.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/6] powerpc/mm/radix: Fix overuse of small pages in splitting logic
2018-10-19 4:13 [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
@ 2018-10-19 4:13 ` Michael Ellerman
2018-10-19 4:13 ` [PATCH 3/6] powerpc/mm/radix: Fix small page at boundary when splitting Michael Ellerman
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-10-19 4:13 UTC (permalink / raw)
To: linuxppc-dev; +Cc: aneesh.kumar
When we have CONFIG_STRICT_KERNEL_RWX enabled, we want to split the
linear mapping at the text/data boundary so we can map the kernel text
read only.
But the current logic uses small pages for the entire text section,
regardless of whether a larger page size would fit. eg. with the
boundary at 16M we could use 2M pages, but instead we use 64K pages up
to the 16M boundary:
Mapped 0x0000000000000000-0x0000000001000000 with 64.0 KiB pages
Mapped 0x0000000001000000-0x0000000040000000 with 2.00 MiB pages
Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages
This is because the test is checking if addr is < __init_begin
and addr + mapping_size is >= _stext. But that is true for all pages
between _stext and __init_begin.
Instead what we want to check is if we are crossing the text/data
boundary, which is at __init_begin. With that fixed we see:
Mapped 0x0000000000000000-0x0000000000e00000 with 2.00 MiB pages
Mapped 0x0000000000e00000-0x0000000001000000 with 64.0 KiB pages
Mapped 0x0000000001000000-0x0000000040000000 with 2.00 MiB pages
Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages
ie. we're correctly using 2MB pages below __init_begin, but we still
drop down to 64K pages unnecessarily at the boundary.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/mm/pgtable-radix.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index d88d76231754..bb85c58b96c8 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -295,14 +295,14 @@ static int __meminit create_physical_mapping(unsigned long start,
if (split_text_mapping && (mapping_size == PUD_SIZE) &&
(addr < __pa_symbol(__init_begin)) &&
- (addr + mapping_size) >= __pa_symbol(_stext)) {
+ (addr + mapping_size) >= __pa_symbol(__init_begin)) {
max_mapping_size = PMD_SIZE;
goto retry;
}
if (split_text_mapping && (mapping_size == PMD_SIZE) &&
(addr < __pa_symbol(__init_begin)) &&
- (addr + mapping_size) >= __pa_symbol(_stext)) {
+ (addr + mapping_size) >= __pa_symbol(__init_begin)) {
mapping_size = PAGE_SIZE;
psize = mmu_virtual_psize;
}
--
2.17.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/6] powerpc/mm/radix: Fix small page at boundary when splitting
2018-10-19 4:13 [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
2018-10-19 4:13 ` [PATCH 2/6] powerpc/mm/radix: Fix overuse of small pages in splitting logic Michael Ellerman
@ 2018-10-19 4:13 ` Michael Ellerman
2018-10-19 4:13 ` [PATCH 4/6] powerpc/mm/radix: Remove the retry in the split mapping logic Michael Ellerman
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-10-19 4:13 UTC (permalink / raw)
To: linuxppc-dev; +Cc: aneesh.kumar
When we have CONFIG_STRICT_KERNEL_RWX enabled, we want to split the
linear mapping at the text/data boundary so we can map the kernel
text read only.
Currently we always use a small page at the text/data boundary, even
when that's not necessary:
Mapped 0x0000000000000000-0x0000000000e00000 with 2.00 MiB pages
Mapped 0x0000000000e00000-0x0000000001000000 with 64.0 KiB pages
Mapped 0x0000000001000000-0x0000000040000000 with 2.00 MiB pages
This is because the check that the mapping crosses the __init_begin
boundary is too strict, it also returns true when we map exactly up to
the boundary.
So fix it to check that the mapping would actually map past
__init_begin, and with that we see:
Mapped 0x0000000000000000-0x0000000040000000 with 2.00 MiB pages
Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/mm/pgtable-radix.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index bb85c58b96c8..7a44ec276290 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -295,14 +295,14 @@ static int __meminit create_physical_mapping(unsigned long start,
if (split_text_mapping && (mapping_size == PUD_SIZE) &&
(addr < __pa_symbol(__init_begin)) &&
- (addr + mapping_size) >= __pa_symbol(__init_begin)) {
+ (addr + mapping_size) > __pa_symbol(__init_begin)) {
max_mapping_size = PMD_SIZE;
goto retry;
}
if (split_text_mapping && (mapping_size == PMD_SIZE) &&
(addr < __pa_symbol(__init_begin)) &&
- (addr + mapping_size) >= __pa_symbol(__init_begin)) {
+ (addr + mapping_size) > __pa_symbol(__init_begin)) {
mapping_size = PAGE_SIZE;
psize = mmu_virtual_psize;
}
--
2.17.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/6] powerpc/mm/radix: Remove the retry in the split mapping logic
2018-10-19 4:13 [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
2018-10-19 4:13 ` [PATCH 2/6] powerpc/mm/radix: Fix overuse of small pages in splitting logic Michael Ellerman
2018-10-19 4:13 ` [PATCH 3/6] powerpc/mm/radix: Fix small page at boundary when splitting Michael Ellerman
@ 2018-10-19 4:13 ` Michael Ellerman
2018-10-19 4:13 ` [PATCH 5/6] powerpc/mm/radix: Simplify " Michael Ellerman
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-10-19 4:13 UTC (permalink / raw)
To: linuxppc-dev; +Cc: aneesh.kumar
When we have CONFIG_STRICT_KERNEL_RWX enabled, we want to split the
linear mapping at the text/data boundary so we can map the kernel
text read only.
The current logic uses a goto inside the for loop, which works, but is
hard to reason about.
When we hit the goto retry case we set max_mapping_size to PMD_SIZE
and go back to the start.
Setting max_mapping_size means we skip the PUD case and go to the PMD
case.
We know we will pass the alignment and gap checks because the only
reason we are there is we hit the goto retry, and that is guarded by
mapping_size == PUD_SIZE, which means addr is PUD aligned and gap is
greater or equal to PUD_SIZE.
So the only part of the check that can fail is the mmu_psize_defs
check for the 2M page size.
If we just duplicate that check we can avoid the goto, and we get the
same result.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/mm/pgtable-radix.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index 7a44ec276290..030543451229 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -261,7 +261,6 @@ static int __meminit create_physical_mapping(unsigned long start,
{
unsigned long vaddr, addr, mapping_size = 0;
pgprot_t prot;
- unsigned long max_mapping_size;
#ifdef CONFIG_STRICT_KERNEL_RWX
int split_text_mapping = 1;
#else
@@ -276,12 +275,9 @@ static int __meminit create_physical_mapping(unsigned long start,
gap = end - addr;
previous_size = mapping_size;
- max_mapping_size = PUD_SIZE;
-retry:
if (IS_ALIGNED(addr, PUD_SIZE) && gap >= PUD_SIZE &&
- mmu_psize_defs[MMU_PAGE_1G].shift &&
- PUD_SIZE <= max_mapping_size) {
+ mmu_psize_defs[MMU_PAGE_1G].shift) {
mapping_size = PUD_SIZE;
psize = MMU_PAGE_1G;
} else if (IS_ALIGNED(addr, PMD_SIZE) && gap >= PMD_SIZE &&
@@ -296,8 +292,10 @@ static int __meminit create_physical_mapping(unsigned long start,
if (split_text_mapping && (mapping_size == PUD_SIZE) &&
(addr < __pa_symbol(__init_begin)) &&
(addr + mapping_size) > __pa_symbol(__init_begin)) {
- max_mapping_size = PMD_SIZE;
- goto retry;
+ if (mmu_psize_defs[MMU_PAGE_2M].shift)
+ mapping_size = PMD_SIZE;
+ else
+ mapping_size = PAGE_SIZE;
}
if (split_text_mapping && (mapping_size == PMD_SIZE) &&
--
2.17.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/6] powerpc/mm/radix: Simplify split mapping logic
2018-10-19 4:13 [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
` (2 preceding siblings ...)
2018-10-19 4:13 ` [PATCH 4/6] powerpc/mm/radix: Remove the retry in the split mapping logic Michael Ellerman
@ 2018-10-19 4:13 ` Michael Ellerman
2018-10-19 4:13 ` [PATCH 6/6] powerpc/mm/radix: Display if mappings are exec or not Michael Ellerman
2018-10-22 9:39 ` [1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-10-19 4:13 UTC (permalink / raw)
To: linuxppc-dev; +Cc: aneesh.kumar
If we look closely at the logic in create_physical_mapping(), when
we're doing STRICT_KERNEL_RWX, we do the following steps:
- determine the gap from where we are to the end of the range
- choose an appropriate mapping_size based on the gap
- check if that mapping_size would overlap the __init_begin
boundary, and if not choose an appropriate mapping_size
We can simplify the logic by taking the __init_begin boundary into
account when we calculate the initial gap.
So add a next_boundary() function which tells us what the next
boundary is, either the __init_begin boundary or end. In future we can
add more boundaries.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/mm/pgtable-radix.c | 32 ++++++++++----------------------
1 file changed, 10 insertions(+), 22 deletions(-)
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index 030543451229..0e87733eed80 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -255,17 +255,21 @@ static inline void __meminit print_mapping(unsigned long start,
pr_info("Mapped 0x%016lx-0x%016lx with %s pages\n", start, end, buf);
}
+static unsigned long next_boundary(unsigned long addr, unsigned long end)
+{
+#ifdef CONFIG_STRICT_KERNEL_RWX
+ if (addr < __pa_symbol(__init_begin))
+ return __pa_symbol(__init_begin);
+#endif
+ return end;
+}
+
static int __meminit create_physical_mapping(unsigned long start,
unsigned long end,
int nid)
{
unsigned long vaddr, addr, mapping_size = 0;
pgprot_t prot;
-#ifdef CONFIG_STRICT_KERNEL_RWX
- int split_text_mapping = 1;
-#else
- int split_text_mapping = 0;
-#endif
int psize;
start = _ALIGN_UP(start, PAGE_SIZE);
@@ -273,7 +277,7 @@ static int __meminit create_physical_mapping(unsigned long start,
unsigned long gap, previous_size;
int rc;
- gap = end - addr;
+ gap = next_boundary(addr, end) - addr;
previous_size = mapping_size;
if (IS_ALIGNED(addr, PUD_SIZE) && gap >= PUD_SIZE &&
@@ -289,22 +293,6 @@ static int __meminit create_physical_mapping(unsigned long start,
psize = mmu_virtual_psize;
}
- if (split_text_mapping && (mapping_size == PUD_SIZE) &&
- (addr < __pa_symbol(__init_begin)) &&
- (addr + mapping_size) > __pa_symbol(__init_begin)) {
- if (mmu_psize_defs[MMU_PAGE_2M].shift)
- mapping_size = PMD_SIZE;
- else
- mapping_size = PAGE_SIZE;
- }
-
- if (split_text_mapping && (mapping_size == PMD_SIZE) &&
- (addr < __pa_symbol(__init_begin)) &&
- (addr + mapping_size) > __pa_symbol(__init_begin)) {
- mapping_size = PAGE_SIZE;
- psize = mmu_virtual_psize;
- }
-
if (mapping_size != previous_size) {
print_mapping(start, addr, previous_size);
start = addr;
--
2.17.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/6] powerpc/mm/radix: Display if mappings are exec or not
2018-10-19 4:13 [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
` (3 preceding siblings ...)
2018-10-19 4:13 ` [PATCH 5/6] powerpc/mm/radix: Simplify " Michael Ellerman
@ 2018-10-19 4:13 ` Michael Ellerman
2018-10-22 9:39 ` [1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-10-19 4:13 UTC (permalink / raw)
To: linuxppc-dev; +Cc: aneesh.kumar
At boot we print the ranges we've mapped for the linear mapping and
what page size we've used. Also track whether the range is mapped
executable or not and display that as well.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/mm/pgtable-radix.c | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/arch/powerpc/mm/pgtable-radix.c b/arch/powerpc/mm/pgtable-radix.c
index 0e87733eed80..931156069a81 100644
--- a/arch/powerpc/mm/pgtable-radix.c
+++ b/arch/powerpc/mm/pgtable-radix.c
@@ -241,9 +241,8 @@ void radix__mark_initmem_nx(void)
}
#endif /* CONFIG_STRICT_KERNEL_RWX */
-static inline void __meminit print_mapping(unsigned long start,
- unsigned long end,
- unsigned long size)
+static inline void __meminit
+print_mapping(unsigned long start, unsigned long end, unsigned long size, bool exec)
{
char buf[10];
@@ -252,7 +251,8 @@ static inline void __meminit print_mapping(unsigned long start,
string_get_size(size, 1, STRING_UNITS_2, buf, sizeof(buf));
- pr_info("Mapped 0x%016lx-0x%016lx with %s pages\n", start, end, buf);
+ pr_info("Mapped 0x%016lx-0x%016lx with %s pages%s\n", start, end, buf,
+ exec ? " (exec)" : "");
}
static unsigned long next_boundary(unsigned long addr, unsigned long end)
@@ -269,6 +269,7 @@ static int __meminit create_physical_mapping(unsigned long start,
int nid)
{
unsigned long vaddr, addr, mapping_size = 0;
+ bool prev_exec, exec = false;
pgprot_t prot;
int psize;
@@ -279,6 +280,7 @@ static int __meminit create_physical_mapping(unsigned long start,
gap = next_boundary(addr, end) - addr;
previous_size = mapping_size;
+ prev_exec = exec;
if (IS_ALIGNED(addr, PUD_SIZE) && gap >= PUD_SIZE &&
mmu_psize_defs[MMU_PAGE_1G].shift) {
@@ -293,18 +295,21 @@ static int __meminit create_physical_mapping(unsigned long start,
psize = mmu_virtual_psize;
}
- if (mapping_size != previous_size) {
- print_mapping(start, addr, previous_size);
- start = addr;
- }
-
vaddr = (unsigned long)__va(addr);
if (overlaps_kernel_text(vaddr, vaddr + mapping_size) ||
- overlaps_interrupt_vector_text(vaddr, vaddr + mapping_size))
+ overlaps_interrupt_vector_text(vaddr, vaddr + mapping_size)) {
prot = PAGE_KERNEL_X;
- else
+ exec = true;
+ } else {
prot = PAGE_KERNEL;
+ exec = false;
+ }
+
+ if (mapping_size != previous_size || exec != prev_exec) {
+ print_mapping(start, addr, previous_size, prev_exec);
+ start = addr;
+ }
rc = __map_kernel_page(vaddr, addr, prot, mapping_size, nid, start, end);
if (rc)
@@ -313,7 +318,7 @@ static int __meminit create_physical_mapping(unsigned long start,
update_page_count(psize, 1);
}
- print_mapping(start, addr, mapping_size);
+ print_mapping(start, addr, mapping_size, exec);
return 0;
}
--
2.17.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic
2018-10-19 4:13 [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
` (4 preceding siblings ...)
2018-10-19 4:13 ` [PATCH 6/6] powerpc/mm/radix: Display if mappings are exec or not Michael Ellerman
@ 2018-10-22 9:39 ` Michael Ellerman
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-10-22 9:39 UTC (permalink / raw)
To: Michael Ellerman, linuxppc-dev; +Cc: aneesh.kumar
On Fri, 2018-10-19 at 04:13:29 UTC, Michael Ellerman wrote:
> When we have CONFIG_STRICT_KERNEL_RWX enabled, we try to split the
> kernel linear (1:1) mapping so that the kernel text is in a separate
> page to kernel data, so we can mark the former read-only.
>
> We could achieve that just by always using 64K pages for the linear
> mapping, but we try to be smarter. Instead we use huge pages when
> possible, and only switch to smaller pages when necessary.
>
> However we have an off-by-one bug in that logic, which causes us to
> calculate the wrong boundary between text and data.
>
> For example with the end of the kernel text at 16M we see:
>
> radix-mmu: Mapped 0x0000000000000000-0x0000000001200000 with 64.0 KiB pages
> radix-mmu: Mapped 0x0000000001200000-0x0000000040000000 with 2.00 MiB pages
> radix-mmu: Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages
>
> ie. we mapped from 0 to 18M with 64K pages, even though the boundary
> between text and data is at 16M.
>
> With the fix we see we're correctly hitting the 16M boundary:
>
> radix-mmu: Mapped 0x0000000000000000-0x0000000001000000 with 64.0 KiB pages
> radix-mmu: Mapped 0x0000000001000000-0x0000000040000000 with 2.00 MiB pages
> radix-mmu: Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages
>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Series applied to powerpc next.
https://git.kernel.org/powerpc/c/5c6499b7041b43807dfaeda28aa87f
cheers
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-10-22 10:12 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-19 4:13 [PATCH 1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
2018-10-19 4:13 ` [PATCH 2/6] powerpc/mm/radix: Fix overuse of small pages in splitting logic Michael Ellerman
2018-10-19 4:13 ` [PATCH 3/6] powerpc/mm/radix: Fix small page at boundary when splitting Michael Ellerman
2018-10-19 4:13 ` [PATCH 4/6] powerpc/mm/radix: Remove the retry in the split mapping logic Michael Ellerman
2018-10-19 4:13 ` [PATCH 5/6] powerpc/mm/radix: Simplify " Michael Ellerman
2018-10-19 4:13 ` [PATCH 6/6] powerpc/mm/radix: Display if mappings are exec or not Michael Ellerman
2018-10-22 9:39 ` [1/6] powerpc/mm/radix: Fix off-by-one in split mapping logic Michael Ellerman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).