WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] kexec for xen

# 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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] kexec for xen, Xen patchbot-unstable <=