[PATCH 8/8] powerpc: Fix endian issues in crash dump code
Michael Ellerman
mpe at ellerman.id.au
Wed Dec 18 15:45:27 EST 2013
On Thu, 2013-12-12 at 15:59 +1100, Anton Blanchard wrote:
> A couple more device tree properties that need byte swapping.
>
> Signed-off-by: Anton Blanchard <anton at samba.org>
> ---
> arch/powerpc/kernel/crash_dump.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
> index 779a78c..11c1d06 100644
> --- a/arch/powerpc/kernel/crash_dump.c
> +++ b/arch/powerpc/kernel/crash_dump.c
> @@ -124,15 +124,15 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
> void crash_free_reserved_phys_range(unsigned long begin, unsigned long end)
> {
> unsigned long addr;
> - const u32 *basep, *sizep;
> + const __be32 *basep, *sizep;
> unsigned int rtas_start = 0, rtas_end = 0;
>
> basep = of_get_property(rtas.dev, "linux,rtas-base", NULL);
> sizep = of_get_property(rtas.dev, "rtas-size", NULL);
>
> if (basep && sizep) {
> - rtas_start = *basep;
> - rtas_end = *basep + *sizep;
> + rtas_start = be32_to_cpup(basep);
> + rtas_end = rtas_start + be32_to_cpup(sizep);
> }
>
> for (addr = begin; addr < end; addr += PAGE_SIZE) {
Not my favourite colour :D What about this instead?
We could also add of_property_read_u32(), with an implied index of zero?
I don't like the rc handling, but couldn't come up with anything I liked
better.
cheers
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
index 11c1d06..60fd0aa 100644
--- a/arch/powerpc/kernel/crash_dump.c
+++ b/arch/powerpc/kernel/crash_dump.c
@@ -124,15 +124,16 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
void crash_free_reserved_phys_range(unsigned long begin, unsigned long end)
{
unsigned long addr;
- const __be32 *basep, *sizep;
+ u32 base, size;
unsigned int rtas_start = 0, rtas_end = 0;
+ int rc;
- basep = of_get_property(rtas.dev, "linux,rtas-base", NULL);
- sizep = of_get_property(rtas.dev, "rtas-size", NULL);
+ rc = of_property_read_u32_index(rtas.dev, "linux,rtas-base", 0, &base);
+ rc |= of_property_read_u32_index(rtas.dev, "rtas-size", 0, &size);
- if (basep && sizep) {
- rtas_start = be32_to_cpup(basep);
- rtas_end = rtas_start + be32_to_cpup(sizep);
+ if (rc == 0) {
+ rtas_start = base;
+ rtas_end = rtas_start + size;
}
for (addr = begin; addr < end; addr += PAGE_SIZE) {
More information about the Linuxppc-dev
mailing list