This commit is contained in:
parent
4a6b3379fb
commit
f9fefedce7
@ -1,18 +0,0 @@
|
|||||||
---
|
|
||||||
kexec/arch/ppc64/fs2dt.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: kexec/arch/ppc64/fs2dt.c
|
|
||||||
===================================================================
|
|
||||||
--- kexec/arch/ppc64/fs2dt.c.orig
|
|
||||||
+++ kexec/arch/ppc64/fs2dt.c
|
|
||||||
@@ -40,7 +40,8 @@
|
|
||||||
|
|
||||||
static char pathname[MAXPATH], *pathstart;
|
|
||||||
static char propnames[NAMESPACE] = { 0 };
|
|
||||||
-static unsigned dtstruct[TREEWORDS], *dt;
|
|
||||||
+static unsigned dtstruct[TREEWORDS] __attribute((aligned(8)));
|
|
||||||
+static unsigned *dt;
|
|
||||||
static unsigned long long mem_rsrv[2*MEMRESERVE] = { 0, 0 };
|
|
||||||
|
|
||||||
static int crash_param = 0;
|
|
@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
kexec/arch/ppc64/fs2dt.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
Index: kexec/arch/ppc64/fs2dt.c
|
|
||||||
===================================================================
|
|
||||||
--- kexec/arch/ppc64/fs2dt.c.orig
|
|
||||||
+++ kexec/arch/ppc64/fs2dt.c
|
|
||||||
@@ -270,6 +270,8 @@ static void putprops(char *fn, struct di
|
|
||||||
strcat(local_cmdline, " ");
|
|
||||||
cmd_len = strlen(local_cmdline);
|
|
||||||
cmd_len = cmd_len + 1;
|
|
||||||
+ if ((cmd_len >= 8) && ((unsigned long)dt & 0x4))
|
|
||||||
+ dt++;
|
|
||||||
memcpy(dt, local_cmdline,cmd_len);
|
|
||||||
len = cmd_len;
|
|
||||||
*dt_len = cmd_len;
|
|
@ -1,51 +0,0 @@
|
|||||||
---
|
|
||||||
kexec/arch/ppc64/kexec-ppc64.c | 20 +++++++++++++++++++-
|
|
||||||
1 file changed, 19 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: kexec/arch/ppc64/kexec-ppc64.c
|
|
||||||
===================================================================
|
|
||||||
--- kexec/arch/ppc64/kexec-ppc64.c.orig
|
|
||||||
+++ kexec/arch/ppc64/kexec-ppc64.c
|
|
||||||
@@ -28,6 +28,7 @@
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <getopt.h>
|
|
||||||
+#include <fcntl.h>
|
|
||||||
#include <sys/utsname.h>
|
|
||||||
#include "../../kexec.h"
|
|
||||||
#include "../../kexec-syscall.h"
|
|
||||||
@@ -260,6 +261,20 @@ static int get_devtree_details(unsigned
|
|
||||||
FILE *file;
|
|
||||||
struct dirent *dentry;
|
|
||||||
int n, i = 0;
|
|
||||||
+ int PS3 = 0;
|
|
||||||
+
|
|
||||||
+ snprintf(fname, sizeof(fname), "%s/model", device_tree);
|
|
||||||
+ i = open(fname, O_RDONLY);
|
|
||||||
+ if (i >= 0) {
|
|
||||||
+ n = read(i, fname, sizeof(fname) - 1);
|
|
||||||
+ if (n > 0) {
|
|
||||||
+ fname[n] = '\0';
|
|
||||||
+ fprintf(stderr, "model '%s'\n", fname);
|
|
||||||
+ PS3 = strcmp("PLAYSTATION 3", fname) == 0;
|
|
||||||
+ }
|
|
||||||
+ close(i);
|
|
||||||
+ }
|
|
||||||
+ i = 0;
|
|
||||||
|
|
||||||
if ((dir = opendir(device_tree)) == NULL) {
|
|
||||||
perror(device_tree);
|
|
||||||
@@ -454,9 +469,12 @@ static int get_devtree_details(unsigned
|
|
||||||
}
|
|
||||||
rmo_base = ((unsigned long long *)buf)[0];
|
|
||||||
rmo_top = rmo_base + ((unsigned long long *)buf)[1];
|
|
||||||
+ fprintf(stderr, "rmo_top 0x%08x\n", rmo_top);
|
|
||||||
+ if (rmo_top > 0x07C00000UL && PS3)
|
|
||||||
+ rmo_top = 0x07C00000UL;
|
|
||||||
if (rmo_top > 0x30000000UL)
|
|
||||||
rmo_top = 0x30000000UL;
|
|
||||||
-
|
|
||||||
+ fprintf(stderr, "rmo_top 0x%08x\n", rmo_top);
|
|
||||||
fclose(file);
|
|
||||||
closedir(cdir);
|
|
||||||
} /* memory */
|
|
@ -1,165 +0,0 @@
|
|||||||
---
|
|
||||||
kexec/arch/ppc64/fs2dt.c | 7 +--
|
|
||||||
kexec/arch/ppc64/kexec-elf-ppc64.c | 10 +++++
|
|
||||||
kexec/arch/ppc64/kexec-elf-rel-ppc64.c | 2 -
|
|
||||||
purgatory/arch/ppc64/v2wrap.S | 61 +++++++++------------------------
|
|
||||||
4 files changed, 30 insertions(+), 50 deletions(-)
|
|
||||||
|
|
||||||
Index: kexec/arch/ppc64/fs2dt.c
|
|
||||||
===================================================================
|
|
||||||
--- kexec/arch/ppc64/fs2dt.c.orig
|
|
||||||
+++ kexec/arch/ppc64/fs2dt.c
|
|
||||||
@@ -43,7 +43,6 @@ static char propnames[NAMESPACE] = { 0 }
|
|
||||||
static unsigned dtstruct[TREEWORDS], *dt;
|
|
||||||
static unsigned long long mem_rsrv[2*MEMRESERVE] = { 0, 0 };
|
|
||||||
|
|
||||||
-static int initrd_found = 0;
|
|
||||||
static int crash_param = 0;
|
|
||||||
static char local_cmdline[COMMAND_LINE_SIZE] = { "" };
|
|
||||||
static unsigned *dt_len; /* changed len of modified cmdline
|
|
||||||
@@ -343,10 +342,8 @@ static void putnode(void)
|
|
||||||
|
|
||||||
putprops(dn, namelist, numlist);
|
|
||||||
|
|
||||||
- /* Add initrd entries to the second kernel if first kernel does not
|
|
||||||
- * have and second kernel needs.
|
|
||||||
- */
|
|
||||||
- if (initrd_base && !initrd_found && !strcmp(basename,"/chosen/")) {
|
|
||||||
+ /* Add initrd entries to the second kernel */
|
|
||||||
+ if (initrd_base && !strcmp(basename,"/chosen/")) {
|
|
||||||
int len = 8;
|
|
||||||
unsigned long long initrd_end;
|
|
||||||
*dt++ = 3;
|
|
||||||
Index: kexec/arch/ppc64/kexec-elf-ppc64.c
|
|
||||||
===================================================================
|
|
||||||
--- kexec/arch/ppc64/kexec-elf-ppc64.c.orig
|
|
||||||
+++ kexec/arch/ppc64/kexec-elf-ppc64.c
|
|
||||||
@@ -89,6 +89,7 @@ int elf_ppc64_load(int argc, char **argv
|
|
||||||
unsigned int my_panic_kernel;
|
|
||||||
unsigned long my_stack, my_backup_start;
|
|
||||||
unsigned long toc_addr;
|
|
||||||
+ unsigned int slave_code[256/sizeof (unsigned int)], master_entry;
|
|
||||||
|
|
||||||
#define OPT_APPEND (OPT_ARCH_MAX+0)
|
|
||||||
#define OPT_RAMDISK (OPT_ARCH_MAX+1)
|
|
||||||
@@ -281,6 +282,15 @@ int elf_ppc64_load(int argc, char **argv
|
|
||||||
elf_rel_set_symbol(&info->rhdr, "dt_offset", &my_dt_offset,
|
|
||||||
sizeof(my_dt_offset));
|
|
||||||
|
|
||||||
+ /* get slave code from new kernel, put in purgatory */
|
|
||||||
+ elf_rel_get_symbol(&info->rhdr, "purgatory_start", slave_code,
|
|
||||||
+ sizeof(slave_code));
|
|
||||||
+ master_entry = slave_code[0];
|
|
||||||
+ memcpy(slave_code, info->segment[0].buf, sizeof(slave_code));
|
|
||||||
+ slave_code[0] = master_entry;
|
|
||||||
+ elf_rel_set_symbol(&info->rhdr, "purgatory_start", slave_code,
|
|
||||||
+ sizeof(slave_code));
|
|
||||||
+
|
|
||||||
if (info->kexec_flags & KEXEC_ON_CRASH) {
|
|
||||||
my_panic_kernel = 1;
|
|
||||||
/* Set panic flag */
|
|
||||||
Index: kexec/arch/ppc64/kexec-elf-rel-ppc64.c
|
|
||||||
===================================================================
|
|
||||||
--- kexec/arch/ppc64/kexec-elf-rel-ppc64.c.orig
|
|
||||||
+++ kexec/arch/ppc64/kexec-elf-rel-ppc64.c
|
|
||||||
@@ -97,7 +97,7 @@ void machine_apply_elf_rel(struct mem_eh
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_PPC64_ADDR16_HA:
|
|
||||||
- *(uint16_t *)location = ((value>>16) & 0xffff);
|
|
||||||
+ *(uint16_t *)location = (((value+0x8000)>>16) & 0xffff);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R_PPC64_ADDR16_HIGHEST:
|
|
||||||
Index: purgatory/arch/ppc64/v2wrap.S
|
|
||||||
===================================================================
|
|
||||||
--- purgatory/arch/ppc64/v2wrap.S.orig
|
|
||||||
+++ purgatory/arch/ppc64/v2wrap.S
|
|
||||||
@@ -45,13 +45,22 @@
|
|
||||||
oris rn,rn,name##@h; \
|
|
||||||
ori rn,rn,name##@l
|
|
||||||
|
|
||||||
-# look a bit like a Linux kernel here ...
|
|
||||||
+
|
|
||||||
.machine ppc64
|
|
||||||
.globl purgatory_start
|
|
||||||
purgatory_start: b master
|
|
||||||
- tweq 0,0
|
|
||||||
+ .org purgatory_start + 0x60 # ABI: slaves start at 60 with r3=phys
|
|
||||||
+slave: b $
|
|
||||||
+ .org purgatory_start + 0x100 # ABI: end of copied region
|
|
||||||
+ .size purgatory_start, . - purgatory_start
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# The above 0x100 bytes at purgatory_start are replaced with the
|
|
||||||
+# code from the kernel (or next stage) by kexec/arch/ppc64/kexec-ppc64.c
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
master:
|
|
||||||
- or 1,1,1 # low priority to let other thread catchup
|
|
||||||
+ or 1,1,1 # low priority to let other threads catchup
|
|
||||||
isync
|
|
||||||
mr 17,3 # save cpu id to r17
|
|
||||||
mr 15,4 # save physical address in reg15
|
|
||||||
@@ -66,25 +75,7 @@ master:
|
|
||||||
bl .purgatory
|
|
||||||
nop
|
|
||||||
|
|
||||||
- b 81f
|
|
||||||
- .org purgatory_start + 0x60 # ABI: slaves start at 60 with r3=phys
|
|
||||||
-slave:
|
|
||||||
- # load slave spin code address and branch into that
|
|
||||||
- LOADADDR(6,slave_spin)
|
|
||||||
- ld 4,0(6)
|
|
||||||
- mtctr 4
|
|
||||||
- bctr
|
|
||||||
-
|
|
||||||
-spin: .long 1
|
|
||||||
-slave_spin_code:
|
|
||||||
- lis 5,spin@ha
|
|
||||||
- lwz 5,spin@l(5)
|
|
||||||
- cmpwi 0,5,0
|
|
||||||
- bne slave_spin_code
|
|
||||||
- ba 0x60
|
|
||||||
-
|
|
||||||
-81: # master continues here
|
|
||||||
- or 3,3,3 # ok back to high, lets boot
|
|
||||||
+ or 3,3,3 # ok now to high priority, lets boot
|
|
||||||
lis 6,0x1
|
|
||||||
mtctr 6 # delay a bit for slaves to catch up
|
|
||||||
83: bdnz 83b # before we overwrite 0-100 again
|
|
||||||
@@ -99,30 +90,12 @@ slave_spin_code:
|
|
||||||
80:
|
|
||||||
LOADADDR(6,kernel)
|
|
||||||
ld 4,0(6) # load the kernel address
|
|
||||||
-
|
|
||||||
- addi 5,4,-8 # prepare copy with update form instructions
|
|
||||||
- li 6,0x100/8
|
|
||||||
- mtctr 6
|
|
||||||
- li 6,-8
|
|
||||||
-85: ldu 7,8(5)
|
|
||||||
- stdu 7,8(6)
|
|
||||||
- bdnz 85b
|
|
||||||
-
|
|
||||||
li 5,0 # r5 will be 0 for kernel
|
|
||||||
- dcbst 0,5 # store dcache, flush icache
|
|
||||||
- dcbst 0,6 # 0 and 0xf8 covers us with 128 byte lines
|
|
||||||
mtctr 4 # prepare branch too
|
|
||||||
- sync
|
|
||||||
- icbi 0,5
|
|
||||||
- icbi 0,6
|
|
||||||
- sync
|
|
||||||
- isync
|
|
||||||
- lis 6,spin@ha
|
|
||||||
- li 0,0
|
|
||||||
- stw 0,spin@l(6)
|
|
||||||
mr 3,16 # restore dt address
|
|
||||||
|
|
||||||
- bctr # start kernel
|
|
||||||
-
|
|
||||||
-slave_spin: .llong slave_spin_code
|
|
||||||
+ lwz 7,0(4) # get the first instruction that we stole
|
|
||||||
+ stw 7,0(0) # and put it in the slave loop at 0
|
|
||||||
+ # skip cache flush, do we care?
|
|
||||||
|
|
||||||
+ bctr # start kernel
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:7ba1eeeda36d06864aa83b24083e82fa6c8fc350d2789af91dd7455b8c164ee0
|
|
||||||
size 210304
|
|
3
kexec-tools-testing.tar.bz2
Normal file
3
kexec-tools-testing.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:1a794f416e2b732c1075bf5ae1c44eccdd338a2598aae658f3a41334027e64e7
|
||||||
|
size 1004081
|
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 16 15:33:22 CEST 2007 - olh@suse.de
|
||||||
|
|
||||||
|
- update to kexec-tools-testing b84b87747a16f0afbef6f6802bb794a94f4961d9
|
||||||
|
build 32bit powerpc kexec binary for 64bit kernels
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Jul 6 18:24:12 CEST 2007 - tiwai@suse.de
|
Fri Jul 6 18:24:12 CEST 2007 - tiwai@suse.de
|
||||||
|
|
||||||
|
16
kexec-tools.check_reuse_initrd-close.patch
Normal file
16
kexec-tools.check_reuse_initrd-close.patch
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
kexec/kexec.c:793: warning: passing argument 1 of 'close' makes integer from pointer without a cast
|
||||||
|
---
|
||||||
|
kexec/kexec.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/kexec/kexec.c
|
||||||
|
+++ b/kexec/kexec.c
|
||||||
|
@@ -790,7 +790,7 @@ void check_reuse_initrd(void)
|
||||||
|
"retain the initrd for reuse.\n");
|
||||||
|
if (line)
|
||||||
|
free(line);
|
||||||
|
- close(fp);
|
||||||
|
+ fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Arch hook for reuse_initrd */
|
31
kexec-tools.ppc32-64bit-purgatory.patch
Normal file
31
kexec-tools.ppc32-64bit-purgatory.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
kexec/arch/ppc64/crashdump-ppc64.h | 4 ++--
|
||||||
|
purgatory/Makefile | 3 +++
|
||||||
|
2 files changed, 5 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/kexec/arch/ppc64/crashdump-ppc64.h
|
||||||
|
+++ b/kexec/arch/ppc64/crashdump-ppc64.h
|
||||||
|
@@ -6,9 +6,9 @@ int load_crashdump_segments(struct kexec
|
||||||
|
unsigned long max_addr, unsigned long min_base);
|
||||||
|
void add_usable_mem_rgns(unsigned long long base, unsigned long long size);
|
||||||
|
|
||||||
|
-#define PAGE_OFFSET 0xC000000000000000
|
||||||
|
+#define PAGE_OFFSET 0xC000000000000000ULL
|
||||||
|
#define KERNELBASE PAGE_OFFSET
|
||||||
|
-#define VMALLOCBASE 0xD000000000000000
|
||||||
|
+#define VMALLOCBASE 0xD000000000000000ULL
|
||||||
|
|
||||||
|
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
|
||||||
|
#define MAXMEM (-KERNELBASE-VMALLOCBASE)
|
||||||
|
--- a/purgatory/Makefile
|
||||||
|
+++ b/purgatory/Makefile
|
||||||
|
@@ -7,6 +7,9 @@
|
||||||
|
# should keep us from accidentially include unsafe library functions
|
||||||
|
# or headers.
|
||||||
|
|
||||||
|
+ifeq ($(ARCH),ppc)
|
||||||
|
+EXTRA_LDFLAGS = -melf64ppc
|
||||||
|
+endif
|
||||||
|
ifeq ($(ARCH),ppc64)
|
||||||
|
EXTRA_LDFLAGS = -melf64ppc
|
||||||
|
endif
|
246
kexec-tools.ppc64-32bit-build.patch
Normal file
246
kexec-tools.ppc64-32bit-build.patch
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
---
|
||||||
|
kexec/arch/ppc64/crashdump-ppc64.h | 4 ++--
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c | 26 +++++++++++++-------------
|
||||||
|
kexec/arch/ppc64/kexec-elf-rel-ppc64.c | 4 ++--
|
||||||
|
kexec/arch/ppc64/kexec-ppc64.c | 20 ++++++++++----------
|
||||||
|
kexec/arch/ppc64/kexec-ppc64.h | 2 +-
|
||||||
|
kexec/kexec-sha256.h | 4 ++--
|
||||||
|
purgatory/arch/ppc64/Makefile | 2 ++
|
||||||
|
purgatory/purgatory.c | 2 ++
|
||||||
|
8 files changed, 34 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
|
--- a/kexec/arch/ppc64/crashdump-ppc64.h
|
||||||
|
+++ b/kexec/arch/ppc64/crashdump-ppc64.h
|
||||||
|
@@ -23,8 +23,8 @@ void add_usable_mem_rgns(unsigned long l
|
||||||
|
#define _ALIGN_UP(addr,size) (((addr)+((size)-1))&(~((size)-1)))
|
||||||
|
#define _ALIGN_DOWN(addr,size) ((addr)&(~((size)-1)))
|
||||||
|
|
||||||
|
-extern unsigned long long crash_base;
|
||||||
|
-extern unsigned long long crash_size;
|
||||||
|
+extern uint64_t crash_base;
|
||||||
|
+extern uint64_t crash_size;
|
||||||
|
extern unsigned int rtas_base;
|
||||||
|
extern unsigned int rtas_size;
|
||||||
|
|
||||||
|
--- a/kexec/arch/ppc64/kexec-elf-ppc64.c
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-elf-ppc64.c
|
||||||
|
@@ -42,7 +42,7 @@
|
||||||
|
#define BOOTLOADER "kexec"
|
||||||
|
#define BOOTLOADER_VERSION VERSION
|
||||||
|
|
||||||
|
-unsigned long initrd_base, initrd_size;
|
||||||
|
+uint64_t initrd_base, initrd_size;
|
||||||
|
unsigned char reuse_initrd = 0;
|
||||||
|
const char *ramdisk;
|
||||||
|
|
||||||
|
@@ -83,19 +83,19 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
char *cmdline, *modified_cmdline;
|
||||||
|
const char *devicetreeblob;
|
||||||
|
int cmdline_len, modified_cmdline_len;
|
||||||
|
- unsigned long long max_addr, hole_addr;
|
||||||
|
+ uint64_t max_addr, hole_addr;
|
||||||
|
unsigned char *seg_buf = NULL;
|
||||||
|
off_t seg_size = 0;
|
||||||
|
struct mem_phdr *phdr;
|
||||||
|
size_t size;
|
||||||
|
- unsigned long long *rsvmap_ptr;
|
||||||
|
+ uint64_t *rsvmap_ptr;
|
||||||
|
struct bootblock *bb_ptr;
|
||||||
|
unsigned int nr_segments, i;
|
||||||
|
int result, opt;
|
||||||
|
- unsigned long my_kernel, my_dt_offset;
|
||||||
|
+ uint64_t my_kernel, my_dt_offset;
|
||||||
|
unsigned int my_panic_kernel;
|
||||||
|
- unsigned long my_stack, my_backup_start;
|
||||||
|
- unsigned long toc_addr;
|
||||||
|
+ uint64_t my_stack, my_backup_start;
|
||||||
|
+ uint64_t toc_addr;
|
||||||
|
unsigned int slave_code[256/sizeof (unsigned int)], master_entry;
|
||||||
|
|
||||||
|
#define OPT_APPEND (OPT_ARCH_MAX+0)
|
||||||
|
@@ -237,10 +237,10 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
}
|
||||||
|
seg_buf = (unsigned char *)slurp_file(ramdisk, &seg_size);
|
||||||
|
add_buffer(info, seg_buf, seg_size, seg_size, 0, 0, max_addr, 1);
|
||||||
|
- hole_addr = (unsigned long long)
|
||||||
|
+ hole_addr = (uint64_t)
|
||||||
|
info->segment[info->nr_segments-1].mem;
|
||||||
|
initrd_base = hole_addr;
|
||||||
|
- initrd_size = (unsigned long long)
|
||||||
|
+ initrd_size = (uint64_t)
|
||||||
|
info->segment[info->nr_segments-1].memsz;
|
||||||
|
} /* ramdisk */
|
||||||
|
|
||||||
|
@@ -270,25 +270,25 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
*/
|
||||||
|
bb_ptr = (struct bootblock *)(
|
||||||
|
(unsigned char *)info->segment[(info->nr_segments)-1].buf);
|
||||||
|
- rsvmap_ptr = (unsigned long long *)(
|
||||||
|
+ rsvmap_ptr = (uint64_t *)(
|
||||||
|
(unsigned char *)info->segment[(info->nr_segments)-1].buf +
|
||||||
|
bb_ptr->off_mem_rsvmap);
|
||||||
|
while (*rsvmap_ptr || *(rsvmap_ptr+1))
|
||||||
|
rsvmap_ptr += 2;
|
||||||
|
rsvmap_ptr -= 2;
|
||||||
|
- *rsvmap_ptr = (unsigned long long)(
|
||||||
|
+ *rsvmap_ptr = (uint64_t)(
|
||||||
|
info->segment[(info->nr_segments)-1].mem);
|
||||||
|
rsvmap_ptr++;
|
||||||
|
- *rsvmap_ptr = (unsigned long long)bb_ptr->totalsize;
|
||||||
|
+ *rsvmap_ptr = (uint64_t)bb_ptr->totalsize;
|
||||||
|
|
||||||
|
nr_segments = info->nr_segments;
|
||||||
|
|
||||||
|
/* Set kernel */
|
||||||
|
- my_kernel = (unsigned long )info->segment[0].mem;
|
||||||
|
+ my_kernel = (uint64_t)info->segment[0].mem;
|
||||||
|
elf_rel_set_symbol(&info->rhdr, "kernel", &my_kernel, sizeof(my_kernel));
|
||||||
|
|
||||||
|
/* Set dt_offset */
|
||||||
|
- my_dt_offset = (unsigned long )info->segment[nr_segments-1].mem;
|
||||||
|
+ my_dt_offset = (uint64_t)info->segment[nr_segments-1].mem;
|
||||||
|
elf_rel_set_symbol(&info->rhdr, "dt_offset", &my_dt_offset,
|
||||||
|
sizeof(my_dt_offset));
|
||||||
|
|
||||||
|
--- a/kexec/arch/ppc64/kexec-elf-rel-ppc64.c
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-elf-rel-ppc64.c
|
||||||
|
@@ -101,10 +101,10 @@ void machine_apply_elf_rel(struct mem_eh
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R_PPC64_ADDR16_HIGHEST:
|
||||||
|
- *(uint16_t *)location = ((value>>48) & 0xffff);
|
||||||
|
+ *(uint16_t *)location = (((uint64_t)value>>48) & 0xffff);
|
||||||
|
break;
|
||||||
|
case R_PPC64_ADDR16_HIGHER:
|
||||||
|
- *(uint16_t *)location = ((value>>32) & 0xffff);
|
||||||
|
+ *(uint16_t *)location = (((uint64_t)value>>32) & 0xffff);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
--- a/kexec/arch/ppc64/kexec-ppc64.c
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-ppc64.c
|
||||||
|
@@ -41,7 +41,7 @@ static struct memory_range *base_memory_
|
||||||
|
static unsigned long long rmo_top;
|
||||||
|
unsigned long long memory_max = 0;
|
||||||
|
static int nr_memory_ranges, nr_exclude_ranges;
|
||||||
|
-unsigned long long crash_base, crash_size;
|
||||||
|
+uint64_t crash_base, crash_size;
|
||||||
|
unsigned int rtas_base, rtas_size;
|
||||||
|
int max_memory_ranges;
|
||||||
|
|
||||||
|
@@ -203,10 +203,10 @@ static int get_base_ranges(void)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
base_memory_range[local_memory_ranges].start =
|
||||||
|
- ((unsigned long long *)buf)[0];
|
||||||
|
+ ((uint64_t *)buf)[0];
|
||||||
|
base_memory_range[local_memory_ranges].end =
|
||||||
|
base_memory_range[local_memory_ranges].start +
|
||||||
|
- ((unsigned long long *)buf)[1];
|
||||||
|
+ ((uint64_t *)buf)[1];
|
||||||
|
base_memory_range[local_memory_ranges].type = RANGE_RAM;
|
||||||
|
local_memory_ranges++;
|
||||||
|
dbgprintf("%016llx-%016llx : %x\n",
|
||||||
|
@@ -231,7 +231,7 @@ static int get_base_ranges(void)
|
||||||
|
static int sort_ranges(void)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
- unsigned long long tstart, tend;
|
||||||
|
+ uint64_t tstart, tend;
|
||||||
|
for (i = 0; i < nr_exclude_ranges - 1; i++) {
|
||||||
|
for (j = 0; j < nr_exclude_ranges - i - 1; j++) {
|
||||||
|
if (exclude_range[j].start > exclude_range[j+1].start) {
|
||||||
|
@@ -292,7 +292,7 @@ static int get_devtree_details(unsigned
|
||||||
|
perror(fname);
|
||||||
|
goto error_opencdir;
|
||||||
|
}
|
||||||
|
- if (fread(&kernel_end, sizeof(unsigned long), 1, file) != 1) {
|
||||||
|
+ if (fread(&kernel_end, sizeof(uint64_t), 1, file) != 1) {
|
||||||
|
perror(fname);
|
||||||
|
goto error_openfile;
|
||||||
|
}
|
||||||
|
@@ -312,7 +312,7 @@ static int get_devtree_details(unsigned
|
||||||
|
perror(fname);
|
||||||
|
goto error_opencdir;
|
||||||
|
}
|
||||||
|
- if (fread(&crash_base, sizeof(unsigned long), 1,
|
||||||
|
+ if (fread(&crash_base, sizeof(uint64_t), 1,
|
||||||
|
file) != 1) {
|
||||||
|
perror(fname);
|
||||||
|
goto error_openfile;
|
||||||
|
@@ -327,7 +327,7 @@ static int get_devtree_details(unsigned
|
||||||
|
perror(fname);
|
||||||
|
goto error_opencdir;
|
||||||
|
}
|
||||||
|
- if (fread(&crash_size, sizeof(unsigned long), 1,
|
||||||
|
+ if (fread(&crash_size, sizeof(uint64_t), 1,
|
||||||
|
file) != 1) {
|
||||||
|
perror(fname);
|
||||||
|
goto error_openfile;
|
||||||
|
@@ -356,7 +356,7 @@ static int get_devtree_details(unsigned
|
||||||
|
perror(fname);
|
||||||
|
goto error_opendir;
|
||||||
|
}
|
||||||
|
- if (fread(&htab_base, sizeof(unsigned long), 1, file) != 1) {
|
||||||
|
+ if (fread(&htab_base, sizeof(uint64_t), 1, file) != 1) {
|
||||||
|
perror(fname);
|
||||||
|
goto error_openfile;
|
||||||
|
}
|
||||||
|
@@ -368,7 +368,7 @@ static int get_devtree_details(unsigned
|
||||||
|
perror(fname);
|
||||||
|
goto error_opencdir;
|
||||||
|
}
|
||||||
|
- if (fread(&htab_size, sizeof(unsigned long), 1, file) != 1) {
|
||||||
|
+ if (fread(&htab_size, sizeof(uint64_t), 1, file) != 1) {
|
||||||
|
perror(fname);
|
||||||
|
goto error_openfile;
|
||||||
|
}
|
||||||
|
@@ -487,7 +487,7 @@ static int get_devtree_details(unsigned
|
||||||
|
perror(fname);
|
||||||
|
goto error_opendir;
|
||||||
|
}
|
||||||
|
- if (fread(&tce_base, sizeof(unsigned long), 1, file) != 1) {
|
||||||
|
+ if (fread(&tce_base, sizeof(uint64_t), 1, file) != 1) {
|
||||||
|
perror(fname);
|
||||||
|
goto error_openfile;
|
||||||
|
return -1;
|
||||||
|
--- a/kexec/arch/ppc64/kexec-ppc64.h
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-ppc64.h
|
||||||
|
@@ -14,7 +14,7 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
void elf_ppc64_usage(void);
|
||||||
|
void reserve(unsigned long long where, unsigned long long length);
|
||||||
|
|
||||||
|
-extern unsigned long initrd_base, initrd_size;
|
||||||
|
+extern uint64_t initrd_base, initrd_size;
|
||||||
|
extern int max_memory_ranges;
|
||||||
|
extern unsigned char reuse_initrd;
|
||||||
|
|
||||||
|
--- a/kexec/kexec-sha256.h
|
||||||
|
+++ b/kexec/kexec-sha256.h
|
||||||
|
@@ -2,8 +2,8 @@
|
||||||
|
#define KEXEC_SHA256_H
|
||||||
|
|
||||||
|
struct sha256_region {
|
||||||
|
- const void *start;
|
||||||
|
- unsigned long len;
|
||||||
|
+ uint64_t start;
|
||||||
|
+ uint64_t len;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SHA256_REGIONS 16
|
||||||
|
--- a/purgatory/arch/ppc64/Makefile
|
||||||
|
+++ b/purgatory/arch/ppc64/Makefile
|
||||||
|
@@ -6,3 +6,5 @@ PURGATORY_S_SRCS+= purgatory/arch/ppc64/
|
||||||
|
PURGATORY_C_SRCS += purgatory/arch/ppc64/purgatory-ppc64.c
|
||||||
|
PURGATORY_C_SRCS += purgatory/arch/ppc64/console-ppc64.c
|
||||||
|
PURGATORY_C_SRCS += purgatory/arch/ppc64/crashdump_backup.c
|
||||||
|
+
|
||||||
|
+PCFLAGS += -m64 -mcall-aixdesc
|
||||||
|
--- a/purgatory/purgatory.c
|
||||||
|
+++ b/purgatory/purgatory.c
|
||||||
|
@@ -46,3 +46,5 @@ void purgatory(void)
|
||||||
|
verify_sha256_digest();
|
||||||
|
post_verification_setup_arch();
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+#include "../util_lib/sha256.c"
|
@ -11,14 +11,18 @@
|
|||||||
# norootforbuild
|
# norootforbuild
|
||||||
|
|
||||||
Name: kexec-tools
|
Name: kexec-tools
|
||||||
%define package_version testing-20070319-rc
|
# kdump does not work yet, kexec-tools.ppc64.rpm still required for kdump
|
||||||
|
%ifarch ppc
|
||||||
|
BuildRequires: gcc42-64bit glibc-devel-64bit
|
||||||
|
%endif
|
||||||
|
%define package_version testing
|
||||||
License: GPL v2 or later
|
License: GPL v2 or later
|
||||||
Group: System/Kernel
|
Group: System/Kernel
|
||||||
Requires: %insserv_prereq %fillup_prereq
|
Requires: %insserv_prereq %fillup_prereq
|
||||||
Autoreqprov: on
|
Autoreqprov: on
|
||||||
Summary: Tools for fast kernel loading
|
Summary: Tools for fast kernel loading
|
||||||
Version: 1.101
|
Version: 1.101
|
||||||
Release: 115
|
Release: 118
|
||||||
Source: %{name}-%{package_version}.tar.bz2
|
Source: %{name}-%{package_version}.tar.bz2
|
||||||
Source1: kdump
|
Source1: kdump
|
||||||
Source2: sysconfig.kdump
|
Source2: sysconfig.kdump
|
||||||
@ -29,11 +33,10 @@ URL: http://www.vergenet.net/linux/kexec/kexec-tools/
|
|||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
Requires: kdump-helpers
|
Requires: kdump-helpers
|
||||||
Patch: kexec-tools-testing-20070319-rc.patch
|
|
||||||
Patch1: kexec-longer-cmdline.diff
|
Patch1: kexec-longer-cmdline.diff
|
||||||
Patch20: kexec-tools-1.101-align-dtstruct.patch
|
Patch2: kexec-tools.check_reuse_initrd-close.patch
|
||||||
Patch21: kexec-tools-1.101-bootargs-align.patch
|
Patch20: kexec-tools.ppc64-32bit-build.patch
|
||||||
Patch22: kexec-tools-1.101-ps3-rmo_top-max.patch
|
Patch21: kexec-tools.ppc32-64bit-purgatory.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Kexec is a user space utility for loading another kernel and asking the
|
Kexec is a user space utility for loading another kernel and asking the
|
||||||
@ -54,18 +57,23 @@ Authors:
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n kexec-tools-%{package_version}
|
%setup -q -n kexec-tools-%{package_version}
|
||||||
%patch
|
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
#
|
#
|
||||||
%patch20
|
%patch20 -p1
|
||||||
%patch21
|
%patch21 -p1
|
||||||
%patch22
|
|
||||||
%{?suse_update_config -f}
|
|
||||||
cp %{SOURCE5} .
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
%{?suse_update_config -f}
|
||||||
|
cp %{SOURCE5} .
|
||||||
autoreconf -fi
|
autoreconf -fi
|
||||||
./configure --prefix=/ --sbindir=/sbin --libdir=/%_lib
|
./configure \
|
||||||
|
--prefix=/ \
|
||||||
|
%ifarch ppc
|
||||||
|
ARCH=ppc64 \
|
||||||
|
%endif
|
||||||
|
--sbindir=/sbin \
|
||||||
|
--libdir=/%_lib
|
||||||
%ifarch ia64
|
%ifarch ia64
|
||||||
RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-fstack-protector//')
|
RPM_OPT_FLAGS=$(echo $RPM_OPT_FLAGS | sed -e 's/-fstack-protector//')
|
||||||
%endif
|
%endif
|
||||||
@ -132,6 +140,9 @@ true # ignore errors
|
|||||||
/var/adm/fillup-templates/sysconfig.kdump
|
/var/adm/fillup-templates/sysconfig.kdump
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jul 16 2007 - olh@suse.de
|
||||||
|
- update to kexec-tools-testing b84b87747a16f0afbef6f6802bb794a94f4961d9
|
||||||
|
build 32bit powerpc kexec binary for 64bit kernels
|
||||||
* Fri Jul 06 2007 - tiwai@suse.de
|
* Fri Jul 06 2007 - tiwai@suse.de
|
||||||
- implement a simple status command for kdump init script
|
- implement a simple status command for kdump init script
|
||||||
* Tue Jul 03 2007 - bwalle@suse.de
|
* Tue Jul 03 2007 - bwalle@suse.de
|
||||||
|
Loading…
Reference in New Issue
Block a user