[
  [
    "linux-2.6.23/arch/sh/kernel/machine_kexec.c.org", 
    "linux-2.6.23/arch/sh/kernel/machine_kexec.c", 
    [
      "--- linux-2.6.23/arch/sh/kernel/machine_kexec.c.org", 
      "+++ linux-2.6.23/arch/sh/kernel/machine_kexec.c", 
      "@@ -19,6 +19,11 @@", 
      "#include <asm/io.h>", 
      "#include <asm/cacheflush.h>", 
      "", 
      "+/* #define PARSE_PAGE_LIST */", 
      "+#ifdef PARSE_PAGE_LIST", 
      "+  #include <asm/addrspace.h>", 
      "+#endif", 
      "+", 
      "typedef NORET_TYPE void (*relocate_new_kernel_t)(", 
      "unsigned long indirection_page,", 
      "unsigned long reboot_code_buffer,", 
      "@@ -99,6 +104,47 @@", 
      "kexec_info(image);", 
      "flush_cache_all();", 
      "", 
      "+#ifdef PARSE_PAGE_LIST", 
      "+\t{", 
      "+\t\tunsigned long dst;", 
      "+\t\tunsigned long* ind = &page_list;", 
      "+\t\tunsigned long cmd = *ind;", 
      "+", 
      "+\t\tunsigned long segment = 0;", 
      "+\t\tunsigned long sum = 0;", 
      "+\t\tunsigned long length = 0;", 
      "+", 
      "+\t\twhile (1) {", 
      "+#ifndef CONFIG_CPU_SUBTYPE_STX7105", 
      "+\t\t\tunsigned long addr = (cmd | 0xa0000000) & 0xfffffff0;", 
      "+#else", 
      "+\t\t\tunsigned long addr = P1SEGADDR(cmd) & 0xfffffff0;", 
      "+#endif", 
      "+\t\t\tif (cmd & IND_DESTINATION) {", 
      "+\t\t\t\tdst = addr;", 
      "+\t\t\t\t++segment;", 
      "+\t\t\t\tprintk(\"Segment %d located at 0x%x\\n\",", 
      "+\t\t\t\t       segment, dst);", 
      "+\t\t\t}", 
      "+\t\t\telse if (cmd & IND_INDIRECTION) {", 
      "+\t\t\t\tind = (unsigned long*)addr;", 
      "+\t\t\t\tprintk(\"New indirection address found: 0x%x\\n\",", 
      "+\t\t\t\t       *ind);", 
      "+\t\t\t}", 
      "+\t\t\telse if (cmd & IND_DONE) {", 
      "+\t\t\t\tprintk(\"Done.\\n\");", 
      "+\t\t\t\tbreak;", 
      "+\t\t\t}", 
      "+\t\t\telse if (cmd & IND_SOURCE) {", 
      "+\t\t\t\tprintk(\"Copying 4096 bytes from 0x%x to 0x%x...\\n\",", 
      "+\t\t\t\t       addr, dst);", 
      "+\t\t\t\tdst += 4096;", 
      "+\t\t\t}", 
      "+\t\t\tcmd = *ind++;", 
      "+\t\t}", 
      "+\t}", 
      "+#endif", 
      "+", 
      "/* now call it */", 
      "rnk = (relocate_new_kernel_t) reboot_code_buffer;", 
      "(*rnk)(page_list, reboot_code_buffer, image->start, vbr_reg);"
    ]
  ], 
  [
    "linux-2.6.23/kernel/kexec.c.org", 
    "linux-2.6.23/kernel/kexec.c", 
    [
      "--- linux-2.6.23/kernel/kexec.c.org", 
      "+++ linux-2.6.23/kernel/kexec.c", 
      "@@ -28,6 +28,7 @@", 
      "#include <asm/io.h>", 
      "#include <asm/system.h>", 
      "#include <asm/semaphore.h>", 
      "+#include <asm/addrspace.h>", 
      "", 
      "/* Per cpu memory for storing cpu states in case of system crash. */", 
      "note_buf_t* crash_notes;", 
      "@@ -323,6 +324,19 @@", 
      "unsigned long mstart, mend;", 
      "", 
      "mstart = image->segment[i].mem;", 
      "+#ifndef CONFIG_CPU_SUBTYPE_STX7105", 
      "+\t\tif (((mstart >= 0x90000000) &&", 
      "+\t\t     (mstart < 0xA0000000)) ||", 
      "+\t\t    (mstart >= 0xB0000000)) {", 
      "+\t\t\t/* Ignore segments that will not be located in RAM */", 
      "+\t\t\tcontinue;", 
      "+\t\t}", 
      "+\t\tmstart &= 0x0FFFFFFF;", 
      "+#else", 
      "+\t\t/* Converting the physical address to the PMB mapped address */", 
      "+\t\tstart = P1SEGADDR(start);", 
      "+\t\tend = P1SEGADDR(end);", 
      "+#endif", 
      "mend = mstart + image->segment[i].memsz;", 
      "if ((end > mstart) && (start < mend))", 
      "return 1;", 
      "@@ -1059,9 +1073,7 @@", 
      "locked = xchg(&kexec_lock, 1);", 
      "if (!locked) {", 
      "if (kexec_crash_image) {", 
      "-\t\t\tstruct pt_regs fixed_regs;", 
      "-\t\t\tcrash_setup_regs(&fixed_regs, regs);", 
      "-\t\t\tmachine_crash_shutdown(&fixed_regs);", 
      "+\t\t\tmachine_crash_shutdown(regs);", 
      "machine_kexec(kexec_crash_image);", 
      "}", 
      "locked = xchg(&kexec_lock, 0);"
    ]
  ], 
  [
    "linux-2.6.23/arch/sh/kernel/relocate_kernel.S.org", 
    "linux-2.6.23/arch/sh/kernel/relocate_kernel.S", 
    [
      "--- linux-2.6.23/arch/sh/kernel/relocate_kernel.S.org", 
      "+++ linux-2.6.23/arch/sh/kernel/relocate_kernel.S", 
      "@@ -19,7 +19,12 @@", 
      "/* r7 = vbr_reg            */", 
      "", 
      "mov.l\t10f,r8\t  /* PAGE_SIZE */", 
      "+#ifndef CONFIG_CPU_SUBTYPE_STX7105", 
      "mov.l\t11f,r9    /* P2SEG */", 
      "+#else", 
      "+\tmov.l\t11f,r9    /* P1SEG */", 
      "+\tmov.l\t12f,r10   /* mask: 0x1fffffff */", 
      "+#endif", 
      "", 
      "/*  stack setting */", 
      "add\tr8,r5", 
      "@@ -30,9 +35,16 @@", 
      "0:", 
      "mov.l\t@r4+,r0\t  /* cmd = *ind++ */", 
      "", 
      "-1:\t/* addr = (cmd | P2SEG) & 0xfffffff0 */", 
      "+1:", 
      "mov\tr0,r2", 
      "+#ifndef CONFIG_CPU_SUBTYPE_STX7105", 
      "+\t/* addr = (cmd | P2SEG) & 0xfffffff0 */", 
      "or\tr9,r2", 
      "+#else", 
      "+\t/* addr = ((cmd & 0x1fffffff) | P1SEG) & 0xfffffff0 */", 
      "+\tand\tr10,r2", 
      "+\tor\tr9,r2", 
      "+#endif", 
      "mov\t#-16,r1", 
      "and\tr1,r2", 
      "", 
      "@@ -90,7 +102,12 @@", 
      "10:", 
      ".long\tPAGE_SIZE", 
      "11:", 
      "+#ifndef CONFIG_CPU_SUBTYPE_STX7105", 
      ".long\tP2SEG", 
      "+#else", 
      "+\t.long\tP1SEG", 
      "+12:\t.long\t0x1fffffff", 
      "+#endif", 
      "", 
      "relocate_new_kernel_end:", 
      ""
    ]
  ]
]