* [PATCH 0/6] Miscellaneous nommu fixes
@ 2012-03-06 16:54 Will Deacon
2012-03-06 16:54 ` [PATCH 1/6] ARM: ptrace: fix ptrace_read_user for !CONFIG_MMU platforms Will Deacon
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Will Deacon @ 2012-03-06 16:54 UTC (permalink / raw)
To: linux-arm-kernel
Hello,
This set of patches is a series of fixes for kernels built without
CONFIG_MMU selected. It seems that this isn't a particularly popular
choice amongst users of mainline kernels, but I was feeling brave and
gave it a go.
The first patch is already in the patch system as 7337/1 but is unlikely
to be merged unless it can be shown to work correctly. I tried the latest
Codesourcery / Mentor uclinux GDB but that doesn't appear to issue the
relevant ptrace requests:
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-February/086219.html
If anybody has a working uclinux environment, it would *make my day* if
they could take GDB for a spin.
The second patch has been picked up by Andrew Morton from the kexec list.
The remaining patches are largely straightforward with the exception of
the CPU suspend changes. I actually managed to test this with a rather
weird and wonderful configuration, although this was using software
models which tend to hide some of the issues you may experience with
real hardware.
All feedback welcome.
Will
Jonathan Austin (1):
ARM: nommu: Use VECTORS_BASE for vector copying with !MMU
Will Deacon (5):
ARM: ptrace: fix ptrace_read_user for !CONFIG_MMU platforms
kexec: crash: don't save swapper_pg_dir for !CONFIG_MMU
configurations
ARM: nommu: fix typo in mm/Kconfig
ARM: suspend: fix CPU suspend code for !CONFIG_MMU configurations
ARM: mm: truncate memory banks to fit in 4GB space for classic MMU
arch/arm/kernel/ptrace.c | 4 ++-
arch/arm/kernel/setup.c | 11 ++++++++-
arch/arm/kernel/suspend.c | 52 ++++++++++++++++++++++++++-------------------
arch/arm/kernel/traps.c | 2 +-
arch/arm/mm/Kconfig | 2 +-
arch/arm/mm/proc-v6.S | 6 ++++-
arch/arm/mm/proc-v7.S | 14 +++++++----
kernel/kexec.c | 2 +
8 files changed, 61 insertions(+), 32 deletions(-)
--
1.7.4.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/6] ARM: ptrace: fix ptrace_read_user for !CONFIG_MMU platforms
2012-03-06 16:54 [PATCH 0/6] Miscellaneous nommu fixes Will Deacon
@ 2012-03-06 16:54 ` Will Deacon
2012-03-06 16:54 ` [PATCH 2/6] kexec: crash: don't save swapper_pg_dir for !CONFIG_MMU configurations Will Deacon
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Will Deacon @ 2012-03-06 16:54 UTC (permalink / raw)
To: linux-arm-kernel
Commit 68b7f715 ("nommu: ptrace support") added definitions for
PT_TEXT_ADDR and friends, as well as adding ptrace support for reading
from these magic offsets.
Unfortunately, this has probably never worked, since ptrace_read_user
predicates reading on off < sizeof(struct user), returning -EIO
otherwise.
This patch moves the offset size check until after we have tried to
match it against either a magic value or an offset into pt_regs.
Cc: Paul Brook <paul@codesourcery.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/kernel/ptrace.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index ede6443..4fe2d598 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -257,7 +257,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
{
unsigned long tmp;
- if (off & 3 || off >= sizeof(struct user))
+ if (off & 3)
return -EIO;
tmp = 0;
@@ -269,6 +269,8 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
tmp = tsk->mm->end_code;
else if (off < sizeof(struct pt_regs))
tmp = get_user_reg(tsk, off >> 2);
+ else if (off >= sizeof(struct user))
+ return -EIO;
return put_user(tmp, ret);
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/6] kexec: crash: don't save swapper_pg_dir for !CONFIG_MMU configurations
2012-03-06 16:54 [PATCH 0/6] Miscellaneous nommu fixes Will Deacon
2012-03-06 16:54 ` [PATCH 1/6] ARM: ptrace: fix ptrace_read_user for !CONFIG_MMU platforms Will Deacon
@ 2012-03-06 16:54 ` Will Deacon
2012-03-06 16:54 ` [PATCH 3/6] ARM: nommu: fix typo in mm/Kconfig Will Deacon
` (3 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Will Deacon @ 2012-03-06 16:54 UTC (permalink / raw)
To: linux-arm-kernel
nommu platforms don't have very interesting swapper_pg_dir pointers and
usually just #define them to NULL, meaning that we can't include them in
the vmcoreinfo on the kexec crash path.
This patch only saves the swapper_pg_dir if we have an MMU.
Reviewed-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
kernel/kexec.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 7b08867..cb5d13c 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1462,7 +1462,9 @@ static int __init crash_save_vmcoreinfo_init(void)
VMCOREINFO_SYMBOL(init_uts_ns);
VMCOREINFO_SYMBOL(node_online_map);
+#ifdef CONFIG_MMU
VMCOREINFO_SYMBOL(swapper_pg_dir);
+#endif
VMCOREINFO_SYMBOL(_stext);
VMCOREINFO_SYMBOL(vmlist);
--
1.7.4.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/6] ARM: nommu: fix typo in mm/Kconfig
2012-03-06 16:54 [PATCH 0/6] Miscellaneous nommu fixes Will Deacon
2012-03-06 16:54 ` [PATCH 1/6] ARM: ptrace: fix ptrace_read_user for !CONFIG_MMU platforms Will Deacon
2012-03-06 16:54 ` [PATCH 2/6] kexec: crash: don't save swapper_pg_dir for !CONFIG_MMU configurations Will Deacon
@ 2012-03-06 16:54 ` Will Deacon
2012-03-06 16:54 ` [PATCH 4/6] ARM: suspend: fix CPU suspend code for !CONFIG_MMU configurations Will Deacon
` (2 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Will Deacon @ 2012-03-06 16:54 UTC (permalink / raw)
To: linux-arm-kernel
The description for the CPU_HIGH_VECTOR Kconfig option for nommu builds
doesn't make any sense.
This patch fixes up the trivial grammatical error.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/mm/Kconfig | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
index 7edef91..7c8a7d8 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -723,7 +723,7 @@ config CPU_HIGH_VECTOR
bool "Select the High exception vector"
help
Say Y here to select high exception vector(0xFFFF0000~).
- The exception vector can be vary depending on the platform
+ The exception vector can vary depending on the platform
design in nommu mode. If your platform needs to select
high exception vector, say Y.
Otherwise or if you are unsure, say N, and the low exception
--
1.7.4.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/6] ARM: suspend: fix CPU suspend code for !CONFIG_MMU configurations
2012-03-06 16:54 [PATCH 0/6] Miscellaneous nommu fixes Will Deacon
` (2 preceding siblings ...)
2012-03-06 16:54 ` [PATCH 3/6] ARM: nommu: fix typo in mm/Kconfig Will Deacon
@ 2012-03-06 16:54 ` Will Deacon
2012-03-06 16:54 ` [PATCH 5/6] ARM: nommu: Use VECTORS_BASE for vector copying with !MMU Will Deacon
2012-03-06 16:54 ` [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU Will Deacon
5 siblings, 0 replies; 11+ messages in thread
From: Will Deacon @ 2012-03-06 16:54 UTC (permalink / raw)
To: linux-arm-kernel
The ARM CPU suspend code can be selected even for a !CONFIG_MMU
configuration. The resulting kernel will not compile and, even if it did,
would access undefined co-processor registers when executing.
This patch fixes the v6 and v7 CPU suspend code for the nommu case.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/kernel/suspend.c | 52 ++++++++++++++++++++++++++-------------------
arch/arm/mm/proc-v6.S | 6 ++++-
arch/arm/mm/proc-v7.S | 14 +++++++----
3 files changed, 44 insertions(+), 28 deletions(-)
diff --git a/arch/arm/kernel/suspend.c b/arch/arm/kernel/suspend.c
index 1794cc3..073601e 100644
--- a/arch/arm/kernel/suspend.c
+++ b/arch/arm/kernel/suspend.c
@@ -10,28 +10,7 @@
extern int __cpu_suspend(unsigned long, int (*)(unsigned long));
extern void cpu_resume_mmu(void);
-/*
- * This is called by __cpu_suspend() to save the state, and do whatever
- * flushing is required to ensure that when the CPU goes to sleep we have
- * the necessary data available when the caches are not searched.
- */
-void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
-{
- *save_ptr = virt_to_phys(ptr);
-
- /* This must correspond to the LDM in cpu_resume() assembly */
- *ptr++ = virt_to_phys(idmap_pgd);
- *ptr++ = sp;
- *ptr++ = virt_to_phys(cpu_do_resume);
-
- cpu_do_suspend(ptr);
-
- flush_cache_all();
- outer_clean_range(*save_ptr, *save_ptr + ptrsz);
- outer_clean_range(virt_to_phys(save_ptr),
- virt_to_phys(save_ptr) + sizeof(*save_ptr));
-}
-
+#ifdef CONFIG_MMU
/*
* Hide the first two arguments to __cpu_suspend - these are an implementation
* detail which platform code shouldn't have to know about.
@@ -58,3 +37,32 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
return ret;
}
+#else
+int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))
+{
+ return __cpu_suspend(arg, fn);
+}
+#define idmap_pgd NULL
+#endif
+
+/*
+ * This is called by __cpu_suspend() to save the state, and do whatever
+ * flushing is required to ensure that when the CPU goes to sleep we have
+ * the necessary data available when the caches are not searched.
+ */
+void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
+{
+ *save_ptr = virt_to_phys(ptr);
+
+ /* This must correspond to the LDM in cpu_resume() assembly */
+ *ptr++ = virt_to_phys(idmap_pgd);
+ *ptr++ = sp;
+ *ptr++ = virt_to_phys(cpu_do_resume);
+
+ cpu_do_suspend(ptr);
+
+ flush_cache_all();
+ outer_clean_range(*save_ptr, *save_ptr + ptrsz);
+ outer_clean_range(virt_to_phys(save_ptr),
+ virt_to_phys(save_ptr) + sizeof(*save_ptr));
+}
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S
index 5900cd5..2f702fd 100644
--- a/arch/arm/mm/proc-v6.S
+++ b/arch/arm/mm/proc-v6.S
@@ -136,8 +136,10 @@ ENTRY(cpu_v6_set_pte_ext)
ENTRY(cpu_v6_do_suspend)
stmfd sp!, {r4 - r9, lr}
mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID
+#ifdef CONFIG_MMU
mrc p15, 0, r5, c3, c0, 0 @ Domain ID
mrc p15, 0, r6, c2, c0, 1 @ Translation table base 1
+#endif
mrc p15, 0, r7, c1, c0, 1 @ auxiliary control register
mrc p15, 0, r8, c1, c0, 2 @ co-processor access control
mrc p15, 0, r9, c1, c0, 0 @ control register
@@ -154,14 +156,16 @@ ENTRY(cpu_v6_do_resume)
mcr p15, 0, ip, c13, c0, 1 @ set reserved context ID
ldmia r0, {r4 - r9}
mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID
+#ifdef CONFIG_MMU
mcr p15, 0, r5, c3, c0, 0 @ Domain ID
ALT_SMP(orr r1, r1, #TTB_FLAGS_SMP)
ALT_UP(orr r1, r1, #TTB_FLAGS_UP)
mcr p15, 0, r1, c2, c0, 0 @ Translation table base 0
mcr p15, 0, r6, c2, c0, 1 @ Translation table base 1
+ mcr p15, 0, ip, c2, c0, 2 @ TTB control register
+#endif
mcr p15, 0, r7, c1, c0, 1 @ auxiliary control register
mcr p15, 0, r8, c1, c0, 2 @ co-processor access control
- mcr p15, 0, ip, c2, c0, 2 @ TTB control register
mcr p15, 0, ip, c7, c5, 4 @ ISB
mov r0, r9 @ control register
b cpu_resume_mmu
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 0404ccb..5903ceb 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -98,9 +98,11 @@ ENTRY(cpu_v7_do_suspend)
mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID
mrc p15, 0, r5, c13, c0, 3 @ User r/o thread ID
stmia r0!, {r4 - r5}
+#ifdef CONFIG_MMU
mrc p15, 0, r6, c3, c0, 0 @ Domain ID
mrc p15, 0, r7, c2, c0, 1 @ TTB 1
mrc p15, 0, r11, c2, c0, 2 @ TTB control register
+#endif
mrc p15, 0, r8, c1, c0, 0 @ Control register
mrc p15, 0, r9, c1, c0, 1 @ Auxiliary control register
mrc p15, 0, r10, c1, c0, 2 @ Co-processor access control
@@ -110,13 +112,14 @@ ENDPROC(cpu_v7_do_suspend)
ENTRY(cpu_v7_do_resume)
mov ip, #0
- mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
mcr p15, 0, ip, c13, c0, 1 @ set reserved context ID
ldmia r0!, {r4 - r5}
mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID
mcr p15, 0, r5, c13, c0, 3 @ User r/o thread ID
ldmia r0, {r6 - r11}
+#ifdef CONFIG_MMU
+ mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
mcr p15, 0, r6, c3, c0, 0 @ Domain ID
#ifndef CONFIG_ARM_LPAE
ALT_SMP(orr r1, r1, #TTB_FLAGS_SMP)
@@ -125,14 +128,15 @@ ENTRY(cpu_v7_do_resume)
mcr p15, 0, r1, c2, c0, 0 @ TTB 0
mcr p15, 0, r7, c2, c0, 1 @ TTB 1
mcr p15, 0, r11, c2, c0, 2 @ TTB control register
- mrc p15, 0, r4, c1, c0, 1 @ Read Auxiliary control register
- teq r4, r9 @ Is it already set?
- mcrne p15, 0, r9, c1, c0, 1 @ No, so write it
- mcr p15, 0, r10, c1, c0, 2 @ Co-processor access control
ldr r4, =PRRR @ PRRR
ldr r5, =NMRR @ NMRR
mcr p15, 0, r4, c10, c2, 0 @ write PRRR
mcr p15, 0, r5, c10, c2, 1 @ write NMRR
+#endif /* CONFIG_MMU */
+ mrc p15, 0, r4, c1, c0, 1 @ Read Auxiliary control register
+ teq r4, r9 @ Is it already set?
+ mcrne p15, 0, r9, c1, c0, 1 @ No, so write it
+ mcr p15, 0, r10, c1, c0, 2 @ Co-processor access control
isb
dsb
mov r0, r8 @ control register
--
1.7.4.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/6] ARM: nommu: Use VECTORS_BASE for vector copying with !MMU
2012-03-06 16:54 [PATCH 0/6] Miscellaneous nommu fixes Will Deacon
` (3 preceding siblings ...)
2012-03-06 16:54 ` [PATCH 4/6] ARM: suspend: fix CPU suspend code for !CONFIG_MMU configurations Will Deacon
@ 2012-03-06 16:54 ` Will Deacon
2012-03-06 16:54 ` [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU Will Deacon
5 siblings, 0 replies; 11+ messages in thread
From: Will Deacon @ 2012-03-06 16:54 UTC (permalink / raw)
To: linux-arm-kernel
From: Jonathan Austin <jonathan.austin@arm.com>
When compiling with !CONFIG_MMU the vectors_page pointer does not get
initialised. In the high vectors case, this results in copying to the
wrong address (0x0) and hence a failure to boot.
This patch instead uses CONFIG_VECTORS_BASE as the destination address
when !CONFIG_MMU.
Signed-off-by: Jonathan Austin <jonathan.austin@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/kernel/traps.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index f84dfe6..f1ab393 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -786,7 +786,7 @@ static void __init kuser_get_tls_init(unsigned long vectors)
void __init early_trap_init(void)
{
-#if defined(CONFIG_CPU_USE_DOMAINS)
+#if defined(CONFIG_CPU_USE_DOMAINS) || !defined(CONFIG_MMU)
unsigned long vectors = CONFIG_VECTORS_BASE;
#else
unsigned long vectors = (unsigned long)vectors_page;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU
2012-03-06 16:54 [PATCH 0/6] Miscellaneous nommu fixes Will Deacon
` (4 preceding siblings ...)
2012-03-06 16:54 ` [PATCH 5/6] ARM: nommu: Use VECTORS_BASE for vector copying with !MMU Will Deacon
@ 2012-03-06 16:54 ` Will Deacon
2012-03-06 18:06 ` Sergei Shtylyov
5 siblings, 1 reply; 11+ messages in thread
From: Will Deacon @ 2012-03-06 16:54 UTC (permalink / raw)
To: linux-arm-kernel
If a bank of memory spanning the 4GB boundary is added on a !CONFIG_LPAE
kernel then we will hang early during boot since the memory bank will
have wrapped around to zero.
This patch truncates memory banks for !LPAE configurations when the end
address is not representable in 32 bits.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/kernel/setup.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index a255c39..aeaa048 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -521,7 +521,16 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
*/
size -= start & ~PAGE_MASK;
bank->start = PAGE_ALIGN(start);
- bank->size = size & PAGE_MASK;
+
+#ifndef CONFIG_LPAE
+ if (bank->start + size < bank->start) {
+ printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
+ "32-bit physical address space\n", (long long)start);
+ size = ULONG_MAX - bank->start;
+ }
+#endif
+
+ bank->size = size & PAGE_MASK;
/*
* Check whether this memory region has non-zero size or
--
1.7.4.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU
2012-03-06 18:06 ` Sergei Shtylyov
@ 2012-03-06 17:58 ` Will Deacon
2012-03-06 19:49 ` Nicolas Pitre
0 siblings, 1 reply; 11+ messages in thread
From: Will Deacon @ 2012-03-06 17:58 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Mar 06, 2012 at 06:06:40PM +0000, Sergei Shtylyov wrote:
> Hello.
Hi Sergei,
> On 03/06/2012 07:54 PM, Will Deacon wrote:
>
> > If a bank of memory spanning the 4GB boundary is added on a !CONFIG_LPAE
> > kernel then we will hang early during boot since the memory bank will
> > have wrapped around to zero.
>
> > This patch truncates memory banks for !LPAE configurations when the end
> > address is not representable in 32 bits.
>
> > Signed-off-by: Will Deacon<will.deacon@arm.com>
> > ---
> > arch/arm/kernel/setup.c | 11 ++++++++++-
> > 1 files changed, 10 insertions(+), 1 deletions(-)
>
> > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
> > index a255c39..aeaa048 100644
> > --- a/arch/arm/kernel/setup.c
> > +++ b/arch/arm/kernel/setup.c
> > @@ -521,7 +521,16 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
> > */
> > size -= start& ~PAGE_MASK;
> > bank->start = PAGE_ALIGN(start);
> > - bank->size = size& PAGE_MASK;
> > +
> > +#ifndef CONFIG_LPAE
> > + if (bank->start + size< bank->start) {
> > + printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
> > + "32-bit physical address space\n", (long long)start);
> > + size = ULONG_MAX - bank->start;
>
> I think you forgot to add one here.
No, I deliberately omit the last page because otherwise we end up with the
end address of the bank being calculated as 0, which leads to boot failure.
Will
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU
2012-03-06 16:54 ` [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU Will Deacon
@ 2012-03-06 18:06 ` Sergei Shtylyov
2012-03-06 17:58 ` Will Deacon
0 siblings, 1 reply; 11+ messages in thread
From: Sergei Shtylyov @ 2012-03-06 18:06 UTC (permalink / raw)
To: linux-arm-kernel
Hello.
On 03/06/2012 07:54 PM, Will Deacon wrote:
> If a bank of memory spanning the 4GB boundary is added on a !CONFIG_LPAE
> kernel then we will hang early during boot since the memory bank will
> have wrapped around to zero.
> This patch truncates memory banks for !LPAE configurations when the end
> address is not representable in 32 bits.
> Signed-off-by: Will Deacon<will.deacon@arm.com>
> ---
> arch/arm/kernel/setup.c | 11 ++++++++++-
> 1 files changed, 10 insertions(+), 1 deletions(-)
> diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
> index a255c39..aeaa048 100644
> --- a/arch/arm/kernel/setup.c
> +++ b/arch/arm/kernel/setup.c
> @@ -521,7 +521,16 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
> */
> size -= start& ~PAGE_MASK;
> bank->start = PAGE_ALIGN(start);
> - bank->size = size& PAGE_MASK;
> +
> +#ifndef CONFIG_LPAE
> + if (bank->start + size< bank->start) {
> + printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
> + "32-bit physical address space\n", (long long)start);
> + size = ULONG_MAX - bank->start;
I think you forgot to add one here.
WBR, Sergei
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU
2012-03-06 17:58 ` Will Deacon
@ 2012-03-06 19:49 ` Nicolas Pitre
2012-03-06 20:17 ` Will Deacon
0 siblings, 1 reply; 11+ messages in thread
From: Nicolas Pitre @ 2012-03-06 19:49 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, 6 Mar 2012, Will Deacon wrote:
> On Tue, Mar 06, 2012 at 06:06:40PM +0000, Sergei Shtylyov wrote:
> > Hello.
>
> Hi Sergei,
>
> > On 03/06/2012 07:54 PM, Will Deacon wrote:
> >
> > > If a bank of memory spanning the 4GB boundary is added on a !CONFIG_LPAE
> > > kernel then we will hang early during boot since the memory bank will
> > > have wrapped around to zero.
> >
> > > This patch truncates memory banks for !LPAE configurations when the end
> > > address is not representable in 32 bits.
> >
> > > Signed-off-by: Will Deacon<will.deacon@arm.com>
> > > ---
> > > arch/arm/kernel/setup.c | 11 ++++++++++-
> > > 1 files changed, 10 insertions(+), 1 deletions(-)
> >
> > > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
> > > index a255c39..aeaa048 100644
> > > --- a/arch/arm/kernel/setup.c
> > > +++ b/arch/arm/kernel/setup.c
> > > @@ -521,7 +521,16 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
> > > */
> > > size -= start& ~PAGE_MASK;
> > > bank->start = PAGE_ALIGN(start);
> > > - bank->size = size& PAGE_MASK;
> > > +
> > > +#ifndef CONFIG_LPAE
> > > + if (bank->start + size< bank->start) {
> > > + printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
> > > + "32-bit physical address space\n", (long long)start);
> > > + size = ULONG_MAX - bank->start;
> >
> > I think you forgot to add one here.
>
> No, I deliberately omit the last page because otherwise we end up with the
> end address of the bank being calculated as 0, which leads to boot failure.
What this mentioned in the code, or at least in the patch log?
Nicolas
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU
2012-03-06 19:49 ` Nicolas Pitre
@ 2012-03-06 20:17 ` Will Deacon
0 siblings, 0 replies; 11+ messages in thread
From: Will Deacon @ 2012-03-06 20:17 UTC (permalink / raw)
To: linux-arm-kernel
Hi Nicolas,
On Tue, Mar 06, 2012 at 07:49:43PM +0000, Nicolas Pitre wrote:
> On Tue, 6 Mar 2012, Will Deacon wrote:
> > On Tue, Mar 06, 2012 at 06:06:40PM +0000, Sergei Shtylyov wrote:
> > > On 03/06/2012 07:54 PM, Will Deacon wrote:
> > >
> > > > +#ifndef CONFIG_LPAE
> > > > + if (bank->start + size< bank->start) {
> > > > + printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
> > > > + "32-bit physical address space\n", (long long)start);
> > > > + size = ULONG_MAX - bank->start;
> > >
> > > I think you forgot to add one here.
> >
> > No, I deliberately omit the last page because otherwise we end up with the
> > end address of the bank being calculated as 0, which leads to boot failure.
>
> What this mentioned in the code, or at least in the patch log?
Good idea - I'll add a comment to the code when we assign size.
Will
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2012-03-06 20:17 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-06 16:54 [PATCH 0/6] Miscellaneous nommu fixes Will Deacon
2012-03-06 16:54 ` [PATCH 1/6] ARM: ptrace: fix ptrace_read_user for !CONFIG_MMU platforms Will Deacon
2012-03-06 16:54 ` [PATCH 2/6] kexec: crash: don't save swapper_pg_dir for !CONFIG_MMU configurations Will Deacon
2012-03-06 16:54 ` [PATCH 3/6] ARM: nommu: fix typo in mm/Kconfig Will Deacon
2012-03-06 16:54 ` [PATCH 4/6] ARM: suspend: fix CPU suspend code for !CONFIG_MMU configurations Will Deacon
2012-03-06 16:54 ` [PATCH 5/6] ARM: nommu: Use VECTORS_BASE for vector copying with !MMU Will Deacon
2012-03-06 16:54 ` [PATCH 6/6] ARM: mm: truncate memory banks to fit in 4GB space for classic MMU Will Deacon
2012-03-06 18:06 ` Sergei Shtylyov
2012-03-06 17:58 ` Will Deacon
2012-03-06 19:49 ` Nicolas Pitre
2012-03-06 20:17 ` Will Deacon
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).