The RMO region can only exist in '/memory at 0' node in the device tree. While adding support for '/ibm,dynamic-reconfiguration-memory' in kexec-tools, I incorrectly extended the code of '/memory@' nodes to drconf memory with the assumption that what applies to '/memory@' nodes would also apply to drconf memory. This is incorrect and hence removing the code from kexec-tools now. With this code in place, kexec on kexec fails. The first kexec works because '/memory at 0' node is read after drconf memory and that correctly sets rmo_base and rmo_top from '/memory at 0' node. While in the kexec'ed kernel, '/ibm,dynamic-reconfiguration-memory' is read after '/memory at xxx' nodes and this incorrectly sets both rmo_base and rmo_top from drconf memory. Sorry for introducing this bug. Signed-off-by: Chandru Siddalingappa <chandru at linux.vnet.ibm.com> --- --- kexec-tools/kexec/arch/ppc64/kexec-ppc64.c.orig 2010-03-02 08:11:16.000000000 +0000 +++ kexec-tools/kexec/arch/ppc64/kexec-ppc64.c 2010-03-02 08:13:37.000000000 +0000 @@ -342,9 +342,7 @@ static int get_devtree_details(unsigned strncmp(dentry->d_name, "memory@", 7) && strcmp(dentry->d_name, "memory") && strncmp(dentry->d_name, "pci@", 4) && - strncmp(dentry->d_name, "rtas", 4) && - strncmp(dentry->d_name, - "ibm,dynamic-reconfiguration-memory", 35)) + strncmp(dentry->d_name, "rtas", 4)) continue; strcpy(fname, device_tree); strcat(fname, dentry->d_name); @@ -550,29 +548,6 @@ static int get_devtree_details(unsigned closedir(cdir); } /* memory */ - if (!strncmp(dentry->d_name, - "ibm,dynamic-reconfiguration-memory", 35)) { - unsigned int k; - strcat(fname, "/ibm,dynamic-memory"); - if ((file = fopen(fname, "r")) == NULL) { - perror(fname); - goto error_opencdir; - } - fseek(file, 4, SEEK_SET); - for (k = 0; k < num_of_lmbs; k++) { - if ((n = fread(buf, 1, 24, file)) < 0) { - perror(fname); - goto error_openfile; - } - rmo_base = ((uint64_t *)buf)[0]; - rmo_top = rmo_base + lmb_size; - if (rmo_top > 0x30000000UL) - rmo_top = 0x30000000UL; - } - fclose(file); - closedir(cdir); - } /* ibm,dynamic-reconfiguration-memory */ - if (strncmp(dentry->d_name, "pci@", 4) == 0) { strcat(fname, "/linux,tce-base"); if ((file = fopen(fname, "r")) == NULL) {