This commit is contained in:
parent
10674efb2f
commit
fdd79db572
53
kexec-tools-build-warnings.diff
Normal file
53
kexec-tools-build-warnings.diff
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
From c1d13f4bd287f48c5fce02c3916b132f618c40fb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Geoff Levand <geoffrey.levand@am.sony.com>
|
||||||
|
Date: Wed, 10 Sep 2008 18:40:42 -0700
|
||||||
|
Subject: [PATCH] Fix build warnings
|
||||||
|
|
||||||
|
Fix these 64 bit build warnings:
|
||||||
|
|
||||||
|
kexec/firmware_memmap.c:241: warning: format '%d' expects type 'int', but argument 3 has type 'size_t'
|
||||||
|
kexec/crashdump-elf.c:160: warning: format '%llx' expects type 'long long unsigned int', but argument 4 has type 'Elf64_Off'
|
||||||
|
kexec/crashdump-elf.c:160: warning: format '%llx' expects type 'long long unsigned int', but argument 5 has type 'Elf64_Addr'
|
||||||
|
kexec/crashdump-elf.c:160: warning: format '%llx' expects type 'long long unsigned int', but argument 6 has type 'Elf64_Addr'
|
||||||
|
kexec/crashdump-elf.c:160: warning: format '%llx' expects type 'long long unsigned int', but argument 7 has type 'Elf64_Xword'
|
||||||
|
kexec/crashdump-elf.c:160: warning: format '%llx' expects type 'long long unsigned int', but argument 8 has type 'Elf64_Xword'
|
||||||
|
|
||||||
|
Tested on PS3 (ppc64) with 32 and 64 bit builds.
|
||||||
|
|
||||||
|
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
|
||||||
|
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||||
|
Acked-by: Bernhard Walle <bwalle@suse.de>
|
||||||
|
|
||||||
|
---
|
||||||
|
kexec/crashdump-elf.c | 8 ++++++--
|
||||||
|
kexec/firmware_memmap.c | 2 +-
|
||||||
|
2 files changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/kexec/crashdump-elf.c
|
||||||
|
+++ b/kexec/crashdump-elf.c
|
||||||
|
@@ -8,8 +8,12 @@
|
||||||
|
do { \
|
||||||
|
dbgprintf("%s: p_type = %u, p_offset = 0x%llx p_paddr = 0x%llx " \
|
||||||
|
"p_vaddr = 0x%llx p_filesz = 0x%llx p_memsz = 0x%llx\n", \
|
||||||
|
- (prefix), (phdr)->p_type, (phdr)->p_offset, (phdr)->p_paddr, \
|
||||||
|
- (phdr)->p_vaddr, (phdr)->p_filesz, (phdr)->p_memsz); \
|
||||||
|
+ (prefix), (phdr)->p_type, \
|
||||||
|
+ (unsigned long long)((phdr)->p_offset), \
|
||||||
|
+ (unsigned long long)((phdr)->p_paddr), \
|
||||||
|
+ (unsigned long long)((phdr)->p_vaddr), \
|
||||||
|
+ (unsigned long long)((phdr)->p_filesz), \
|
||||||
|
+ (unsigned long long)((phdr)->p_memsz)); \
|
||||||
|
} while(0)
|
||||||
|
#else
|
||||||
|
#define dbgprintf_phdr(prefix, phdr) \
|
||||||
|
--- a/kexec/firmware_memmap.c
|
||||||
|
+++ b/kexec/firmware_memmap.c
|
||||||
|
@@ -239,7 +239,7 @@ int get_firmware_memmap_ranges(struct me
|
||||||
|
/* array overflow check */
|
||||||
|
if ((size_t)i >= *ranges) {
|
||||||
|
fprintf(stderr, "The firmware provides more entries "
|
||||||
|
- "allowed (%d). Please report that as bug.\n",
|
||||||
|
+ "allowed (%zd). Please report that as bug.\n",
|
||||||
|
*ranges);
|
||||||
|
goto error;
|
||||||
|
}
|
46
kexec-tools-ia64-PA.diff
Normal file
46
kexec-tools-ia64-PA.diff
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
From 4bd67d530f92313fd66bb462d96e3995b8e08af3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
|
||||||
|
Date: Mon, 6 Oct 2008 09:24:03 -0600
|
||||||
|
Subject: [PATCH] ia64: make PA() work for both physical identity-mapped virtual addresses
|
||||||
|
|
||||||
|
The EFI Runtime Services Table contains pointers to ia64 function
|
||||||
|
descriptors. On existing, pre-Tiano, firmware, SetVirtualAddressMap()
|
||||||
|
converts *all* these pointers from physical to virtual. On Tiano-based
|
||||||
|
firmware, the pointer to the SetVirtualAddressMap() function descriptor
|
||||||
|
is not converted, so it remains a physical pointer.
|
||||||
|
|
||||||
|
The ia64 kexec purgatory patches the SetVirtualAddressMap() function
|
||||||
|
descriptor so that when the new kernel calls SetVirtualAddressMap(), it
|
||||||
|
never reaches firmware. Instead, it calls a dummy function that just
|
||||||
|
returns success.
|
||||||
|
|
||||||
|
Purgatory runs in physical mode, so it must convert the pointer from the
|
||||||
|
RuntimeServicesTable to a physical address. This patch makes that
|
||||||
|
conversion work both for old firmware (where the pointer is an identity-
|
||||||
|
mapped virtual address) and new Tiano firmware (where the pointer is a
|
||||||
|
physical address).
|
||||||
|
|
||||||
|
Without this patch, kexec on Tiano firmware causes an MCA because
|
||||||
|
ia64_env_setup() subtracts PAGE_OFFSET from a physical address and ends
|
||||||
|
up with an invalid physical address. Referencing that address causes
|
||||||
|
the MCA.
|
||||||
|
|
||||||
|
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
|
||||||
|
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||||
|
Acked-by: Bernhard Walle <bwalle@suse.de>
|
||||||
|
|
||||||
|
---
|
||||||
|
purgatory/arch/ia64/purgatory-ia64.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/purgatory/arch/ia64/purgatory-ia64.c
|
||||||
|
+++ b/purgatory/arch/ia64/purgatory-ia64.c
|
||||||
|
@@ -147,7 +147,7 @@ setup_arch(void)
|
||||||
|
|
||||||
|
inline unsigned long PA(unsigned long addr)
|
||||||
|
{
|
||||||
|
- return addr - PAGE_OFFSET;
|
||||||
|
+ return addr & 0x0fffffffffffffffLL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
51
kexec-tools-ia64-kdump-PT_LOAD-order.diff
Normal file
51
kexec-tools-ia64-kdump-PT_LOAD-order.diff
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
Date: Wed, 8 Oct 2008 17:49:41 +1100
|
||||||
|
From: Simon Horman <horms@verge.net.au>
|
||||||
|
To: linux-ia64@vger.kernel.org, kexec@lists.infradead.org
|
||||||
|
Cc: Jay Lan <jlan@sgi.com>, "Luck, Tony" <tony.luck@intel.com>,
|
||||||
|
Bernhard Walle <bwalle@suse.de>
|
||||||
|
Subject: [patch] ia64: Order of operations bug in PT_LOAD segment reader
|
||||||
|
|
||||||
|
This bug was discovered by Jay Lan and he also proposed this fix, however
|
||||||
|
thee is some discussion about what if any related changes should be made at
|
||||||
|
the same time.
|
||||||
|
|
||||||
|
The bug comes about because the break statment was never executed because
|
||||||
|
the if clause would bever be true because the if clause will never be true
|
||||||
|
because & has higher precedence than !=.
|
||||||
|
|
||||||
|
My position on this is that with the if logic fixed, as per this patch, the
|
||||||
|
break statment and the rest of the while() loop makes sense and should work
|
||||||
|
as intended.
|
||||||
|
|
||||||
|
As I understand it, Jay's position is that the code should be simplified,
|
||||||
|
after all it never worked as intended.
|
||||||
|
|
||||||
|
There is a related kernel bug that lead Jay to discover this problem.
|
||||||
|
The kernel bug has been resolved by Tony Luck and was
|
||||||
|
included in Linus's tree between 2.6.27-rc8 and 2.6.27-rc9 as
|
||||||
|
"[IA64] Put the space for cpu0 per-cpu area into .data section".
|
||||||
|
|
||||||
|
Now that the kernel bug is out of the way, I am providing this patch to
|
||||||
|
continue discussion on what to do on the kexec-tools side of things. I do
|
||||||
|
not intend to apply this patch until there is some conclusion in the
|
||||||
|
discussion between Jay and myself.
|
||||||
|
|
||||||
|
Cc: Jay Lan <jlan@sgi.com>
|
||||||
|
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||||
|
Acked-by: Bernhard Walle <bwalle@suse.de>
|
||||||
|
|
||||||
|
---
|
||||||
|
kexec/arch/ia64/crashdump-ia64.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/kexec/arch/ia64/crashdump-ia64.c
|
||||||
|
+++ b/kexec/arch/ia64/crashdump-ia64.c
|
||||||
|
@@ -91,7 +91,7 @@ static void add_loaded_segments_info(str
|
||||||
|
if (phdr->p_type != PT_LOAD)
|
||||||
|
break;
|
||||||
|
if (loaded_segments[loaded_segments_num].end !=
|
||||||
|
- phdr->p_paddr & ~(ELF_PAGE_SIZE-1))
|
||||||
|
+ (phdr->p_paddr & ~(ELF_PAGE_SIZE-1)))
|
||||||
|
break;
|
||||||
|
loaded_segments[loaded_segments_num].end +=
|
||||||
|
(phdr->p_memsz + ELF_PAGE_SIZE - 1) &
|
93
kexec-tools-ia64-uncached-memory.diff
Normal file
93
kexec-tools-ia64-uncached-memory.diff
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
From c466edd86b31a9d34cde3db24b093223108627d2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jay Lan <jlan@sgi.com>
|
||||||
|
Date: Fri, 12 Sep 2008 13:10:34 -0700
|
||||||
|
Subject: [PATCH] IA64: do not include uncached memory to vmcore
|
||||||
|
|
||||||
|
Currently a memory segment in memory map with attribute of EFI_MEMORY_UC
|
||||||
|
is denoted as "System RAM" in /proc/iomem, while memory of attribute
|
||||||
|
(EFI_MEMORY_WB|EFI_MEMORY_UC) is also labeled the same.
|
||||||
|
|
||||||
|
The kexec utility then includes uncached memory as part of vmcore.
|
||||||
|
The kdump kernel may MCA when it tries to save the vmcore to a disk.
|
||||||
|
A normal "cached" access can cause MCAs.
|
||||||
|
|
||||||
|
Since kexec assembled memory ranges with memory tagged as "System RAM",
|
||||||
|
the uncached memory will be excluded if it is labeled differently.
|
||||||
|
|
||||||
|
Simon, since only IA64 will create "Uncached RAM" label, i do not
|
||||||
|
make changes to other arch.
|
||||||
|
|
||||||
|
Our HP machine in the lab is dead. I am sorry that i can not test
|
||||||
|
against other IA64 systems (than SGI's). Feedback is very much
|
||||||
|
appreciated.
|
||||||
|
|
||||||
|
The corresponding kernel patch is needed to test this kexec patch:
|
||||||
|
http://marc.info/?l=linux-ia64&m=122122791230130&w=2
|
||||||
|
This patch without the kernel patch will have no effect and do no
|
||||||
|
harm.
|
||||||
|
|
||||||
|
The kernel patch has been commited as
|
||||||
|
"[IA64] kexec fails on systems with blocks of uncached memory".
|
||||||
|
|
||||||
|
Signed-off-by: Jay Lan <jlan@sgi.com>
|
||||||
|
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||||
|
Acked-by: Bernhard Walle <bwalle@suse.de>
|
||||||
|
|
||||||
|
---
|
||||||
|
kexec/arch/ia64/crashdump-ia64.c | 5 ++++-
|
||||||
|
kexec/arch/ia64/kexec-ia64.c | 5 ++++-
|
||||||
|
kexec/firmware_memmap.c | 2 ++
|
||||||
|
kexec/kexec.h | 1 +
|
||||||
|
4 files changed, 11 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/kexec/arch/ia64/crashdump-ia64.c
|
||||||
|
+++ b/kexec/arch/ia64/crashdump-ia64.c
|
||||||
|
@@ -192,8 +192,11 @@ static int get_crash_memory_ranges(struc
|
||||||
|
kernel_code_start = start;
|
||||||
|
kernel_code_end = end;
|
||||||
|
continue;
|
||||||
|
- }else
|
||||||
|
+ } else if (memcmp(str, "Uncached RAM\n", 13) == 0) {
|
||||||
|
+ type = RANGE_UNCACHED;
|
||||||
|
+ } else {
|
||||||
|
continue;
|
||||||
|
+ }
|
||||||
|
crash_memory_range[memory_ranges].start = start;
|
||||||
|
crash_memory_range[memory_ranges].end = end;
|
||||||
|
crash_memory_range[memory_ranges].type = type;
|
||||||
|
--- a/kexec/arch/ia64/kexec-ia64.c
|
||||||
|
+++ b/kexec/arch/ia64/kexec-ia64.c
|
||||||
|
@@ -139,8 +139,11 @@ int get_memory_ranges(struct memory_rang
|
||||||
|
memory_ranges = split_range(memory_ranges, start, end);
|
||||||
|
saved_efi_memmap_size = end - start;
|
||||||
|
continue;
|
||||||
|
- } else
|
||||||
|
+ } else if (memcmp(str, "Uncached RAM\n", 13) == 0) {
|
||||||
|
+ type = RANGE_UNCACHED;
|
||||||
|
+ } else {
|
||||||
|
continue;
|
||||||
|
+ }
|
||||||
|
/*
|
||||||
|
* Check if this memory range can be coalesced with
|
||||||
|
* the previous range
|
||||||
|
--- a/kexec/firmware_memmap.c
|
||||||
|
+++ b/kexec/firmware_memmap.c
|
||||||
|
@@ -158,6 +158,8 @@ static int parse_memmap_entry(const char
|
||||||
|
range->type = RANGE_RESERVED;
|
||||||
|
else if (strcmp(type, "ACPI Non-volatile Storage") == 0)
|
||||||
|
range->type = RANGE_ACPI_NVS;
|
||||||
|
+ else if (strcmp(type, "Uncached RAM") == 0)
|
||||||
|
+ range->type = RANGE_UNCACHED;
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "Unknown type (%s) while parsing %s. Please "
|
||||||
|
"report this as bug. Using RANGE_RESERVED now.\n",
|
||||||
|
--- a/kexec/kexec.h
|
||||||
|
+++ b/kexec/kexec.h
|
||||||
|
@@ -110,6 +110,7 @@ struct memory_range {
|
||||||
|
#define RANGE_RESERVED 1
|
||||||
|
#define RANGE_ACPI 2
|
||||||
|
#define RANGE_ACPI_NVS 3
|
||||||
|
+#define RANGE_UNCACHED 4
|
||||||
|
};
|
||||||
|
|
||||||
|
struct kexec_info {
|
28
kexec-tools-ppc64-IBM-QS2x-blades.diff
Normal file
28
kexec-tools-ppc64-IBM-QS2x-blades.diff
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 93792363d3455459c7af7c646c0a1d1238c772fb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Maxim Shchetynin <maxim@de.ibm.com>
|
||||||
|
Date: Wed, 27 Aug 2008 10:04:56 +0200
|
||||||
|
Subject: [PATCH] Let kexec work on IBM QS2x blade servers
|
||||||
|
|
||||||
|
Hello,
|
||||||
|
|
||||||
|
please have a look at the following patch. This patch allows kexec to work
|
||||||
|
on IBM QS2x blades. Would it be possible to apply this patch to a next
|
||||||
|
kexec version?
|
||||||
|
|
||||||
|
Signed-off-by: Maxim Shchetynin <maxim@de.ibm.com>
|
||||||
|
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||||
|
|
||||||
|
---
|
||||||
|
kexec/arch/ppc64/kexec-elf-rel-ppc64.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
--- a/kexec/arch/ppc64/kexec-elf-rel-ppc64.c
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-elf-rel-ppc64.c
|
||||||
|
@@ -56,6 +56,7 @@ void machine_apply_elf_rel(struct mem_eh
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R_PPC64_ADDR64:
|
||||||
|
+ case R_PPC64_REL64:
|
||||||
|
/* Simply set it */
|
||||||
|
*(uint64_t *)location = value;
|
||||||
|
break;
|
129
kexec-tools-ppc64-build-warnings.diff
Normal file
129
kexec-tools-ppc64-build-warnings.diff
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
From b422925d35151caa65471c0f0d774727bde4a347 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Geoff Levand <geoffrey.levand@am.sony.com>
|
||||||
|
Date: Wed, 10 Sep 2008 18:40:46 -0700
|
||||||
|
Subject: [PATCH] Fix ppc64 build warnings
|
||||||
|
|
||||||
|
Fix these ppc64 32 bit build warnings:
|
||||||
|
|
||||||
|
kexec/arch/ppc64/kexec-zImage-ppc64.c: In function 'zImage_ppc64_load':
|
||||||
|
kexec/arch/ppc64/kexec-zImage-ppc64.c:164: warning: cast to pointer from integer of different size
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c: In function 'elf_ppc64_load':
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c:121: warning: integer constant is too large for 'unsigned long' type
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c:237: warning: cast from pointer to integer of different size
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c:276: warning: cast from pointer to integer of different size
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c:283: warning: cast from pointer to integer of different size
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c:287: warning: cast from pointer to integer of different size
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c:341: warning: format '%lx' expects type 'long unsigned int', but argument 3 has type 'uint64_t'
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c:352: warning: format '%ld' expects type 'long int', but argument 5 has type 'size_t'
|
||||||
|
kexec/arch/ppc64/crashdump-ppc64.c:45: warning: integer constant is too large for 'long' type
|
||||||
|
kexec/arch/ppc64/crashdump-ppc64.c:46: warning: integer constant is too large for 'long' type
|
||||||
|
kexec/arch/ppc64/crashdump-ppc64.c:56: warning: integer constant is too large for 'long' type
|
||||||
|
kexec/arch/ppc64/crashdump-ppc64.c:57: warning: integer constant is too large for 'long' type
|
||||||
|
|
||||||
|
Tested on PS3 (ppc64) with 32 and 64 bit builds.
|
||||||
|
|
||||||
|
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
|
||||||
|
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||||
|
Acked-by: Bernhard Walle <bwalle@suse.de>
|
||||||
|
|
||||||
|
---
|
||||||
|
kexec/arch/ppc64/crashdump-ppc64.h | 4 ++--
|
||||||
|
kexec/arch/ppc64/kexec-elf-ppc64.c | 26 ++++++++++++++------------
|
||||||
|
kexec/arch/ppc64/kexec-zImage-ppc64.c | 2 +-
|
||||||
|
3 files changed, 17 insertions(+), 15 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
|
||||||
|
uint64_t 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/kexec/arch/ppc64/kexec-elf-ppc64.c
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-elf-ppc64.c
|
||||||
|
@@ -118,7 +118,7 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
cmdline = 0;
|
||||||
|
ramdisk = 0;
|
||||||
|
devicetreeblob = 0;
|
||||||
|
- max_addr = 0xFFFFFFFFFFFFFFFFUL;
|
||||||
|
+ max_addr = 0xFFFFFFFFFFFFFFFFULL;
|
||||||
|
hole_addr = 0;
|
||||||
|
|
||||||
|
while ((opt = getopt_long(argc, argv, short_options,
|
||||||
|
@@ -233,7 +233,7 @@ 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 = (uint64_t)
|
||||||
|
+ hole_addr = (uintptr_t)
|
||||||
|
info->segment[info->nr_segments-1].mem;
|
||||||
|
initrd_base = hole_addr;
|
||||||
|
initrd_size = (uint64_t)
|
||||||
|
@@ -272,7 +272,7 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
while (*rsvmap_ptr || *(rsvmap_ptr+1))
|
||||||
|
rsvmap_ptr += 2;
|
||||||
|
rsvmap_ptr -= 2;
|
||||||
|
- *rsvmap_ptr = (uint64_t)(
|
||||||
|
+ *rsvmap_ptr = (uintptr_t)(
|
||||||
|
info->segment[(info->nr_segments)-1].mem);
|
||||||
|
rsvmap_ptr++;
|
||||||
|
*rsvmap_ptr = (uint64_t)bb_ptr->totalsize;
|
||||||
|
@@ -280,11 +280,11 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
nr_segments = info->nr_segments;
|
||||||
|
|
||||||
|
/* Set kernel */
|
||||||
|
- my_kernel = (uint64_t)info->segment[0].mem;
|
||||||
|
+ my_kernel = (uintptr_t)info->segment[0].mem;
|
||||||
|
elf_rel_set_symbol(&info->rhdr, "kernel", &my_kernel, sizeof(my_kernel));
|
||||||
|
|
||||||
|
/* Set dt_offset */
|
||||||
|
- my_dt_offset = (uint64_t)info->segment[nr_segments-1].mem;
|
||||||
|
+ my_dt_offset = (uintptr_t)info->segment[nr_segments-1].mem;
|
||||||
|
elf_rel_set_symbol(&info->rhdr, "dt_offset", &my_dt_offset,
|
||||||
|
sizeof(my_dt_offset));
|
||||||
|
|
||||||
|
@@ -338,17 +338,19 @@ int elf_ppc64_load(int argc, char **argv
|
||||||
|
sizeof(toc_addr));
|
||||||
|
|
||||||
|
fprintf(stderr, "info->entry is %p\n", info->entry);
|
||||||
|
- fprintf(stderr, "kernel is %lx\n", my_kernel);
|
||||||
|
- fprintf(stderr, "dt_offset is %lx\n", my_dt_offset);
|
||||||
|
+ fprintf(stderr, "kernel is %llx\n", (unsigned long long)my_kernel);
|
||||||
|
+ fprintf(stderr, "dt_offset is %llx\n",
|
||||||
|
+ (unsigned long long)my_dt_offset);
|
||||||
|
fprintf(stderr, "panic_kernel is %x\n", my_panic_kernel);
|
||||||
|
- fprintf(stderr, "backup_start is %lx\n", my_backup_start);
|
||||||
|
- fprintf(stderr, "stack is %lx\n", my_stack);
|
||||||
|
- fprintf(stderr, "toc_addr is %lx\n", toc_addr);
|
||||||
|
- fprintf(stderr, "purgatory size is %lu\n", purgatory_size);
|
||||||
|
+ fprintf(stderr, "backup_start is %llx\n",
|
||||||
|
+ (unsigned long long)my_backup_start);
|
||||||
|
+ fprintf(stderr, "stack is %llx\n", (unsigned long long)my_stack);
|
||||||
|
+ fprintf(stderr, "toc_addr is %llx\n", (unsigned long long)toc_addr);
|
||||||
|
+ fprintf(stderr, "purgatory size is %zu\n", purgatory_size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (i = 0; i < nr_segments; i++)
|
||||||
|
- fprintf(stderr, "segment[%d].mem:%p memsz:%ld\n", i,
|
||||||
|
+ fprintf(stderr, "segment[%d].mem:%p memsz:%zu\n", i,
|
||||||
|
info->segment[i].mem, info->segment[i].memsz);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
--- a/kexec/arch/ppc64/kexec-zImage-ppc64.c
|
||||||
|
+++ b/kexec/arch/ppc64/kexec-zImage-ppc64.c
|
||||||
|
@@ -161,7 +161,7 @@ int zImage_ppc64_load(FILE *file, int ar
|
||||||
|
segment->mem = (void *) load_loc;
|
||||||
|
segment->memsz = memsize;
|
||||||
|
segment->bufsz = filesize;
|
||||||
|
- *ret_entry = (void *)((uint64_t)elf.e_entry);
|
||||||
|
+ *ret_entry = (void *)(uintptr_t)elf.e_entry;
|
||||||
|
*ret_nr_segments = i - 1;
|
||||||
|
free(ph);
|
||||||
|
return 0;
|
@ -1,3 +1,17 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Oct 08 16:57:28 CEST 2008 - bwalle@suse.de
|
||||||
|
|
||||||
|
- IA64: Order of operations bug in PT_LOAD segment reader.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Oct 08 16:29:33 CEST 2008 - bwalle@suse.de
|
||||||
|
|
||||||
|
- ia64: Do not include uncached memory to vmcore.
|
||||||
|
- ia64: Make PA() work for both physical identity-mapped virtual
|
||||||
|
addresses.
|
||||||
|
- PPC64: Let kexec work on IBM QS2x blade servers
|
||||||
|
- Fix build warnings.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Oct 06 17:32:56 CEST 2008 - bwalle@suse.de
|
Mon Oct 06 17:32:56 CEST 2008 - bwalle@suse.de
|
||||||
|
|
||||||
|
@ -29,11 +29,17 @@ PreReq: %insserv_prereq %fillup_prereq
|
|||||||
AutoReqProv: on
|
AutoReqProv: on
|
||||||
Summary: Tools for fast kernel loading
|
Summary: Tools for fast kernel loading
|
||||||
Version: 2.0.0
|
Version: 2.0.0
|
||||||
Release: 36
|
Release: 37
|
||||||
Source: %{name}-%{version}.tar.bz2
|
Source: %{name}-%{version}.tar.bz2
|
||||||
Source1: kexec-bootloader
|
Source1: kexec-bootloader
|
||||||
Source2: kexec-bootloader.8.txt
|
Source2: kexec-bootloader.8.txt
|
||||||
Source3: kexec.init
|
Source3: kexec.init
|
||||||
|
Patch0: %{name}-ia64-uncached-memory.diff
|
||||||
|
Patch1: %{name}-ia64-PA.diff
|
||||||
|
Patch2: %{name}-build-warnings.diff
|
||||||
|
Patch3: %{name}-ppc64-build-warnings.diff
|
||||||
|
Patch4: %{name}-ppc64-IBM-QS2x-blades.diff
|
||||||
|
Patch5: %{name}-ia64-kdump-PT_LOAD-order.diff
|
||||||
Url: http://ftp.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
|
Url: http://ftp.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
@ -60,6 +66,12 @@ Authors:
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n kexec-tools-%{version}
|
%setup -q -n kexec-tools-%{version}
|
||||||
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%{?suse_update_config -f}
|
%{?suse_update_config -f}
|
||||||
@ -126,6 +138,14 @@ install -m 0755 kexec.init ${RPM_BUILD_ROOT}/etc/init.d/kexec
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Oct 08 2008 bwalle@suse.de
|
||||||
|
- IA64: Order of operations bug in PT_LOAD segment reader.
|
||||||
|
* Wed Oct 08 2008 bwalle@suse.de
|
||||||
|
- ia64: Do not include uncached memory to vmcore.
|
||||||
|
- ia64: Make PA() work for both physical identity-mapped virtual
|
||||||
|
addresses.
|
||||||
|
- PPC64: Let kexec work on IBM QS2x blade servers
|
||||||
|
- Fix build warnings.
|
||||||
* Mon Oct 06 2008 bwalle@suse.de
|
* Mon Oct 06 2008 bwalle@suse.de
|
||||||
- Implement -h (help) option (bnc#432386).
|
- Implement -h (help) option (bnc#432386).
|
||||||
- Remove documentation of -o (options) option that never existed.
|
- Remove documentation of -o (options) option that never existed.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user