Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
kexec-tools
kexec-tools-ppc-check-flags.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kexec-tools-ppc-check-flags.diff of Package kexec-tools
From: Chandru <chandru@in.ibm.com> Subject: kdump: check flags field from drconf memory References: bnc#438086 X-Git-Id: 802a8a5e396e06a514251c44454c982bff3c5073 On a powerpc machine when memory is dynamically removed/added from an lpar, the corresponding flags field in the drconf memory reflects the same with the bits unset/set accordingly. The kernel does a check on these flags while booting. Following are the similar changes brought in to kexec-tools. This makes kexec-tools to skip those memory regions that do not belong or are not assigned to the current partition ( but are available to dynamically add them back ). Without this patch (and with memory remove operation) copying vmcore fails with error as Copying data : [ 84 %] readmem: Can't read the dump memory(/proc/vmcore). Bad address read_pfn: Can't get the page data. Signed-off-by : Chandru S <chandru@in.ibm.com> Signed-off-by: Simon Horman <horms@verge.net.au> Acked-by: Bernhard Walle <bwalle@suse.de> --- kexec/arch/ppc64/crashdump-ppc64.c | 12 ++++++++++-- kexec/arch/ppc64/crashdump-ppc64.h | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) --- a/kexec/arch/ppc64/crashdump-ppc64.c +++ b/kexec/arch/ppc64/crashdump-ppc64.c @@ -121,12 +121,13 @@ static void exclude_crash_region(uint64_ } } -static int get_dyn_reconf_crash_memory_ranges() +static int get_dyn_reconf_crash_memory_ranges(void) { uint64_t start, end; char fname[128], buf[32]; FILE *file; int i, n; + uint32_t flags; strcpy(fname, "/proc/device-tree/"); strcat(fname, "ibm,dynamic-reconfiguration-memory/ibm,dynamic-memory"); @@ -150,10 +151,17 @@ static int get_dyn_reconf_crash_memory_r return -1; } - start = ((uint64_t *)buf)[0]; + start = ((uint64_t *)buf)[DRCONF_ADDR]; end = start + lmb_size; if (start == 0 && end >= (BACKUP_SRC_END + 1)) start = BACKUP_SRC_END + 1; + + flags = (*((uint32_t *)&buf[DRCONF_FLAGS])); + /* skip this block if the reserved bit is set in flags (0x80) + or if the block is not assigned to this partition (0x8) */ + if ((flags & 0x80) || !(flags & 0x8)) + continue; + exclude_crash_region(start, end); } fclose(file); --- a/kexec/arch/ppc64/crashdump-ppc64.h +++ b/kexec/arch/ppc64/crashdump-ppc64.h @@ -31,4 +31,7 @@ extern unsigned int rtas_size; uint64_t lmb_size; unsigned int num_of_lmbs; +#define DRCONF_ADDR 0 +#define DRCONF_FLAGS 20 + #endif /* CRASHDUMP_PPC64_H */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor