[PATCH] powerpc: Kdump header cleanup
We need to know the base address of the kdump kernel even when we're not a kdump kernel, so add a #define for it. Move the logic that sets the kdump kernelbase into kdump.h instead of page.h. Rename kdump_setup() to setup_kdump_trampoline() to make it clearer what it's doing, and add an empty definition for the !CRASH_DUMP case to avoid a Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Родитель
2babf5c2ec
Коммит
473104134b
|
@ -25,6 +25,11 @@
|
||||||
#define DBG(fmt...)
|
#define DBG(fmt...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void reserve_kdump_trampoline(void)
|
||||||
|
{
|
||||||
|
lmb_reserve(0, KDUMP_RESERVE_LIMIT);
|
||||||
|
}
|
||||||
|
|
||||||
static void __init create_trampoline(unsigned long addr)
|
static void __init create_trampoline(unsigned long addr)
|
||||||
{
|
{
|
||||||
/* The maximum range of a single instruction branch, is the current
|
/* The maximum range of a single instruction branch, is the current
|
||||||
|
@ -39,11 +44,11 @@ static void __init create_trampoline(unsigned long addr)
|
||||||
create_branch(addr + 4, addr + PHYSICAL_START, 0);
|
create_branch(addr + 4, addr + PHYSICAL_START, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init kdump_setup(void)
|
void __init setup_kdump_trampoline(void)
|
||||||
{
|
{
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
|
|
||||||
DBG(" -> kdump_setup()\n");
|
DBG(" -> setup_kdump_trampoline()\n");
|
||||||
|
|
||||||
for (i = KDUMP_TRAMPOLINE_START; i < KDUMP_TRAMPOLINE_END; i += 8) {
|
for (i = KDUMP_TRAMPOLINE_START; i < KDUMP_TRAMPOLINE_END; i += 8) {
|
||||||
create_trampoline(i);
|
create_trampoline(i);
|
||||||
|
@ -52,7 +57,7 @@ void __init kdump_setup(void)
|
||||||
create_trampoline(__pa(system_reset_fwnmi) - PHYSICAL_START);
|
create_trampoline(__pa(system_reset_fwnmi) - PHYSICAL_START);
|
||||||
create_trampoline(__pa(machine_check_fwnmi) - PHYSICAL_START);
|
create_trampoline(__pa(machine_check_fwnmi) - PHYSICAL_START);
|
||||||
|
|
||||||
DBG(" <- kdump_setup()\n");
|
DBG(" <- setup_kdump_trampoline()\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_VMCORE
|
#ifdef CONFIG_PROC_VMCORE
|
||||||
|
|
|
@ -1326,9 +1326,7 @@ void __init early_init_devtree(void *params)
|
||||||
|
|
||||||
/* Reserve LMB regions used by kernel, initrd, dt, etc... */
|
/* Reserve LMB regions used by kernel, initrd, dt, etc... */
|
||||||
lmb_reserve(PHYSICAL_START, __pa(klimit) - PHYSICAL_START);
|
lmb_reserve(PHYSICAL_START, __pa(klimit) - PHYSICAL_START);
|
||||||
#ifdef CONFIG_CRASH_DUMP
|
reserve_kdump_trampoline();
|
||||||
lmb_reserve(0, KDUMP_RESERVE_LIMIT);
|
|
||||||
#endif
|
|
||||||
early_reserve_mem();
|
early_reserve_mem();
|
||||||
|
|
||||||
lmb_enforce_memory_limit(memory_limit);
|
lmb_enforce_memory_limit(memory_limit);
|
||||||
|
|
|
@ -193,9 +193,7 @@ void __init early_setup(unsigned long dt_ptr)
|
||||||
/* Probe the machine type */
|
/* Probe the machine type */
|
||||||
probe_machine();
|
probe_machine();
|
||||||
|
|
||||||
#ifdef CONFIG_CRASH_DUMP
|
setup_kdump_trampoline();
|
||||||
kdump_setup();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DBG("Found, Initializing memory management...\n");
|
DBG("Found, Initializing memory management...\n");
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,38 @@
|
||||||
#ifndef _PPC64_KDUMP_H
|
#ifndef _PPC64_KDUMP_H
|
||||||
#define _PPC64_KDUMP_H
|
#define _PPC64_KDUMP_H
|
||||||
|
|
||||||
|
/* Kdump kernel runs at 32 MB, change at your peril. */
|
||||||
|
#define KDUMP_KERNELBASE 0x2000000
|
||||||
|
|
||||||
/* How many bytes to reserve at zero for kdump. The reserve limit should
|
/* How many bytes to reserve at zero for kdump. The reserve limit should
|
||||||
* be greater or equal to the trampoline's end address. */
|
* be greater or equal to the trampoline's end address.
|
||||||
|
* Reserve to the end of the FWNMI area, see head_64.S */
|
||||||
#define KDUMP_RESERVE_LIMIT 0x8000
|
#define KDUMP_RESERVE_LIMIT 0x8000
|
||||||
|
|
||||||
|
#ifdef CONFIG_CRASH_DUMP
|
||||||
|
|
||||||
|
#define PHYSICAL_START KDUMP_KERNELBASE
|
||||||
#define KDUMP_TRAMPOLINE_START 0x0100
|
#define KDUMP_TRAMPOLINE_START 0x0100
|
||||||
#define KDUMP_TRAMPOLINE_END 0x3000
|
#define KDUMP_TRAMPOLINE_END 0x3000
|
||||||
|
|
||||||
extern void kdump_setup(void);
|
#else /* !CONFIG_CRASH_DUMP */
|
||||||
|
|
||||||
|
#define PHYSICAL_START 0x0
|
||||||
|
|
||||||
|
#endif /* CONFIG_CRASH_DUMP */
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
#ifdef CONFIG_CRASH_DUMP
|
||||||
|
|
||||||
|
extern void reserve_kdump_trampoline(void);
|
||||||
|
extern void setup_kdump_trampoline(void);
|
||||||
|
|
||||||
|
#else /* !CONFIG_CRASH_DUMP */
|
||||||
|
|
||||||
|
static inline void reserve_kdump_trampoline(void) { ; }
|
||||||
|
static inline void setup_kdump_trampoline(void) { ; }
|
||||||
|
|
||||||
|
#endif /* CONFIG_CRASH_DUMP */
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* __PPC64_KDUMP_H */
|
#endif /* __PPC64_KDUMP_H */
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#include <linux/config.h>
|
#include <linux/config.h>
|
||||||
#include <asm/asm-compat.h>
|
#include <asm/asm-compat.h>
|
||||||
|
#include <asm/kdump.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software
|
* On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software
|
||||||
|
@ -52,13 +53,6 @@
|
||||||
* If you want to test if something's a kernel address, use is_kernel_addr().
|
* If you want to test if something's a kernel address, use is_kernel_addr().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_CRASH_DUMP
|
|
||||||
/* Kdump kernel runs at 32 MB, change at your peril. */
|
|
||||||
#define PHYSICAL_START 0x2000000
|
|
||||||
#else
|
|
||||||
#define PHYSICAL_START 0x0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START)
|
#define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START)
|
||||||
#define KERNELBASE (PAGE_OFFSET + PHYSICAL_START)
|
#define KERNELBASE (PAGE_OFFSET + PHYSICAL_START)
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче