* [PATCH 0/7] Kdump support for classic PPC
@ 2008-12-17 20:06 Anton Vorontsov
2008-12-17 20:08 ` [PATCH 1/7] powerpc: Prepare xmon_save_regs for use with kdump Anton Vorontsov
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:06 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
Hi all,
This is Kdump part of the older series[1] posted few months ago.
Yeah, I didn't bother with relocatable kernel support (yet), I just
want to consolidate a position of the working Kdump implementation,
and then we can improve it as time goes by.
Other than that, all the comments that were previously made were
addressed in this series. Hope this can make it into 2.6.29.
Thanks,
[1] http://ozlabs.org/pipermail/linuxppc-dev/2008-August/061161.html
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/7] powerpc: Prepare xmon_save_regs for use with kdump
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
@ 2008-12-17 20:08 ` Anton Vorontsov
2008-12-17 20:13 ` Anton Vorontsov
2008-12-17 20:09 ` [PATCH 2/7] powerpc/32/kdump: Implement crash_setup_regs() using ppc_save_regs() Anton Vorontsov
` (5 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:08 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
Today the arch/powerpc/xmon/setjmp.S file contains only the
xmon_save_regs function. We want to use it for kdump purposes, so let's
move the file into arch/powerpc/kernel/ and give the function a more
generic name (ppc_save_regs).
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
This is "git-format-patch -M"-style patch.
arch/powerpc/include/asm/reg.h | 4 ++++
arch/powerpc/kernel/Makefile | 4 ++++
.../{xmon/setjmp.S => kernel/ppc_save_regs.S} | 2 +-
arch/powerpc/xmon/Makefile | 2 +-
arch/powerpc/xmon/xmon.c | 5 ++---
5 files changed, 12 insertions(+), 5 deletions(-)
rename arch/powerpc/{xmon/setjmp.S => kernel/ppc_save_regs.S} (98%)
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index c6d1ab6..f484a34 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -783,6 +783,10 @@ extern void scom970_write(unsigned int address, unsigned long value);
#define __get_SP() ({unsigned long sp; \
asm volatile("mr %0,1": "=r" (sp)); sp;})
+struct pt_regs;
+
+extern void ppc_save_regs(struct pt_regs *regs);
+
#endif /* __ASSEMBLY__ */
#endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_REG_H */
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 92673b4..616c889 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -102,6 +102,10 @@ endif
obj-$(CONFIG_PPC64) += $(obj64-y)
+ifneq ($(CONFIG_XMON),)
+obj-y += ppc_save_regs.o
+endif
+
extra-$(CONFIG_PPC_FPU) += fpu.o
extra-$(CONFIG_PPC64) += entry_64.o
diff --git a/arch/powerpc/xmon/setjmp.S b/arch/powerpc/kernel/ppc_save_regs.S
similarity index 98%
rename from arch/powerpc/xmon/setjmp.S
rename to arch/powerpc/kernel/ppc_save_regs.S
index 04c0b30..5113bd2 100644
--- a/arch/powerpc/xmon/setjmp.S
+++ b/arch/powerpc/kernel/ppc_save_regs.S
@@ -22,7 +22,7 @@
* that will be different for 32-bit and 64-bit, because of the
* different ABIs, though).
*/
-_GLOBAL(xmon_save_regs)
+_GLOBAL(ppc_save_regs)
PPC_STL r0,0*SZL(r3)
PPC_STL r2,2*SZL(r3)
PPC_STL r3,3*SZL(r3)
diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile
index 51d9758..9cb03b7 100644
--- a/arch/powerpc/xmon/Makefile
+++ b/arch/powerpc/xmon/Makefile
@@ -4,7 +4,7 @@ ifdef CONFIG_PPC64
EXTRA_CFLAGS += -mno-minimal-toc
endif
-obj-y += xmon.o setjmp.o start.o nonstdio.o
+obj-y += xmon.o start.o nonstdio.o
ifdef CONFIG_XMON_DISASSEMBLY
obj-y += ppc-dis.o ppc-opc.o
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 076368c..8dfad7d 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -41,6 +41,7 @@
#include <asm/spu_priv1.h>
#include <asm/firmware.h>
#include <asm/setjmp.h>
+#include <asm/reg.h>
#ifdef CONFIG_PPC64
#include <asm/hvcall.h>
@@ -159,8 +160,6 @@ static int xmon_no_auto_backtrace;
extern void xmon_enter(void);
extern void xmon_leave(void);
-extern void xmon_save_regs(struct pt_regs *);
-
#ifdef CONFIG_PPC64
#define REG "%.16lx"
#define REGS_PER_LINE 4
@@ -532,7 +531,7 @@ int xmon(struct pt_regs *excp)
struct pt_regs regs;
if (excp == NULL) {
- xmon_save_regs(®s);
+ ppc_save_regs(®s);
excp = ®s;
}
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/7] powerpc/32/kdump: Implement crash_setup_regs() using ppc_save_regs()
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
2008-12-17 20:08 ` [PATCH 1/7] powerpc: Prepare xmon_save_regs for use with kdump Anton Vorontsov
@ 2008-12-17 20:09 ` Anton Vorontsov
2008-12-17 20:09 ` [PATCH 3/7] powerpc/32: Setup OF properties for kdump Anton Vorontsov
` (4 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:09 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
This patch replaces dummy function with full-fledged crash_setup_regs()
implementation. On PPC32 we simply use ppc_save_regs function to dump
the registers.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
arch/powerpc/include/asm/kexec.h | 15 ++++++---------
arch/powerpc/kernel/Makefile | 2 +-
2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
index 3736d9b..6dbffc9 100644
--- a/arch/powerpc/include/asm/kexec.h
+++ b/arch/powerpc/include/asm/kexec.h
@@ -33,12 +33,12 @@
#ifndef __ASSEMBLY__
#include <linux/cpumask.h>
+#include <asm/reg.h>
typedef void (*crash_shutdown_t)(void);
#ifdef CONFIG_KEXEC
-#ifdef __powerpc64__
/*
* This function is responsible for capturing register states if coming
* via panic or invoking dump using sysrq-trigger.
@@ -48,6 +48,7 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
{
if (oldregs)
memcpy(newregs, oldregs, sizeof(*newregs));
+#ifdef __powerpc64__
else {
/* FIXME Merge this with xmon_save_regs ?? */
unsigned long tmp1, tmp2;
@@ -100,15 +101,11 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
: "b" (newregs)
: "memory");
}
-}
#else
-/*
- * Provide a dummy definition to avoid build failures. Will remain
- * empty till crash dump support is enabled.
- */
-static inline void crash_setup_regs(struct pt_regs *newregs,
- struct pt_regs *oldregs) { }
-#endif /* !__powerpc64 __ */
+ else
+ ppc_save_regs(newregs);
+#endif /* __powerpc64__ */
+}
extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
master to copy new code to 0 */
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 616c889..089209a 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -102,7 +102,7 @@ endif
obj-$(CONFIG_PPC64) += $(obj64-y)
-ifneq ($(CONFIG_XMON),)
+ifneq ($(CONFIG_XMON)$(CONFIG_KEXEC),)
obj-y += ppc_save_regs.o
endif
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/7] powerpc/32: Setup OF properties for kdump
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
2008-12-17 20:08 ` [PATCH 1/7] powerpc: Prepare xmon_save_regs for use with kdump Anton Vorontsov
2008-12-17 20:09 ` [PATCH 2/7] powerpc/32/kdump: Implement crash_setup_regs() using ppc_save_regs() Anton Vorontsov
@ 2008-12-17 20:09 ` Anton Vorontsov
2008-12-21 1:44 ` Paul Mackerras
2008-12-17 20:09 ` [PATCH 4/7] powerpc/32: Allow to ioremap RAM addresses for kdump kernel Anton Vorontsov
` (3 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:09 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
From: Dale Farnsworth <dale@farnsworth.org>
Refactor the setting of kexec OF properties, moving the common code
from machine_kexec_64.c to machine_kexec.c where it can be used on
both ppc64 and ppc32. This will be needed for kdump to work on ppc32
platforms.
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
arch/powerpc/kernel/machine_kexec.c | 36 ++++++++++++++++++++
arch/powerpc/kernel/machine_kexec_64.c | 56 ++-----------------------------
2 files changed, 40 insertions(+), 52 deletions(-)
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
index 4f797c0..b3abebb 100644
--- a/arch/powerpc/kernel/machine_kexec.c
+++ b/arch/powerpc/kernel/machine_kexec.c
@@ -120,6 +120,7 @@ int overlaps_crashkernel(unsigned long start, unsigned long size)
/* Values we need to export to the second kernel via the device tree. */
static unsigned long kernel_end;
+static unsigned long crashk_size;
static struct property kernel_end_prop = {
.name = "linux,kernel-end",
@@ -127,6 +128,39 @@ static struct property kernel_end_prop = {
.value = &kernel_end,
};
+static struct property crashk_base_prop = {
+ .name = "linux,crashkernel-base",
+ .length = sizeof(unsigned long),
+ .value = &crashk_res.start,
+};
+
+static struct property crashk_size_prop = {
+ .name = "linux,crashkernel-size",
+ .length = sizeof(unsigned long),
+ .value = &crashk_size,
+};
+
+static void __init export_crashk_values(struct device_node *node)
+{
+ struct property *prop;
+
+ /* There might be existing crash kernel properties, but we can't
+ * be sure what's in them, so remove them. */
+ prop = of_find_property(node, "linux,crashkernel-base", NULL);
+ if (prop)
+ prom_remove_property(node, prop);
+
+ prop = of_find_property(node, "linux,crashkernel-size", NULL);
+ if (prop)
+ prom_remove_property(node, prop);
+
+ if (crashk_res.start != 0) {
+ prom_add_property(node, &crashk_base_prop);
+ crashk_size = crashk_res.end - crashk_res.start + 1;
+ prom_add_property(node, &crashk_size_prop);
+ }
+}
+
static int __init kexec_setup(void)
{
struct device_node *node;
@@ -145,6 +179,8 @@ static int __init kexec_setup(void)
kernel_end = __pa(_end);
prom_add_property(node, &kernel_end_prop);
+ export_crashk_values(node);
+
of_node_put(node);
return 0;
}
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c
index a89bce8..49e705f 100644
--- a/arch/powerpc/kernel/machine_kexec_64.c
+++ b/arch/powerpc/kernel/machine_kexec_64.c
@@ -303,18 +303,18 @@ static struct property htab_size_prop = {
.value = &htab_size_bytes,
};
-static void __init export_htab_values(void)
+static int __init export_htab_values(void)
{
struct device_node *node;
struct property *prop;
/* On machines with no htab htab_address is NULL */
if (!htab_address)
- return;
+ return -ENODEV;
node = of_find_node_by_path("/chosen");
if (!node)
- return;
+ return -ENODEV;
/* remove any stale propertys so ours can be found */
prop = of_find_property(node, htab_base_prop.name, NULL);
@@ -329,54 +329,6 @@ static void __init export_htab_values(void)
prom_add_property(node, &htab_size_prop);
of_node_put(node);
-}
-
-static struct property crashk_base_prop = {
- .name = "linux,crashkernel-base",
- .length = sizeof(unsigned long),
- .value = &crashk_res.start,
-};
-
-static unsigned long crashk_size;
-
-static struct property crashk_size_prop = {
- .name = "linux,crashkernel-size",
- .length = sizeof(unsigned long),
- .value = &crashk_size,
-};
-
-static void __init export_crashk_values(void)
-{
- struct device_node *node;
- struct property *prop;
-
- node = of_find_node_by_path("/chosen");
- if (!node)
- return;
-
- /* There might be existing crash kernel properties, but we can't
- * be sure what's in them, so remove them. */
- prop = of_find_property(node, "linux,crashkernel-base", NULL);
- if (prop)
- prom_remove_property(node, prop);
-
- prop = of_find_property(node, "linux,crashkernel-size", NULL);
- if (prop)
- prom_remove_property(node, prop);
-
- if (crashk_res.start != 0) {
- prom_add_property(node, &crashk_base_prop);
- crashk_size = crashk_res.end - crashk_res.start + 1;
- prom_add_property(node, &crashk_size_prop);
- }
-
- of_node_put(node);
-}
-
-static int __init kexec_setup(void)
-{
- export_htab_values();
- export_crashk_values();
return 0;
}
-__initcall(kexec_setup);
+late_initcall(export_htab_values);
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/7] powerpc/32: Allow to ioremap RAM addresses for kdump kernel
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
` (2 preceding siblings ...)
2008-12-17 20:09 ` [PATCH 3/7] powerpc/32: Setup OF properties for kdump Anton Vorontsov
@ 2008-12-17 20:09 ` Anton Vorontsov
2008-12-17 20:09 ` [PATCH 5/7] powerpc/32: Add the ability for a classic ppc kernel to be loaded at 32M Anton Vorontsov
` (2 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:09 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
While for debugging it is good to catch bogus users of ioremap,
though for kdump support it is more convenient to use ioremap for
copy_oldmem_page() (exactly as we do for PPC64 currently).
Note that copy_oldmem_page() calls __ioremap with flags set to '0',
so it should be safe with the regard to the caches.
The other option is to use kmap_atomic_pfn()[1], but it will not work
for kernels compiled without HIGHMEM.
That is, on a board with 256MB RAM and crashkernel=64M@32M case, the
!HIGHMEM capturing kernel maps 0-96M range, which does not include all
the memory needed to capture the dump. And, obviously, accessing
anything upper than 96M will cause faults.
[1] http://ozlabs.org/pipermail/linuxppc-dev/2007-November/046747.html
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
arch/powerpc/mm/pgtable_32.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index 3414724..cd56097 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -173,6 +173,7 @@ __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
if (p < 16*1024*1024)
p += _ISA_MEM_BASE;
+#ifndef CONFIG_CRASH_DUMP
/*
* Don't allow anybody to remap normal RAM that we're using.
* mem_init() sets high_memory so only do the check after that.
@@ -182,6 +183,7 @@ __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags)
(unsigned long long)p, __builtin_return_address(0));
return NULL;
}
+#endif
if (size == 0)
return NULL;
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/7] powerpc/32: Add the ability for a classic ppc kernel to be loaded at 32M
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
` (3 preceding siblings ...)
2008-12-17 20:09 ` [PATCH 4/7] powerpc/32: Allow to ioremap RAM addresses for kdump kernel Anton Vorontsov
@ 2008-12-17 20:09 ` Anton Vorontsov
2008-12-17 20:09 ` [PATCH 6/7] powerpc/32: Wire up the trampoline code for kdump Anton Vorontsov
2008-12-17 20:09 ` [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs() Anton Vorontsov
6 siblings, 0 replies; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:09 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
From: Dale Farnsworth <dale@farnsworth.org>
Add the ability for a classic ppc kernel to be loaded at an address
of 32MB. This done by fixing a few places that assume we are loaded
at address 0, and by changing several uses of KERNELBASE to use
PAGE_OFFSET, instead.
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
arch/powerpc/include/asm/ppc_asm.h | 4 ++--
arch/powerpc/kernel/head_32.S | 11 ++++++-----
arch/powerpc/mm/init_32.c | 2 +-
arch/powerpc/mm/pgtable_32.c | 4 ++--
arch/powerpc/mm/ppc_mmu_32.c | 8 ++++----
5 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h
index c4a029c..1a0d628 100644
--- a/arch/powerpc/include/asm/ppc_asm.h
+++ b/arch/powerpc/include/asm/ppc_asm.h
@@ -425,14 +425,14 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)
#define fromreal(rd) tovirt(rd,rd)
#define tophys(rd,rs) \
-0: addis rd,rs,-KERNELBASE@h; \
+0: addis rd,rs,-PAGE_OFFSET@h; \
.section ".vtop_fixup","aw"; \
.align 1; \
.long 0b; \
.previous
#define tovirt(rd,rs) \
-0: addis rd,rs,KERNELBASE@h; \
+0: addis rd,rs,PAGE_OFFSET@h; \
.section ".ptov_fixup","aw"; \
.align 1; \
.long 0b; \
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
index 0c32682..97338d9 100644
--- a/arch/powerpc/kernel/head_32.S
+++ b/arch/powerpc/kernel/head_32.S
@@ -182,7 +182,8 @@ __after_mmu_off:
bl reloc_offset
mr r26,r3
addis r4,r3,KERNELBASE@h /* current address of _start */
- cmpwi 0,r4,0 /* are we already running at 0? */
+ lis r5,PHYSICAL_START@h
+ cmplw 0,r4,r5 /* already running at PHYSICAL_START? */
bne relocate_kernel
/*
* we now have the 1st 16M of ram mapped with the bats.
@@ -810,13 +811,13 @@ giveup_altivec:
/*
* This code is jumped to from the startup code to copy
- * the kernel image to physical address 0.
+ * the kernel image to physical address PHYSICAL_START.
*/
relocate_kernel:
addis r9,r26,klimit@ha /* fetch klimit */
lwz r25,klimit@l(r9)
addis r25,r25,-KERNELBASE@h
- li r3,0 /* Destination base address */
+ lis r3,PHYSICAL_START@h /* Destination base address */
li r6,0 /* Destination offset */
li r5,0x4000 /* # bytes of memory to copy */
bl copy_and_flush /* copy the first 0x4000 bytes */
@@ -1178,11 +1179,11 @@ mmu_off:
/*
* Use the first pair of BAT registers to map the 1st 16MB
- * of RAM to KERNELBASE. From this point on we can't safely
+ * of RAM to PAGE_OFFSET. From this point on we can't safely
* call OF any more.
*/
initial_bats:
- lis r11,KERNELBASE@h
+ lis r11,PAGE_OFFSET@h
mfspr r9,SPRN_PVR
rlwinm r9,r9,16,16,31 /* r9 = 1 for 601, 4 for 604 */
cmpwi 0,r9,1
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index 388ceda..4ac0e4e 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -49,7 +49,7 @@
#if defined(CONFIG_KERNEL_START_BOOL) || defined(CONFIG_LOWMEM_SIZE_BOOL)
/* The ammount of lowmem must be within 0xF0000000 - KERNELBASE. */
-#if (CONFIG_LOWMEM_SIZE > (0xF0000000 - KERNELBASE))
+#if (CONFIG_LOWMEM_SIZE > (0xF0000000 - PAGE_OFFSET))
#error "You must adjust CONFIG_LOWMEM_SIZE or CONFIG_START_KERNEL"
#endif
#endif
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index cd56097..8cba46f 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -269,7 +269,7 @@ int map_page(unsigned long va, phys_addr_t pa, int flags)
}
/*
- * Map in a big chunk of physical memory starting at KERNELBASE.
+ * Map in a big chunk of physical memory starting at PAGE_OFFSET.
*/
void __init mapin_ram(void)
{
@@ -278,7 +278,7 @@ void __init mapin_ram(void)
int ktext;
s = mmu_mapin_ram();
- v = KERNELBASE + s;
+ v = PAGE_OFFSET + s;
p = memstart_addr + s;
for (; s < total_lowmem; s += PAGE_SIZE) {
ktext = ((char *) v >= _stext && (char *) v < etext);
diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c
index 6aa1208..49b195e 100644
--- a/arch/powerpc/mm/ppc_mmu_32.c
+++ b/arch/powerpc/mm/ppc_mmu_32.c
@@ -95,16 +95,16 @@ unsigned long __init mmu_mapin_ram(void)
break;
}
- setbat(2, KERNELBASE, 0, bl, _PAGE_RAM);
- done = (unsigned long)bat_addrs[2].limit - KERNELBASE + 1;
+ setbat(2, PAGE_OFFSET, 0, bl, _PAGE_RAM);
+ done = (unsigned long)bat_addrs[2].limit - PAGE_OFFSET + 1;
if ((done < tot) && !bat_addrs[3].limit) {
/* use BAT3 to cover a bit more */
tot -= done;
for (bl = 128<<10; bl < max_size; bl <<= 1)
if (bl * 2 > tot)
break;
- setbat(3, KERNELBASE+done, done, bl, _PAGE_RAM);
- done = (unsigned long)bat_addrs[3].limit - KERNELBASE + 1;
+ setbat(3, PAGE_OFFSET+done, done, bl, _PAGE_RAM);
+ done = (unsigned long)bat_addrs[3].limit - PAGE_OFFSET + 1;
}
return done;
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 6/7] powerpc/32: Wire up the trampoline code for kdump
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
` (4 preceding siblings ...)
2008-12-17 20:09 ` [PATCH 5/7] powerpc/32: Add the ability for a classic ppc kernel to be loaded at 32M Anton Vorontsov
@ 2008-12-17 20:09 ` Anton Vorontsov
2008-12-17 20:09 ` [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs() Anton Vorontsov
6 siblings, 0 replies; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:09 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
From: Dale Farnsworth <dale@farnsworth.org>
Wire up the trampoline code for ppc32 to relay exceptions from the
vectors at address 0 to vectors at address 32MB, and modify Kconfig
to enable Kdump support for all classic powerpcs.
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
arch/powerpc/Kconfig | 2 +-
arch/powerpc/include/asm/kdump.h | 13 +++++++++++++
arch/powerpc/kernel/setup_32.c | 2 ++
3 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index be4f99b..f7f5448 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -326,7 +326,7 @@ config KEXEC
config CRASH_DUMP
bool "Build a kdump crash kernel"
- depends on PPC_MULTIPLATFORM && PPC64 && RELOCATABLE
+ depends on (PPC64 && RELOCATABLE) || 6xx
help
Build a kernel suitable for use as a kdump capture kernel.
The same kernel binary can be used as production kernel and dump
diff --git a/arch/powerpc/include/asm/kdump.h b/arch/powerpc/include/asm/kdump.h
index b07ebb9..5ebfe5d 100644
--- a/arch/powerpc/include/asm/kdump.h
+++ b/arch/powerpc/include/asm/kdump.h
@@ -1,6 +1,8 @@
#ifndef _PPC64_KDUMP_H
#define _PPC64_KDUMP_H
+#include <asm/page.h>
+
/* Kdump kernel runs at 32 MB, change at your peril. */
#define KDUMP_KERNELBASE 0x2000000
@@ -11,8 +13,19 @@
#ifdef CONFIG_CRASH_DUMP
+/*
+ * On PPC64 translation is disabled during trampoline setup, so we use
+ * physical addresses. Though on PPC32 translation is already enabled,
+ * so we can't do the same. Luckily create_trampoline() creates relative
+ * branches, so we can just add the PAGE_OFFSET and don't worry about it.
+ */
+#ifdef __powerpc64__
#define KDUMP_TRAMPOLINE_START 0x0100
#define KDUMP_TRAMPOLINE_END 0x3000
+#else
+#define KDUMP_TRAMPOLINE_START (0x0100 + PAGE_OFFSET)
+#define KDUMP_TRAMPOLINE_END (0x3000 + PAGE_OFFSET)
+#endif /* __powerpc64__ */
#define KDUMP_MIN_TCE_ENTRIES 2048
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 086c23c..9ca1d2b 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -121,6 +121,8 @@ notrace void __init machine_init(unsigned long dt_ptr)
probe_machine();
+ setup_kdump_trampoline();
+
#ifdef CONFIG_6xx
if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
cpu_has_feature(CPU_FTR_CAN_NAP))
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs()
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
` (5 preceding siblings ...)
2008-12-17 20:09 ` [PATCH 6/7] powerpc/32: Wire up the trampoline code for kdump Anton Vorontsov
@ 2008-12-17 20:09 ` Anton Vorontsov
2009-01-07 3:16 ` Benjamin Herrenschmidt
6 siblings, 1 reply; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:09 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
The patch replaces internal registers dump implementation with
ppc_save_regs(). From now on PPC64 and PPC32 are using the same
code for crash_setup_regs().
NOTE: The old regs dump implementation was capturing SP (r1) directly
as is, so you could see crash_kexec() function on top of the back-trace.
But ppc_save_regs() goes up one stack frame, so you'll not see it
anymore, at the top-level you'll see who actually triggered the crash
dump instead.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
p.s.
The patch is the last in the series, so you can easily drop it
until somebody actually test it (I don't have any PPC64 machine,
so I'm looking for volunteers. :-)
arch/powerpc/include/asm/kexec.h | 55 --------------------------------------
1 files changed, 0 insertions(+), 55 deletions(-)
diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
index 6dbffc9..7e06b43 100644
--- a/arch/powerpc/include/asm/kexec.h
+++ b/arch/powerpc/include/asm/kexec.h
@@ -48,63 +48,8 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
{
if (oldregs)
memcpy(newregs, oldregs, sizeof(*newregs));
-#ifdef __powerpc64__
- else {
- /* FIXME Merge this with xmon_save_regs ?? */
- unsigned long tmp1, tmp2;
- __asm__ __volatile__ (
- "std 0,0(%2)\n"
- "std 1,8(%2)\n"
- "std 2,16(%2)\n"
- "std 3,24(%2)\n"
- "std 4,32(%2)\n"
- "std 5,40(%2)\n"
- "std 6,48(%2)\n"
- "std 7,56(%2)\n"
- "std 8,64(%2)\n"
- "std 9,72(%2)\n"
- "std 10,80(%2)\n"
- "std 11,88(%2)\n"
- "std 12,96(%2)\n"
- "std 13,104(%2)\n"
- "std 14,112(%2)\n"
- "std 15,120(%2)\n"
- "std 16,128(%2)\n"
- "std 17,136(%2)\n"
- "std 18,144(%2)\n"
- "std 19,152(%2)\n"
- "std 20,160(%2)\n"
- "std 21,168(%2)\n"
- "std 22,176(%2)\n"
- "std 23,184(%2)\n"
- "std 24,192(%2)\n"
- "std 25,200(%2)\n"
- "std 26,208(%2)\n"
- "std 27,216(%2)\n"
- "std 28,224(%2)\n"
- "std 29,232(%2)\n"
- "std 30,240(%2)\n"
- "std 31,248(%2)\n"
- "mfmsr %0\n"
- "std %0, 264(%2)\n"
- "mfctr %0\n"
- "std %0, 280(%2)\n"
- "mflr %0\n"
- "std %0, 288(%2)\n"
- "bl 1f\n"
- "1: mflr %1\n"
- "std %1, 256(%2)\n"
- "mtlr %0\n"
- "mfxer %0\n"
- "std %0, 296(%2)\n"
- : "=&r" (tmp1), "=&r" (tmp2)
- : "b" (newregs)
- : "memory");
- }
-#else
else
ppc_save_regs(newregs);
-#endif /* __powerpc64__ */
}
extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 1/7] powerpc: Prepare xmon_save_regs for use with kdump
2008-12-17 20:08 ` [PATCH 1/7] powerpc: Prepare xmon_save_regs for use with kdump Anton Vorontsov
@ 2008-12-17 20:13 ` Anton Vorontsov
0 siblings, 0 replies; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-17 20:13 UTC (permalink / raw)
To: Paul Mackerras; +Cc: Milton Miller, linuxppc-dev
Today the arch/powerpc/xmon/setjmp.S file contains only the
xmon_save_regs function. We want to use it for kdump purposes, so let's
move the file into arch/powerpc/kernel/ and give the function a more
generic name (ppc_save_regs).
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
The same patch but suitable for patch(1), quilt users would
appreciate. ;-)
arch/powerpc/include/asm/reg.h | 4 ++
arch/powerpc/kernel/Makefile | 4 ++
arch/powerpc/kernel/ppc_save_regs.S | 74 +++++++++++++++++++++++++++++++++++
arch/powerpc/xmon/Makefile | 2 +-
arch/powerpc/xmon/setjmp.S | 74 -----------------------------------
arch/powerpc/xmon/xmon.c | 5 +-
6 files changed, 85 insertions(+), 78 deletions(-)
create mode 100644 arch/powerpc/kernel/ppc_save_regs.S
delete mode 100644 arch/powerpc/xmon/setjmp.S
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index c6d1ab6..f484a34 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -783,6 +783,10 @@ extern void scom970_write(unsigned int address, unsigned long value);
#define __get_SP() ({unsigned long sp; \
asm volatile("mr %0,1": "=r" (sp)); sp;})
+struct pt_regs;
+
+extern void ppc_save_regs(struct pt_regs *regs);
+
#endif /* __ASSEMBLY__ */
#endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_REG_H */
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 92673b4..616c889 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -102,6 +102,10 @@ endif
obj-$(CONFIG_PPC64) += $(obj64-y)
+ifneq ($(CONFIG_XMON),)
+obj-y += ppc_save_regs.o
+endif
+
extra-$(CONFIG_PPC_FPU) += fpu.o
extra-$(CONFIG_PPC64) += entry_64.o
diff --git a/arch/powerpc/kernel/ppc_save_regs.S b/arch/powerpc/kernel/ppc_save_regs.S
new file mode 100644
index 0000000..5113bd2
--- /dev/null
+++ b/arch/powerpc/kernel/ppc_save_regs.S
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 1996 Paul Mackerras.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * NOTE: assert(sizeof(buf) > 23 * sizeof(long))
+ */
+#include <asm/processor.h>
+#include <asm/ppc_asm.h>
+#include <asm/asm-offsets.h>
+
+/*
+ * Grab the register values as they are now.
+ * This won't do a particularily good job because we really
+ * want our caller's caller's registers, and our caller has
+ * already executed its prologue.
+ * ToDo: We could reach back into the caller's save area to do
+ * a better job of representing the caller's state (note that
+ * that will be different for 32-bit and 64-bit, because of the
+ * different ABIs, though).
+ */
+_GLOBAL(ppc_save_regs)
+ PPC_STL r0,0*SZL(r3)
+ PPC_STL r2,2*SZL(r3)
+ PPC_STL r3,3*SZL(r3)
+ PPC_STL r4,4*SZL(r3)
+ PPC_STL r5,5*SZL(r3)
+ PPC_STL r6,6*SZL(r3)
+ PPC_STL r7,7*SZL(r3)
+ PPC_STL r8,8*SZL(r3)
+ PPC_STL r9,9*SZL(r3)
+ PPC_STL r10,10*SZL(r3)
+ PPC_STL r11,11*SZL(r3)
+ PPC_STL r12,12*SZL(r3)
+ PPC_STL r13,13*SZL(r3)
+ PPC_STL r14,14*SZL(r3)
+ PPC_STL r15,15*SZL(r3)
+ PPC_STL r16,16*SZL(r3)
+ PPC_STL r17,17*SZL(r3)
+ PPC_STL r18,18*SZL(r3)
+ PPC_STL r19,19*SZL(r3)
+ PPC_STL r20,20*SZL(r3)
+ PPC_STL r21,21*SZL(r3)
+ PPC_STL r22,22*SZL(r3)
+ PPC_STL r23,23*SZL(r3)
+ PPC_STL r24,24*SZL(r3)
+ PPC_STL r25,25*SZL(r3)
+ PPC_STL r26,26*SZL(r3)
+ PPC_STL r27,27*SZL(r3)
+ PPC_STL r28,28*SZL(r3)
+ PPC_STL r29,29*SZL(r3)
+ PPC_STL r30,30*SZL(r3)
+ PPC_STL r31,31*SZL(r3)
+ /* go up one stack frame for SP */
+ PPC_LL r4,0(r1)
+ PPC_STL r4,1*SZL(r3)
+ /* get caller's LR */
+ PPC_LL r0,LRSAVE(r4)
+ PPC_STL r0,_NIP-STACK_FRAME_OVERHEAD(r3)
+ PPC_STL r0,_LINK-STACK_FRAME_OVERHEAD(r3)
+ mfmsr r0
+ PPC_STL r0,_MSR-STACK_FRAME_OVERHEAD(r3)
+ mfctr r0
+ PPC_STL r0,_CTR-STACK_FRAME_OVERHEAD(r3)
+ mfxer r0
+ PPC_STL r0,_XER-STACK_FRAME_OVERHEAD(r3)
+ mfcr r0
+ PPC_STL r0,_CCR-STACK_FRAME_OVERHEAD(r3)
+ li r0,0
+ PPC_STL r0,_TRAP-STACK_FRAME_OVERHEAD(r3)
+ blr
diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile
index 51d9758..9cb03b7 100644
--- a/arch/powerpc/xmon/Makefile
+++ b/arch/powerpc/xmon/Makefile
@@ -4,7 +4,7 @@ ifdef CONFIG_PPC64
EXTRA_CFLAGS += -mno-minimal-toc
endif
-obj-y += xmon.o setjmp.o start.o nonstdio.o
+obj-y += xmon.o start.o nonstdio.o
ifdef CONFIG_XMON_DISASSEMBLY
obj-y += ppc-dis.o ppc-opc.o
diff --git a/arch/powerpc/xmon/setjmp.S b/arch/powerpc/xmon/setjmp.S
deleted file mode 100644
index 04c0b30..0000000
--- a/arch/powerpc/xmon/setjmp.S
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 1996 Paul Mackerras.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- *
- * NOTE: assert(sizeof(buf) > 23 * sizeof(long))
- */
-#include <asm/processor.h>
-#include <asm/ppc_asm.h>
-#include <asm/asm-offsets.h>
-
-/*
- * Grab the register values as they are now.
- * This won't do a particularily good job because we really
- * want our caller's caller's registers, and our caller has
- * already executed its prologue.
- * ToDo: We could reach back into the caller's save area to do
- * a better job of representing the caller's state (note that
- * that will be different for 32-bit and 64-bit, because of the
- * different ABIs, though).
- */
-_GLOBAL(xmon_save_regs)
- PPC_STL r0,0*SZL(r3)
- PPC_STL r2,2*SZL(r3)
- PPC_STL r3,3*SZL(r3)
- PPC_STL r4,4*SZL(r3)
- PPC_STL r5,5*SZL(r3)
- PPC_STL r6,6*SZL(r3)
- PPC_STL r7,7*SZL(r3)
- PPC_STL r8,8*SZL(r3)
- PPC_STL r9,9*SZL(r3)
- PPC_STL r10,10*SZL(r3)
- PPC_STL r11,11*SZL(r3)
- PPC_STL r12,12*SZL(r3)
- PPC_STL r13,13*SZL(r3)
- PPC_STL r14,14*SZL(r3)
- PPC_STL r15,15*SZL(r3)
- PPC_STL r16,16*SZL(r3)
- PPC_STL r17,17*SZL(r3)
- PPC_STL r18,18*SZL(r3)
- PPC_STL r19,19*SZL(r3)
- PPC_STL r20,20*SZL(r3)
- PPC_STL r21,21*SZL(r3)
- PPC_STL r22,22*SZL(r3)
- PPC_STL r23,23*SZL(r3)
- PPC_STL r24,24*SZL(r3)
- PPC_STL r25,25*SZL(r3)
- PPC_STL r26,26*SZL(r3)
- PPC_STL r27,27*SZL(r3)
- PPC_STL r28,28*SZL(r3)
- PPC_STL r29,29*SZL(r3)
- PPC_STL r30,30*SZL(r3)
- PPC_STL r31,31*SZL(r3)
- /* go up one stack frame for SP */
- PPC_LL r4,0(r1)
- PPC_STL r4,1*SZL(r3)
- /* get caller's LR */
- PPC_LL r0,LRSAVE(r4)
- PPC_STL r0,_NIP-STACK_FRAME_OVERHEAD(r3)
- PPC_STL r0,_LINK-STACK_FRAME_OVERHEAD(r3)
- mfmsr r0
- PPC_STL r0,_MSR-STACK_FRAME_OVERHEAD(r3)
- mfctr r0
- PPC_STL r0,_CTR-STACK_FRAME_OVERHEAD(r3)
- mfxer r0
- PPC_STL r0,_XER-STACK_FRAME_OVERHEAD(r3)
- mfcr r0
- PPC_STL r0,_CCR-STACK_FRAME_OVERHEAD(r3)
- li r0,0
- PPC_STL r0,_TRAP-STACK_FRAME_OVERHEAD(r3)
- blr
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 076368c..8dfad7d 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -41,6 +41,7 @@
#include <asm/spu_priv1.h>
#include <asm/firmware.h>
#include <asm/setjmp.h>
+#include <asm/reg.h>
#ifdef CONFIG_PPC64
#include <asm/hvcall.h>
@@ -159,8 +160,6 @@ static int xmon_no_auto_backtrace;
extern void xmon_enter(void);
extern void xmon_leave(void);
-extern void xmon_save_regs(struct pt_regs *);
-
#ifdef CONFIG_PPC64
#define REG "%.16lx"
#define REGS_PER_LINE 4
@@ -532,7 +531,7 @@ int xmon(struct pt_regs *excp)
struct pt_regs regs;
if (excp == NULL) {
- xmon_save_regs(®s);
+ ppc_save_regs(®s);
excp = ®s;
}
--
1.5.6.5
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 3/7] powerpc/32: Setup OF properties for kdump
2008-12-17 20:09 ` [PATCH 3/7] powerpc/32: Setup OF properties for kdump Anton Vorontsov
@ 2008-12-21 1:44 ` Paul Mackerras
2008-12-21 3:29 ` Anton Vorontsov
0 siblings, 1 reply; 14+ messages in thread
From: Paul Mackerras @ 2008-12-21 1:44 UTC (permalink / raw)
To: Anton Vorontsov; +Cc: linuxppc-dev, Milton Miller
Anton Vorontsov writes:
> From: Dale Farnsworth <dale@farnsworth.org>
>
> Refactor the setting of kexec OF properties, moving the common code
> from machine_kexec_64.c to machine_kexec.c where it can be used on
> both ppc64 and ppc32. This will be needed for kdump to work on ppc32
> platforms.
>
> Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> arch/powerpc/kernel/machine_kexec.c | 36 ++++++++++++++++++++
> arch/powerpc/kernel/machine_kexec_64.c | 56 ++-----------------------------
> 2 files changed, 40 insertions(+), 52 deletions(-)
>
> diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
> index 4f797c0..b3abebb 100644
> --- a/arch/powerpc/kernel/machine_kexec.c
> +++ b/arch/powerpc/kernel/machine_kexec.c
> @@ -120,6 +120,7 @@ int overlaps_crashkernel(unsigned long start, unsigned long size)
>
> /* Values we need to export to the second kernel via the device tree. */
> static unsigned long kernel_end;
> +static unsigned long crashk_size;
>
> static struct property kernel_end_prop = {
> .name = "linux,kernel-end",
This patch doesn't apply. The current version of machine_kexec.c ends
with overlaps_crashkernel. There's no kernel_end or kernel_end_prop
in that file. Is there a preceding patch that needs to be applied
first?
Paul.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/7] powerpc/32: Setup OF properties for kdump
2008-12-21 1:44 ` Paul Mackerras
@ 2008-12-21 3:29 ` Anton Vorontsov
0 siblings, 0 replies; 14+ messages in thread
From: Anton Vorontsov @ 2008-12-21 3:29 UTC (permalink / raw)
To: Paul Mackerras; +Cc: linuxppc-dev, Milton Miller
On Sun, Dec 21, 2008 at 12:44:21PM +1100, Paul Mackerras wrote:
> Anton Vorontsov writes:
>
> > From: Dale Farnsworth <dale@farnsworth.org>
> >
> > Refactor the setting of kexec OF properties, moving the common code
> > from machine_kexec_64.c to machine_kexec.c where it can be used on
> > both ppc64 and ppc32. This will be needed for kdump to work on ppc32
> > platforms.
> >
> > Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
> > Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> > ---
> > arch/powerpc/kernel/machine_kexec.c | 36 ++++++++++++++++++++
> > arch/powerpc/kernel/machine_kexec_64.c | 56 ++-----------------------------
> > 2 files changed, 40 insertions(+), 52 deletions(-)
> >
> > diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
> > index 4f797c0..b3abebb 100644
> > --- a/arch/powerpc/kernel/machine_kexec.c
> > +++ b/arch/powerpc/kernel/machine_kexec.c
> > @@ -120,6 +120,7 @@ int overlaps_crashkernel(unsigned long start, unsigned long size)
> >
> > /* Values we need to export to the second kernel via the device tree. */
> > static unsigned long kernel_end;
> > +static unsigned long crashk_size;
> >
> > static struct property kernel_end_prop = {
> > .name = "linux,kernel-end",
>
> This patch doesn't apply. The current version of machine_kexec.c ends
> with overlaps_crashkernel. There's no kernel_end or kernel_end_prop
> in that file. Is there a preceding patch that needs to be applied
> first?
Yes, this patch set depend on another patch from the Kexec series:
[1/3] powerpc: Setup OF properties for ppc32 kexec
http://patchwork.ozlabs.org/patch/14280/
Sorry, I forgot to mention this in the introductory post.
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs()
2008-12-17 20:09 ` [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs() Anton Vorontsov
@ 2009-01-07 3:16 ` Benjamin Herrenschmidt
2009-01-07 4:04 ` Anton Vorontsov
0 siblings, 1 reply; 14+ messages in thread
From: Benjamin Herrenschmidt @ 2009-01-07 3:16 UTC (permalink / raw)
To: Anton Vorontsov; +Cc: linuxppc-dev, Paul Mackerras, Milton Miller
On Wed, 2008-12-17 at 23:09 +0300, Anton Vorontsov wrote:
> The patch replaces internal registers dump implementation with
> ppc_save_regs(). From now on PPC64 and PPC32 are using the same
> code for crash_setup_regs().
>
> NOTE: The old regs dump implementation was capturing SP (r1) directly
> as is, so you could see crash_kexec() function on top of the back-trace.
> But ppc_save_regs() goes up one stack frame, so you'll not see it
> anymore, at the top-level you'll see who actually triggered the crash
> dump instead.
>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
Note that ppc_save_regs() for some obscure reason isn't saving r1...
Is that a problem for you ? I think we should fix ppc_save_regs()
anyway, it doesn't matter for xmon to save one more register and it will
avoid nasty surprises in the long run.
Can you send an updated patch ?
Thanks !
Ben.
> p.s.
> The patch is the last in the series, so you can easily drop it
> until somebody actually test it (I don't have any PPC64 machine,
> so I'm looking for volunteers. :-)
>
> arch/powerpc/include/asm/kexec.h | 55 --------------------------------------
> 1 files changed, 0 insertions(+), 55 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
> index 6dbffc9..7e06b43 100644
> --- a/arch/powerpc/include/asm/kexec.h
> +++ b/arch/powerpc/include/asm/kexec.h
> @@ -48,63 +48,8 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
> {
> if (oldregs)
> memcpy(newregs, oldregs, sizeof(*newregs));
> -#ifdef __powerpc64__
> - else {
> - /* FIXME Merge this with xmon_save_regs ?? */
> - unsigned long tmp1, tmp2;
> - __asm__ __volatile__ (
> - "std 0,0(%2)\n"
> - "std 1,8(%2)\n"
> - "std 2,16(%2)\n"
> - "std 3,24(%2)\n"
> - "std 4,32(%2)\n"
> - "std 5,40(%2)\n"
> - "std 6,48(%2)\n"
> - "std 7,56(%2)\n"
> - "std 8,64(%2)\n"
> - "std 9,72(%2)\n"
> - "std 10,80(%2)\n"
> - "std 11,88(%2)\n"
> - "std 12,96(%2)\n"
> - "std 13,104(%2)\n"
> - "std 14,112(%2)\n"
> - "std 15,120(%2)\n"
> - "std 16,128(%2)\n"
> - "std 17,136(%2)\n"
> - "std 18,144(%2)\n"
> - "std 19,152(%2)\n"
> - "std 20,160(%2)\n"
> - "std 21,168(%2)\n"
> - "std 22,176(%2)\n"
> - "std 23,184(%2)\n"
> - "std 24,192(%2)\n"
> - "std 25,200(%2)\n"
> - "std 26,208(%2)\n"
> - "std 27,216(%2)\n"
> - "std 28,224(%2)\n"
> - "std 29,232(%2)\n"
> - "std 30,240(%2)\n"
> - "std 31,248(%2)\n"
> - "mfmsr %0\n"
> - "std %0, 264(%2)\n"
> - "mfctr %0\n"
> - "std %0, 280(%2)\n"
> - "mflr %0\n"
> - "std %0, 288(%2)\n"
> - "bl 1f\n"
> - "1: mflr %1\n"
> - "std %1, 256(%2)\n"
> - "mtlr %0\n"
> - "mfxer %0\n"
> - "std %0, 296(%2)\n"
> - : "=&r" (tmp1), "=&r" (tmp2)
> - : "b" (newregs)
> - : "memory");
> - }
> -#else
> else
> ppc_save_regs(newregs);
> -#endif /* __powerpc64__ */
> }
>
> extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs()
2009-01-07 3:16 ` Benjamin Herrenschmidt
@ 2009-01-07 4:04 ` Anton Vorontsov
2009-01-07 5:11 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 14+ messages in thread
From: Anton Vorontsov @ 2009-01-07 4:04 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Paul Mackerras, Milton Miller
On Wed, Jan 07, 2009 at 02:16:05PM +1100, Benjamin Herrenschmidt wrote:
> On Wed, 2008-12-17 at 23:09 +0300, Anton Vorontsov wrote:
> > The patch replaces internal registers dump implementation with
> > ppc_save_regs(). From now on PPC64 and PPC32 are using the same
> > code for crash_setup_regs().
> >
> > NOTE: The old regs dump implementation was capturing SP (r1) directly
> > as is, so you could see crash_kexec() function on top of the back-trace.
> > But ppc_save_regs() goes up one stack frame, so you'll not see it
> > anymore, at the top-level you'll see who actually triggered the crash
> > dump instead.
> >
> > Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> > ---
>
> Note that ppc_save_regs() for some obscure reason isn't saving r1...
>
> Is that a problem for you ? I think we should fix ppc_save_regs()
> anyway, it doesn't matter for xmon to save one more register and it will
> avoid nasty surprises in the long run.
AFAICS it saves r1:
PPC_STL r0,0*SZL(r3)
PPC_STL r2,2*SZL(r3)
PPC_STL r3,3*SZL(r3)
...
/* go up one stack frame for SP */
PPC_LL r4,0(r1)
PPC_STL r4,1*SZL(r3)
This fact is mentioned in the patch description:
NOTE: The old regs dump implementation was capturing SP (r1) directly
as is, so you could see crash_kexec() function on top of the back-trace.
But ppc_save_regs() goes up one stack frame, so you'll not see it
anymore, at the top-level you'll see who actually triggered the crash
dump instead.
Do you see anything wrong in such behaviour?
Thanks,
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs()
2009-01-07 4:04 ` Anton Vorontsov
@ 2009-01-07 5:11 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 14+ messages in thread
From: Benjamin Herrenschmidt @ 2009-01-07 5:11 UTC (permalink / raw)
To: avorontsov; +Cc: linuxppc-dev, Paul Mackerras, Milton Miller
On Wed, 2009-01-07 at 07:04 +0300, Anton Vorontsov wrote:
> AFAICS it saves r1:
>
> PPC_STL r0,0*SZL(r3)
> PPC_STL r2,2*SZL(r3)
> PPC_STL r3,3*SZL(r3)
> ...
> /* go up one stack frame for SP */
> PPC_LL r4,0(r1)
> PPC_STL r4,1*SZL(r3)
>
> This fact is mentioned in the patch description:
>
> NOTE: The old regs dump implementation was capturing SP (r1) directly
> as is, so you could see crash_kexec() function on top of the
> back-trace.
> But ppc_save_regs() goes up one stack frame, so you'll not see it
> anymore, at the top-level you'll see who actually triggered the crash
> dump instead.
>
> Do you see anything wrong in such behaviour?
No, just me being a bit blind looking at too many patches today :-)
Cheers,
Ben.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2009-01-07 5:12 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-17 20:06 [PATCH 0/7] Kdump support for classic PPC Anton Vorontsov
2008-12-17 20:08 ` [PATCH 1/7] powerpc: Prepare xmon_save_regs for use with kdump Anton Vorontsov
2008-12-17 20:13 ` Anton Vorontsov
2008-12-17 20:09 ` [PATCH 2/7] powerpc/32/kdump: Implement crash_setup_regs() using ppc_save_regs() Anton Vorontsov
2008-12-17 20:09 ` [PATCH 3/7] powerpc/32: Setup OF properties for kdump Anton Vorontsov
2008-12-21 1:44 ` Paul Mackerras
2008-12-21 3:29 ` Anton Vorontsov
2008-12-17 20:09 ` [PATCH 4/7] powerpc/32: Allow to ioremap RAM addresses for kdump kernel Anton Vorontsov
2008-12-17 20:09 ` [PATCH 5/7] powerpc/32: Add the ability for a classic ppc kernel to be loaded at 32M Anton Vorontsov
2008-12-17 20:09 ` [PATCH 6/7] powerpc/32: Wire up the trampoline code for kdump Anton Vorontsov
2008-12-17 20:09 ` [PATCH 7/7] powerpc/64/kdump: Use ppc_save_regs() in crash_setup_regs() Anton Vorontsov
2009-01-07 3:16 ` Benjamin Herrenschmidt
2009-01-07 4:04 ` Anton Vorontsov
2009-01-07 5:11 ` Benjamin Herrenschmidt
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).