# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1190927293 21600
# Node ID 4108c2589fd1c48688e4f8cf522a8b4e660b4e63
# Parent ee498c9af856e8fc9d37d156a2123e1a26d83444
[IA64] kexec for xen
Basic port of kexec to xen
Signed-Off-By: Simon Horman <horms@xxxxxxxxxxxx>
---
xen/arch/ia64/asm-offsets.c | 2
xen/arch/ia64/linux-xen/efi.c | 63 ++++++++++
xen/arch/ia64/linux-xen/entry.S | 2
xen/arch/ia64/linux-xen/setup.c | 36 ++++++
xen/arch/ia64/vmx/vmx_vcpu.c | 2
xen/arch/ia64/xen/Makefile | 1
xen/arch/ia64/xen/crash.c | 31 ++++-
xen/arch/ia64/xen/machine_kexec.c | 83 +++++++++++++-
xen/arch/ia64/xen/relocate_kernel.S | 155 +++++++++++++++++++++++++++
xen/include/asm-ia64/elf.h | 15 ++
xen/include/asm-ia64/kexec.h | 15 ++
xen/include/asm-ia64/linux-xen/asm/machvec.h | 8 +
xen/include/asm-ia64/linux-xen/asm/meminit.h | 5
xen/include/asm-ia64/linux-xen/linux/efi.h | 4
xen/include/public/kexec.h | 3
15 files changed, 407 insertions(+), 18 deletions(-)
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/asm-offsets.c
--- a/xen/arch/ia64/asm-offsets.c Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/asm-offsets.c Thu Sep 27 15:08:13 2007 -0600
@@ -207,6 +207,8 @@ void foo(void)
BLANK();
DEFINE(IA64_CPUINFO_NSEC_PER_CYC_OFFSET, offsetof (struct cpuinfo_ia64,
nsec_per_cyc));
+ DEFINE(IA64_CPUINFO_PTCE_BASE_OFFSET, offsetof (struct cpuinfo_ia64,
ptce_base));
+ DEFINE(IA64_CPUINFO_PTCE_COUNT_OFFSET, offsetof (struct cpuinfo_ia64,
ptce_count));
DEFINE(IA64_TIMESPEC_TV_NSEC_OFFSET, offsetof (struct timespec,
tv_nsec));
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/linux-xen/efi.c
--- a/xen/arch/ia64/linux-xen/efi.c Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/linux-xen/efi.c Thu Sep 27 15:08:13 2007 -0600
@@ -333,8 +333,13 @@ efi_memmap_walk_uc (efi_freemem_callback
* Abstraction Layer chapter 11 in ADAG
*/
+#ifdef XEN
+static void *
+__efi_get_pal_addr (void)
+#else
void *
efi_get_pal_addr (void)
+#endif
{
void *efi_map_start, *efi_map_end, *p;
efi_memory_desc_t *md;
@@ -401,6 +406,14 @@ efi_get_pal_addr (void)
#ifdef XEN
void *pal_vaddr = 0;
+
+void *
+efi_get_pal_addr(void)
+{
+ if (!pal_vaddr)
+ pal_vaddr = __efi_get_pal_addr();
+ return pal_vaddr;
+}
#endif
void
@@ -408,9 +421,7 @@ efi_map_pal_code (void)
{
#ifdef XEN
u64 psr;
- if (!pal_vaddr) {
- pal_vaddr = efi_get_pal_addr ();
- }
+ (void)efi_get_pal_addr();
#else
void *pal_vaddr = efi_get_pal_addr ();
u64 psr;
@@ -1277,3 +1288,49 @@ vmcore_find_descriptor_size (unsigned lo
}
#endif
#endif /* XEN */
+
+#ifdef XEN
+/* find a block of memory aligned to 64M exclude reserved regions
+ * rsvd_regions are sorted
+ */
+unsigned long
+kdump_find_rsvd_region(unsigned long size, struct rsvd_region *r, int n)
+{
+ int i;
+ u64 start, end;
+ u64 alignment = 1UL << _PAGE_SIZE_64M;
+ void *efi_map_start, *efi_map_end, *p;
+ efi_memory_desc_t *md;
+ u64 efi_desc_size;
+
+ efi_map_start = __va(ia64_boot_param->efi_memmap);
+ efi_map_end = efi_map_start + ia64_boot_param->efi_memmap_size;
+ efi_desc_size = ia64_boot_param->efi_memdesc_size;
+
+ for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
+ md = p;
+ if (!efi_wb(md))
+ continue;
+ start = ALIGN(md->phys_addr, alignment);
+ end = efi_md_end(md);
+ for (i = 0; i < n; i++) {
+ if (__pa(r[i].start) >= start && __pa(r[i].end) < end) {
+ if (__pa(r[i].start) > start + size)
+ return start;
+ start = ALIGN(__pa(r[i].end), alignment);
+ if (i < n - 1
+ && __pa(r[i + 1].start) < start + size)
+ continue;
+ else
+ break;
+ }
+ }
+ if (end > start + size)
+ return start;
+ }
+
+ printk(KERN_WARNING
+ "Cannot reserve 0x%lx byte of memory for crashdump\n", size);
+ return ~0UL;
+}
+#endif
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/linux-xen/entry.S Thu Sep 27 15:08:13 2007 -0600
@@ -1522,7 +1522,7 @@ ia64_hypercall_table:
data8 do_hvm_op /* */
data8 do_sysctl /* */ /* 35 */
data8 do_domctl /* */
- data8 do_ni_hypercall /* */
+ data8 do_kexec_op /* */
data8 do_ni_hypercall /* */
data8 do_ni_hypercall /* */
data8 do_ni_hypercall /* */ /* 40 */
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/linux-xen/setup.c
--- a/xen/arch/ia64/linux-xen/setup.c Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/linux-xen/setup.c Thu Sep 27 15:08:13 2007 -0600
@@ -64,6 +64,9 @@
#ifdef XEN
#include <asm/vmx.h>
#include <asm/io.h>
+#include <asm/kexec.h>
+#include <public/kexec.h>
+#include <xen/kexec.h>
#endif
#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
@@ -252,6 +255,39 @@ reserve_memory (void)
efi_memmap_init(&rsvd_region[n].start, &rsvd_region[n].end);
n++;
+
+#ifdef XEN
+ /* crashkernel=size@offset specifies the size to reserve for a crash
+ * kernel. If offset is 0, then it is determined automatically.
+ * By reserving this memory we guarantee that linux never set's it
+ * up as a DMA target. Useful for holding code to do something
+ * appropriate after a kernel panic.
+ */
+ if (kexec_crash_area.size > 0) {
+ if (!kexec_crash_area.start) {
+ sort_regions(rsvd_region, n);
+ kexec_crash_area.start =
+ kdump_find_rsvd_region(kexec_crash_area.size,
+ rsvd_region, n);
+ }
+ if (kexec_crash_area.start != ~0UL) {
+ printk("Kdump: %luMB (%lukB) at 0x%lx\n",
+ kexec_crash_area.size >> 20,
+ kexec_crash_area.size >> 10,
+ kexec_crash_area.start);
+ rsvd_region[n].start =
+ (unsigned long)__va(kexec_crash_area.start);
+ rsvd_region[n].end =
+ (unsigned long)__va(kexec_crash_area.start +
+ kexec_crash_area.size);
+ n++;
+ }
+ else {
+ kexec_crash_area.size = 0;
+ kexec_crash_area.start = 0;
+ }
+ }
+#endif
/* end of memory marker */
rsvd_region[n].start = ~0UL;
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/vmx/vmx_vcpu.c
--- a/xen/arch/ia64/vmx/vmx_vcpu.c Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_vcpu.c Thu Sep 27 15:08:13 2007 -0600
@@ -42,6 +42,7 @@
#include <asm/hw_irq.h>
#include <asm/vmx_pal_vsa.h>
#include <asm/kregs.h>
+#include <linux/efi.h>
//unsigned long last_guest_rsm = 0x0;
#ifdef VTI_DEBUG
@@ -161,7 +162,6 @@ IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, u6
IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, u64 reg, u64 val)
{
ia64_rr oldrr,newrr;
- extern void * pal_vaddr;
u64 rrval;
vcpu_get_rr(vcpu, reg, &oldrr.rrval);
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/xen/Makefile
--- a/xen/arch/ia64/xen/Makefile Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/xen/Makefile Thu Sep 27 15:08:13 2007 -0600
@@ -1,5 +1,6 @@ subdir-y += oprofile
subdir-y += oprofile
+obj-y += relocate_kernel.o
obj-y += machine_kexec.o
obj-y += crash.o
obj-y += acpi.o
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/xen/crash.c
--- a/xen/arch/ia64/xen/crash.c Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/xen/crash.c Thu Sep 27 15:08:13 2007 -0600
@@ -1,10 +1,33 @@
-#include <xen/lib.h> /* for printk() used in stub */
-#include <xen/types.h>
-#include <public/kexec.h>
+/******************************************************************************
+ * crash.c
+ *
+ * Based heavily on arch/ia64/kernel/crash.c from Linux 2.6.20-rc1
+ *
+ * Xen port written by:
+ * - Simon 'Horms' Horman <horms@xxxxxxxxxxxx>
+ * - Magnus Damm <magnus@xxxxxxxxxxxxx>
+ */
+
+#include <xen/types.h> /* Should be included by xen/kexec.h ? */
+#include <linux/thread_info.h> /* Should be included by linux/preempt.h ? */
+
+#include <xen/kexec.h>
+#include <linux/hardirq.h>
+#include <linux/smp.h>
+#include <asm/processor.h>
void machine_crash_shutdown(void)
{
- printk("STUB: " __FILE__ ": %s: not implemented\n", __FUNCTION__);
+ //printk("machine_crash_shutdown: %d\n", smp_processor_id());
+ if (in_interrupt())
+ ia64_eoi();
+ kexec_crash_save_info();
+ printk(__FILE__ ": %s: save the eqivalent of x86's "
+ "dom0->shared_info->arch.pfn_to_mfn_frame_list_list?\n",
+ __FUNCTION__);
+#ifdef CONFIG_SMP
+ smp_send_stop();
+#endif
}
/*
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/xen/machine_kexec.c
--- a/xen/arch/ia64/xen/machine_kexec.c Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/arch/ia64/xen/machine_kexec.c Thu Sep 27 15:08:13 2007 -0600
@@ -1,26 +1,97 @@
-#include <xen/lib.h> /* for printk() used in stubs */
+/******************************************************************************
+ * machine_kexec.c
+ *
+ * Based on arch/ia64/kernel/machine_kexec.c from Linux 2.6.20-rc1
+ *
+ * Xen port written by:
+ * - Simon 'Horms' Horman <horms@xxxxxxxxxxxx>
+ * - Magnus Damm <magnus@xxxxxxxxxxxxx>
+ */
+
+#include <asm/smp.h>
+#include <xen/lib.h>
#include <xen/types.h>
+#include <xen/smp.h>
#include <public/kexec.h>
+#include <linux/efi.h>
+#include <asm/delay.h>
+#include <asm/meminit.h>
+#include <asm/hw_irq.h>
+#include <asm/kexec.h>
+
+typedef asmlinkage NORET_TYPE void (*relocate_new_kernel_t)(
+ unsigned long indirection_page,
+ unsigned long start_address,
+ struct ia64_boot_param *boot_param,
+ unsigned long pal_addr,
+ unsigned long cpu_data_pa,
+ unsigned long kernel_start,
+ unsigned long page_offset)
+ ATTRIB_NORET;
+
+#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)
int machine_kexec_load(int type, int slot, xen_kexec_image_t *image)
{
- printk("STUB: " __FILE__ ": %s: not implemented\n", __FUNCTION__);
- return -1;
+ return 0;
}
void machine_kexec_unload(int type, int slot, xen_kexec_image_t *image)
{
- printk("STUB: " __FILE__ ": %s: not implemented\n", __FUNCTION__);
+}
+
+static void ia64_machine_kexec(struct unw_frame_info *info, void *arg)
+{
+ xen_kexec_image_t *image = arg;
+ relocate_new_kernel_t rnk;
+ unsigned long code_addr = (unsigned long)
+ __va(image->reboot_code_buffer);
+ unsigned long cpu_data_pa = (unsigned long)
+ __pa(cpu_data(smp_processor_id()));
+ int ii;
+
+ /* Interrupts aren't acceptable while we reboot */
+ local_irq_disable();
+
+ /* Mask CMC and Performance Monitor interrupts */
+ ia64_setreg(_IA64_REG_CR_PMV, 1 << 16);
+ ia64_setreg(_IA64_REG_CR_CMCV, 1 << 16);
+
+ /* Mask ITV and Local Redirect Registers */
+ ia64_set_itv(1 << 16);
+ ia64_set_lrr0(1 << 16);
+ ia64_set_lrr1(1 << 16);
+
+ /* terminate possible nested in-service interrupts */
+ for (ii = 0; ii < 16; ii++)
+ ia64_eoi();
+
+ /* unmask TPR and clear any pending interrupts */
+ ia64_setreg(_IA64_REG_CR_TPR, 0);
+ ia64_srlz_d();
+ while (ia64_get_ivr() != IA64_SPURIOUS_INT_VECTOR)
+ ia64_eoi();
+ platform_kernel_launch_event();
+ rnk = (relocate_new_kernel_t)&code_addr;
+ (*rnk)(image->indirection_page, image->start_address, ia64_boot_param,
+ GRANULEROUNDDOWN((unsigned long) pal_vaddr), cpu_data_pa,
+ KERNEL_START, PAGE_OFFSET);
+ BUG();
}
void machine_kexec(xen_kexec_image_t *image)
{
- printk("STUB: " __FILE__ ": %s: not implemented\n", __FUNCTION__);
+ unw_init_running(ia64_machine_kexec, image);
+ for(;;);
}
void machine_reboot_kexec(xen_kexec_image_t *image)
{
- printk("STUB: " __FILE__ ": %s: not implemented\n", __FUNCTION__);
+ machine_kexec(image);
}
/*
diff -r ee498c9af856 -r 4108c2589fd1 xen/arch/ia64/xen/relocate_kernel.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/ia64/xen/relocate_kernel.S Thu Sep 27 15:08:13 2007 -0600
@@ -0,0 +1,155 @@
+/*
+ * arch/ia64/kernel/relocate_kernel.S
+ *
+ * Relocate kexec'able kernel and start it
+ *
+ * Copyright (C) 2005 Hewlett-Packard Development Company, L.P.
+ * Copyright (C) 2005 Khalid Aziz <khalid.aziz@xxxxxx>
+ * Copyright (C) 2005 Intel Corp, Zou Nan hai <nanhai.zou@xxxxxxxxx>
+ *
+ * This source code is licensed under the GNU General Public License,
+ * Version 2. See the file COPYING for more details.
+ */
+#include <asm/asmmacro.h>
+#include <asm/kregs.h>
+#include <asm/page.h>
+#include <asm/pgtable.h>
+#include <asm/mca_asm.h>
+
+GLOBAL_ENTRY(ia64_dump_cpu_regs)
+ .prologue
+ alloc loc0=ar.pfs,1,2,0,0
+ .body
+ mov ar.rsc=0 // put RSE in enforced lazy mode
+ add loc1=4*8, in0 // save r4 and r5 first
+ ;;
+{
+ flushrs // flush dirty regs to backing store
+ srlz.i
+}
+ st8 [loc1]=r4, 8
+ ;;
+ st8 [loc1]=r5, 8
+ ;;
+ add loc1=32*8, in0
+ mov r4=ar.rnat
+ ;;
+ st8 [in0]=r0, 8 // r0
+ st8 [loc1]=r4, 8 // rnat
+ mov r5=pr
+ ;;
+ st8 [in0]=r1, 8 // r1
+ st8 [loc1]=r5, 8 // pr
+ mov r4=b0
+ ;;
+ st8 [in0]=r2, 8 // r2
+ st8 [loc1]=r4, 8 // b0
+ mov r5=b1;
+ ;;
+ st8 [in0]=r3, 24 // r3
+ st8 [loc1]=r5, 8 // b1
+ mov r4=b2
+ ;;
+ st8 [in0]=r6, 8 // r6
+ st8 [loc1]=r4, 8 // b2
+ mov r5=b3
+ ;;
+ st8 [in0]=r7, 8 // r7
+ st8 [loc1]=r5, 8 // b3
+ mov r4=b4
+ ;;
+ st8 [in0]=r8, 8 // r8
+ st8 [loc1]=r4, 8 // b4
+ mov r5=b5
+ ;;
+ st8 [in0]=r9, 8 // r9
+ st8 [loc1]=r5, 8 // b5
+ mov r4=b6
+ ;;
+ st8 [in0]=r10, 8 // r10
+ st8 [loc1]=r5, 8 // b6
+ mov r5=b7
+ ;;
+ st8 [in0]=r11, 8 // r11
+ st8 [loc1]=r5, 8 // b7
+ mov r4=b0
+ ;;
+ st8 [in0]=r12, 8 // r12
+ st8 [loc1]=r4, 8 // ip
+ mov r5=loc0
+ ;;
+ st8 [in0]=r13, 8 // r13
+ extr.u r5=r5, 0, 38 // ar.pfs.pfm
+ mov r4=r0 // user mask
+ ;;
+ st8 [in0]=r14, 8 // r14
+ st8 [loc1]=r5, 8 // cfm
+ ;;
+ st8 [in0]=r15, 8 // r15
+ st8 [loc1]=r4, 8 // user mask
+ mov r5=ar.rsc
+ ;;
+ st8 [in0]=r16, 8 // r16
+ st8 [loc1]=r5, 8 // ar.rsc
+ mov r4=ar.bsp
+ ;;
+ st8 [in0]=r17, 8 // r17
+ st8 [loc1]=r4, 8 // ar.bsp
+ mov r5=ar.bspstore
+ ;;
+ st8 [in0]=r18, 8 // r18
+ st8 [loc1]=r5, 8 // ar.bspstore
+ mov r4=ar.rnat
+ ;;
+ st8 [in0]=r19, 8 // r19
+ st8 [loc1]=r4, 8 // ar.rnat
+ mov r5=ar.ccv
+ ;;
+ st8 [in0]=r20, 8 // r20
+ st8 [loc1]=r5, 8 // ar.ccv
+ mov r4=ar.unat
+ ;;
+ st8 [in0]=r21, 8 // r21
+ st8 [loc1]=r4, 8 // ar.unat
+ mov r5 = ar.fpsr
+ ;;
+ st8 [in0]=r22, 8 // r22
+ st8 [loc1]=r5, 8 // ar.fpsr
+ mov r4 = ar.unat
+ ;;
+ st8 [in0]=r23, 8 // r23
+ st8 [loc1]=r4, 8 // unat
+ mov r5 = ar.fpsr
+ ;;
+ st8 [in0]=r24, 8 // r24
+ st8 [loc1]=r5, 8 // fpsr
+ mov r4 = ar.pfs
+ ;;
+ st8 [in0]=r25, 8 // r25
+ st8 [loc1]=r4, 8 // ar.pfs
+ mov r5 = ar.lc
+ ;;
+ st8 [in0]=r26, 8 // r26
+ st8 [loc1]=r5, 8 // ar.lc
+ mov r4 = ar.ec
+ ;;
+ st8 [in0]=r27, 8 // r27
+ st8 [loc1]=r4, 8 // ar.ec
+ mov r5 = ar.csd
+ ;;
+ st8 [in0]=r28, 8 // r28
+ st8 [loc1]=r5, 8 // ar.csd
+ mov r4 = ar.ssd
+ ;;
+ st8 [in0]=r29, 8 // r29
+ st8 [loc1]=r4, 8 // ar.ssd
+ ;;
+ st8 [in0]=r30, 8 // r30
+ ;;
+ st8 [in0]=r31, 8 // r31
+ mov ar.pfs=loc0
+ ;;
+ br.ret.sptk.many rp
+END(ia64_dump_cpu_regs)
+
+
diff -r ee498c9af856 -r 4108c2589fd1 xen/include/asm-ia64/elf.h
--- a/xen/include/asm-ia64/elf.h Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/include/asm-ia64/elf.h Thu Sep 27 15:08:13 2007 -0600
@@ -4,7 +4,20 @@
#include <xen/lib.h> /* for printk() used in stub */
typedef struct {
- unsigned long dummy;
+ unsigned long r1;
+ unsigned long r2;
+ unsigned long r13;
+ unsigned long cr_iip;
+ unsigned long ar_rsc;
+ unsigned long r30;
+ unsigned long ar_bspstore;
+ unsigned long ar_rnat;
+ unsigned long ar_ccv;
+ unsigned long ar_unat;
+ unsigned long ar_pfs;
+ unsigned long r31;
+ unsigned long ar_csd;
+ unsigned long ar_ssd;
} ELF_Gregset;
typedef struct {
diff -r ee498c9af856 -r 4108c2589fd1 xen/include/asm-ia64/kexec.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/include/asm-ia64/kexec.h Thu Sep 27 15:08:13 2007 -0600
@@ -0,0 +1,15 @@
+#ifndef __IA64_KEXEC_H__
+#define __IA64_KEXEC_H__
+
+#include <xen/types.h>
+#include <xen/kexec.h>
+
+extern const unsigned int relocate_new_kernel_size;
+extern void relocate_new_kernel(unsigned long, unsigned long,
+ struct ia64_boot_param *, unsigned long);
+void crash_save_xen_notes(void);
+void machine_kexec(xen_kexec_image_t *image);
+unsigned long kdump_find_rsvd_region(unsigned long size,
+ struct rsvd_region *rsvd_regions, int n);
+
+#endif /* __IA64_KEXEC_H__ */
diff -r ee498c9af856 -r 4108c2589fd1
xen/include/asm-ia64/linux-xen/asm/machvec.h
--- a/xen/include/asm-ia64/linux-xen/asm/machvec.h Thu Sep 27 12:22:16
2007 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/machvec.h Thu Sep 27 15:08:13
2007 -0600
@@ -34,6 +34,7 @@ typedef int ia64_mv_pci_legacy_read_t (s
u8 size);
typedef int ia64_mv_pci_legacy_write_t (struct pci_bus *, u16 port, u32 val,
u8 size);
+typedef void ia64_mv_kernel_launch_event_t(void);
/* DMA-mapping interface: */
typedef void ia64_mv_dma_init (void);
@@ -263,6 +264,7 @@ extern void machvec_tlb_migrate_finish (
# define platform_readw_relaxed ia64_mv.readw_relaxed
# define platform_readl_relaxed ia64_mv.readl_relaxed
# define platform_readq_relaxed ia64_mv.readq_relaxed
+# define platform_kernel_launch_event ia64_mv.kernel_launch_event
#ifdef XEN
# define platform_fw_init ia64_mv.fw_init
#endif
@@ -314,6 +316,7 @@ struct ia64_machine_vector {
ia64_mv_readw_relaxed_t *readw_relaxed;
ia64_mv_readl_relaxed_t *readl_relaxed;
ia64_mv_readq_relaxed_t *readq_relaxed;
+ ia64_mv_kernel_launch_event_t *kernel_launch_event;
#ifdef XEN
ia64_mv_fw_init_t *fw_init;
#endif
@@ -362,6 +365,7 @@ struct ia64_machine_vector {
platform_readw_relaxed, \
platform_readl_relaxed, \
platform_readq_relaxed, \
+ platform_kernel_launch_event, \
platform_fw_init, \
}
#else
@@ -407,6 +411,7 @@ struct ia64_machine_vector {
platform_readw_relaxed, \
platform_readl_relaxed, \
platform_readq_relaxed, \
+ platform_kernel_launch_event \
}
#endif
@@ -460,6 +465,9 @@ extern ia64_mv_dma_supported swiotlb_dm
#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
diff -r ee498c9af856 -r 4108c2589fd1
xen/include/asm-ia64/linux-xen/asm/meminit.h
--- a/xen/include/asm-ia64/linux-xen/asm/meminit.h Thu Sep 27 12:22:16
2007 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/meminit.h Thu Sep 27 15:08:13
2007 -0600
@@ -23,13 +23,14 @@
* - initrd (optional)
#endif
* - Kernel memory map built from EFI memory map
+ * - Crash kernel for kdump
*
* More could be added if necessary
*/
#ifndef XEN
-#define IA64_MAX_RSVD_REGIONS 6
+#define IA64_MAX_RSVD_REGIONS 7
#else
-#define IA64_MAX_RSVD_REGIONS 7
+#define IA64_MAX_RSVD_REGIONS 8
#endif
struct rsvd_region {
diff -r ee498c9af856 -r 4108c2589fd1 xen/include/asm-ia64/linux-xen/linux/efi.h
--- a/xen/include/asm-ia64/linux-xen/linux/efi.h Thu Sep 27 12:22:16
2007 -0600
+++ b/xen/include/asm-ia64/linux-xen/linux/efi.h Thu Sep 27 15:08:13
2007 -0600
@@ -21,6 +21,10 @@
#include <asm/page.h>
#include <asm/system.h>
+
+#ifdef XEN
+extern void * pal_vaddr;
+#endif
#define EFI_SUCCESS 0
#define EFI_LOAD_ERROR ( 1 | (1UL << (BITS_PER_LONG-1)))
diff -r ee498c9af856 -r 4108c2589fd1 xen/include/public/kexec.h
--- a/xen/include/public/kexec.h Thu Sep 27 12:22:16 2007 -0600
+++ b/xen/include/public/kexec.h Thu Sep 27 15:08:13 2007 -0600
@@ -78,6 +78,9 @@ typedef struct xen_kexec_image {
typedef struct xen_kexec_image {
#if defined(__i386__) || defined(__x86_64__)
unsigned long page_list[KEXEC_XEN_NO_PAGES];
+#endif
+#if defined(__ia64__)
+ unsigned long reboot_code_buffer;
#endif
unsigned long indirection_page;
unsigned long start_address;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|