[IA64] IA64 Kexec/kdump
Changes and updates. 1. Remove fake rendz path and related code according to discuss with Khalid Aziz. 2. fc.i offset fix in relocate_kernel.S. 3. iospic shutdown code eoi and mask race fix from Fujitsu. 4. Warm boot hook in machine_kexec to SN SAL code from Jack Steiner. 5. Send slave to SAL slave loop patch from Jay Lan. 6. Kdump on non-recoverable MCA event patch from Jay Lan 7. Use CTL_UNNUMBERED in kdump_on_init sysctl. Signed-off-by: Zou Nan hai <nanhai.zou@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
#ifndef _ASM_IA64_KEXEC_H
|
||||
#define _ASM_IA64_KEXEC_H
|
||||
|
||||
|
||||
/* Maximum physical address we can use pages from */
|
||||
#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
|
||||
/* Maximum address we can reach in physical address mode */
|
||||
#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
|
||||
/* Maximum address we can use for the control code buffer */
|
||||
#define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE
|
||||
|
||||
#define KEXEC_CONTROL_CODE_SIZE (8192 + 8192 + 4096)
|
||||
|
||||
/* The native architecture */
|
||||
#define KEXEC_ARCH KEXEC_ARCH_IA_64
|
||||
|
||||
#define MAX_NOTE_BYTES 1024
|
||||
|
||||
#define kexec_flush_icache_page(page) do { \
|
||||
unsigned long page_addr = (unsigned long)page_address(page); \
|
||||
flush_icache_range(page_addr, page_addr + PAGE_SIZE); \
|
||||
} while(0)
|
||||
|
||||
extern struct kimage *ia64_kimage;
|
||||
DECLARE_PER_CPU(u64, ia64_mca_pal_base);
|
||||
const extern unsigned int relocate_new_kernel_size;
|
||||
extern void relocate_new_kernel(unsigned long, unsigned long,
|
||||
struct ia64_boot_param *, unsigned long);
|
||||
static inline void
|
||||
crash_setup_regs(struct pt_regs *newregs, struct pt_regs *oldregs)
|
||||
{
|
||||
}
|
||||
extern struct resource efi_memmap_res;
|
||||
extern struct resource boot_param_res;
|
||||
extern void kdump_smp_send_stop(void);
|
||||
extern void kdump_smp_send_init(void);
|
||||
extern void kexec_disable_iosapic(void);
|
||||
extern void crash_save_this_cpu(void);
|
||||
struct rsvd_region;
|
||||
extern unsigned long kdump_find_rsvd_region(unsigned long size,
|
||||
struct rsvd_region *rsvd_regions, int n);
|
||||
extern void kdump_cpu_freeze(struct unw_frame_info *info, void *arg);
|
||||
extern int kdump_status[];
|
||||
extern atomic_t kdump_cpu_freezed;
|
||||
extern atomic_t kdump_in_progress;
|
||||
|
||||
#endif /* _ASM_IA64_KEXEC_H */
|
||||
@@ -37,6 +37,7 @@ typedef int ia64_mv_pci_legacy_write_t (struct pci_bus *, u16 port, u32 val,
|
||||
u8 size);
|
||||
typedef void ia64_mv_migrate_t(struct task_struct * task);
|
||||
typedef void ia64_mv_pci_fixup_bus_t (struct pci_bus *);
|
||||
typedef void ia64_mv_kernel_launch_event_t(void);
|
||||
|
||||
/* DMA-mapping interface: */
|
||||
typedef void ia64_mv_dma_init (void);
|
||||
@@ -218,6 +219,7 @@ struct ia64_machine_vector {
|
||||
ia64_mv_setup_msi_irq_t *setup_msi_irq;
|
||||
ia64_mv_teardown_msi_irq_t *teardown_msi_irq;
|
||||
ia64_mv_pci_fixup_bus_t *pci_fixup_bus;
|
||||
ia64_mv_kernel_launch_event_t *kernel_launch_event;
|
||||
} __attribute__((__aligned__(16))); /* align attrib? see above comment */
|
||||
|
||||
#define MACHVEC_INIT(name) \
|
||||
@@ -318,6 +320,9 @@ extern ia64_mv_dma_supported swiotlb_dma_supported;
|
||||
#ifndef platform_tlb_migrate_finish
|
||||
# define platform_tlb_migrate_finish machvec_noop_mm
|
||||
#endif
|
||||
#ifndef platform_kernel_launch_event
|
||||
# define platform_kernel_launch_event machvec_noop
|
||||
#endif
|
||||
#ifndef platform_dma_init
|
||||
# define platform_dma_init swiotlb_init
|
||||
#endif
|
||||
|
||||
@@ -67,6 +67,7 @@ extern ia64_mv_dma_sync_sg_for_device sn_dma_sync_sg_for_device;
|
||||
extern ia64_mv_dma_mapping_error sn_dma_mapping_error;
|
||||
extern ia64_mv_dma_supported sn_dma_supported;
|
||||
extern ia64_mv_migrate_t sn_migrate;
|
||||
extern ia64_mv_kernel_launch_event_t sn_kernel_launch_event;
|
||||
extern ia64_mv_setup_msi_irq_t sn_setup_msi_irq;
|
||||
extern ia64_mv_teardown_msi_irq_t sn_teardown_msi_irq;
|
||||
extern ia64_mv_pci_fixup_bus_t sn_pci_fixup_bus;
|
||||
@@ -121,6 +122,7 @@ extern ia64_mv_pci_fixup_bus_t sn_pci_fixup_bus;
|
||||
#define platform_dma_mapping_error sn_dma_mapping_error
|
||||
#define platform_dma_supported sn_dma_supported
|
||||
#define platform_migrate sn_migrate
|
||||
#define platform_kernel_launch_event sn_kernel_launch_event
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
#define platform_setup_msi_irq sn_setup_msi_irq
|
||||
#define platform_teardown_msi_irq sn_teardown_msi_irq
|
||||
|
||||
@@ -15,11 +15,12 @@
|
||||
* - initrd (optional)
|
||||
* - command line string
|
||||
* - kernel code & data
|
||||
* - crash dumping code reserved region
|
||||
* - Kernel memory map built from EFI memory map
|
||||
*
|
||||
* More could be added if necessary
|
||||
*/
|
||||
#define IA64_MAX_RSVD_REGIONS 6
|
||||
#define IA64_MAX_RSVD_REGIONS 7
|
||||
|
||||
struct rsvd_region {
|
||||
unsigned long start; /* virtual address of beginning of element */
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
#define SN_SAL_INJECT_ERROR 0x02000067
|
||||
#define SN_SAL_SET_CPU_NUMBER 0x02000068
|
||||
|
||||
#define SN_SAL_KERNEL_LAUNCH_EVENT 0x02000069
|
||||
|
||||
/*
|
||||
* Service-specific constants
|
||||
*/
|
||||
@@ -1155,4 +1157,11 @@ ia64_sn_set_cpu_number(int cpu)
|
||||
SAL_CALL_NOLOCK(rv, SN_SAL_SET_CPU_NUMBER, cpu, 0, 0, 0, 0, 0, 0);
|
||||
return rv.status;
|
||||
}
|
||||
static inline int
|
||||
ia64_sn_kernel_launch_event(void)
|
||||
{
|
||||
struct ia64_sal_retval rv;
|
||||
SAL_CALL_NOLOCK(rv, SN_SAL_KERNEL_LAUNCH_EVENT, 0, 0, 0, 0, 0, 0, 0);
|
||||
return rv.status;
|
||||
}
|
||||
#endif /* _ASM_IA64_SN_SN_SAL_H */
|
||||
|
||||
@@ -108,6 +108,10 @@ int kexec_should_crash(struct task_struct *);
|
||||
extern struct kimage *kexec_image;
|
||||
extern struct kimage *kexec_crash_image;
|
||||
|
||||
#ifndef kexec_flush_icache_page
|
||||
#define kexec_flush_icache_page(page)
|
||||
#endif
|
||||
|
||||
#define KEXEC_ON_CRASH 0x00000001
|
||||
#define KEXEC_ARCH_MASK 0xffff0000
|
||||
|
||||
@@ -133,6 +137,7 @@ extern struct resource crashk_res;
|
||||
typedef u32 note_buf_t[MAX_NOTE_BYTES/4];
|
||||
extern note_buf_t *crash_notes;
|
||||
|
||||
|
||||
#else /* !CONFIG_KEXEC */
|
||||
struct pt_regs;
|
||||
struct task_struct;
|
||||
|
||||
Reference in New Issue
Block a user