This commit is contained in:
parent
00a8737a5f
commit
12c19487ad
18
kexec-tools-1.101-align-dtstruct.patch
Normal file
18
kexec-tools-1.101-align-dtstruct.patch
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
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;
|
17
kexec-tools-1.101-bootargs-align.patch
Normal file
17
kexec-tools-1.101-bootargs-align.patch
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
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;
|
51
kexec-tools-1.101-ps3-rmo_top-max.patch
Normal file
51
kexec-tools-1.101-ps3-rmo_top-max.patch
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
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 */
|
165
kexec-tools-testing-20070319-rc.patch
Normal file
165
kexec-tools-testing-20070319-rc.patch
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
---
|
||||||
|
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 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 24 17:08:20 CEST 2007 - olh@suse.de
|
||||||
|
|
||||||
|
- update to current kexec-tools-testing
|
||||||
|
add PS3 patches
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Apr 19 10:55:31 CEST 2007 - bwalle@suse.de
|
Thu Apr 19 10:55:31 CEST 2007 - bwalle@suse.de
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ 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: 93
|
Release: 97
|
||||||
Source: %{name}-%{package_version}.tar.bz2
|
Source: %{name}-%{package_version}.tar.bz2
|
||||||
Source1: kdump
|
Source1: kdump
|
||||||
Source2: sysconfig.kdump
|
Source2: sysconfig.kdump
|
||||||
@ -31,6 +31,10 @@ Patch1: kexec-longer-cmdline.diff
|
|||||||
URL: http://www.xmission.com/~ebiederm/files/kexec/
|
URL: http://www.xmission.com/~ebiederm/files/kexec/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: libelf zlib-devel
|
BuildRequires: libelf zlib-devel
|
||||||
|
Patch: kexec-tools-testing-20070319-rc.patch
|
||||||
|
Patch20: kexec-tools-1.101-align-dtstruct.patch
|
||||||
|
Patch21: kexec-tools-1.101-bootargs-align.patch
|
||||||
|
Patch22: kexec-tools-1.101-ps3-rmo_top-max.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Kexec is a user space utiltity for loading another kernel and asking
|
Kexec is a user space utiltity for loading another kernel and asking
|
||||||
@ -51,7 +55,12 @@ Authors:
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n kexec-tools-%{package_version} -b 6
|
%setup -q -n kexec-tools-%{package_version} -b 6
|
||||||
|
%patch
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
|
#
|
||||||
|
%patch20
|
||||||
|
%patch21
|
||||||
|
%patch22
|
||||||
%{?suse_update_config -f}
|
%{?suse_update_config -f}
|
||||||
cp %{SOURCE5} .
|
cp %{SOURCE5} .
|
||||||
|
|
||||||
@ -124,6 +133,9 @@ true # ignore errors
|
|||||||
%{_sbindir}/kdump-helper
|
%{_sbindir}/kdump-helper
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Apr 24 2007 - olh@suse.de
|
||||||
|
- update to current kexec-tools-testing
|
||||||
|
add PS3 patches
|
||||||
* Thu Apr 19 2007 - bwalle@suse.de
|
* Thu Apr 19 2007 - bwalle@suse.de
|
||||||
- fixes in kdump-helper (update to 0.1.2):
|
- fixes in kdump-helper (update to 0.1.2):
|
||||||
o retrieve the disk size before mmap()
|
o retrieve the disk size before mmap()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user