Re: kexec -p loads

2008-08-27 Thread Vivek Goyal
On Tue, Aug 26, 2008 at 05:13:27PM -0500, Cliff Wickman wrote:
 
 Hi Vivek,
 
 I'm having trouble getting a system kernel to load a kdump kernel.
 
 These are 2.6.26.2 kernels on an x86_64.
 The kdump kernel has no modules.
 The kdump kernel area is reserved as [EMAIL PROTECTED]
 
 This is the way I try to load it:
 
 /usr/local/sbin/kexec -p /boot/vmlinux-cpwcomm --args-linux 
 --append=root=/dev/sda3 1 irqpoll maxcpus=1 reset_devices
 
 This works with -l.  But with -p the kernel objects to the 2 lowest
 segments, at 0x1000 and 0xa000 which I presume are the startup code
 and arguments.
 

CCing to kexec mailing list.

Few questions.

- What version of kexec-tools are you using?
- Can you please provide output of /proc/iomem. (With crash kernel memory
  reserved).
- Looks like you have compiled your kernel for physical address 16MB?
  (CONFIG_PHYSICAL_START=0x100)
- Can you also try loading relocatable bzImage, instead of vmlinux and see
  what happens.
  

 I have this debugging output from my kexec:
 
 cpw: elf_x86_64_load returning entry:0x1550
 cpw: after call to file_type[i].load: nr_segments:6 entry:0x1550
 kexec_load: entry = 0x1550 flags = 1
 nr_segments = 6
 segment[0].buf   = 0x5237a0
 segment[0].bufsz = 7100
 segment[0].mem   = 0x1000
 segment[0].memsz = 9000
 
 segment[1].buf   = 0x52aaf0
 segment[1].bufsz = 1000
 segment[1].mem   = 0xa000
 segment[1].memsz = 1000
 

I think above two segments are not being loaded at right place. Looks like
kexec-tools decided to load first one at physical address 0x1000 and other at
physical address 0xa000. For crash kernel this is not right. It should
come out of reserved memory area and that's why you are encountering the
error.


For crash kernels, kexec-tools sets the value of mem-min and mem-max in
such a manner that it is with-in reserved memory area so that any memory
allocation in locate_hole() is done with-in reserved area and not outside
it.

In your case looks like something went wrong. Either memory area was not
reserved properly or value of mem-min, mem-max was not set properly etc.

Can you please paste the output of /proc/iomem and also do some
kexec-tools debugging. Especially value of mem-max and mem-min inside
locate_hole() function.

Thanks
Vivek

 
 segment[2].buf   = 0x7f9bd8461010
 segment[2].bufsz = 224668
 segment[2].mem   = 0x100
 segment[2].memsz = 225000
 
 segment[3].buf   = 0x7f9bd8686010
 segment[3].bufsz = 75508
 segment[3].mem   = 0x1225000
 segment[3].memsz = 76000
 
 segment[4].buf   = 0x7f9bd8761010
 segment[4].bufsz = c08
 segment[4].mem   = 0x129b000
 segment[4].memsz = 1000
 
 segment[5].buf   = 0x7f9bd87fd010
 segment[5].bufsz = 30004
 segment[5].mem   = 0x129c000
 segment[5].memsz = c2000
 kexec_load failed: Cannot assign requested address
 
 
 And I have some debugging in the system kernel:
 
 cleopatra1:/tmp/cpw # dmesg | tail
 
 cpw: -p, call kimage_crash_alloc
 cpw: kimage_crash_alloc bad entry point 0x1550:0x100 0x1550:0x4ff
 cpw: kimage_crash_alloc segment 0: 0x1000-0x9fff
 cpw: kimage_crash_alloc pta EADDRNOTAVAIL 0x1000:0x100  0x9fff:0x4ff
 cpw: kimage_crash_alloc segment 1: 0xa000-0xafff
 cpw: kimage_crash_alloc pta EADDRNOTAVAIL 0xa000:0x100  0xafff:0x4ff
 cpw: kimage_crash_alloc segment 2: 0x100-0x1224fff
 cpw: kimage_crash_alloc segment 3: 0x1225000-0x129afff
 cpw: kimage_crash_alloc segment 4: 0x129b000-0x129bfff
 cpw: kimage_crash_alloc segment 5: 0x129c000-0x135dfff
 
 The code that insists that the entry point must be within [EMAIL PROTECTED], 
 and
 that every segment must also be in that range, seems to be old code.
 
 I don't understand.
 Is kexec generating bad segments?  Or am I mis-using something?
 Can you tell from the above?
 
 Thanks.
 -Cliff

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


Re: kexec -p loads

2008-08-27 Thread Bernhard Walle
* Vivek Goyal [2008-08-27 09:39]:

 On Tue, Aug 26, 2008 at 05:13:27PM -0500, Cliff Wickman wrote:
  
  Hi Vivek,
  
  I'm having trouble getting a system kernel to load a kdump kernel.
  
  These are 2.6.26.2 kernels on an x86_64.
  The kdump kernel has no modules.
  The kdump kernel area is reserved as [EMAIL PROTECTED]
  
  This is the way I try to load it:
  
  /usr/local/sbin/kexec -p /boot/vmlinux-cpwcomm --args-linux 
  --append=root=/dev/sda3 1 irqpoll maxcpus=1 reset_devices
  
  This works with -l.  But with -p the kernel objects to the 2 lowest
  segments, at 0x1000 and 0xa000 which I presume are the startup code
  and arguments.
  
 
 CCing to kexec mailing list.
 
 Few questions.
 
 - What version of kexec-tools are you using?
 - Can you please provide output of /proc/iomem. (With crash kernel memory
   reserved).
 - Looks like you have compiled your kernel for physical address 16MB?
   (CONFIG_PHYSICAL_START=0x100)
 - Can you also try loading relocatable bzImage, instead of vmlinux and see
   what happens.
   
 
  I have this debugging output from my kexec:
  
  cpw: elf_x86_64_load returning entry:0x1550
  cpw: after call to file_type[i].load: nr_segments:6 entry:0x1550
  kexec_load: entry = 0x1550 flags = 1
  nr_segments = 6
  segment[0].buf   = 0x5237a0
  segment[0].bufsz = 7100
  segment[0].mem   = 0x1000
  segment[0].memsz = 9000
  
  segment[1].buf   = 0x52aaf0
  segment[1].bufsz = 1000
  segment[1].mem   = 0xa000
  segment[1].memsz = 1000
  
 
 I think above two segments are not being loaded at right place. Looks like
 kexec-tools decided to load first one at physical address 0x1000 and other at
 physical address 0xa000. For crash kernel this is not right. It should
 come out of reserved memory area and that's why you are encountering the
 error.

Relocatability in ELF image never worked on x86_64 because of GDB but
(so the binary was marked as ET_EXEC instead of ET_DYN).

You have to use bzImage for kdump in any case.



Bernhard
-- 
Bernhard Walle, SUSE LINUX Products GmbH, Architecture Development

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


Re: kexec -p loads

2008-08-27 Thread Vivek Goyal
On Wed, Aug 27, 2008 at 03:43:33PM +0200, Bernhard Walle wrote:
 * Vivek Goyal [2008-08-27 09:39]:
 
  On Tue, Aug 26, 2008 at 05:13:27PM -0500, Cliff Wickman wrote:
   
   Hi Vivek,
   
   I'm having trouble getting a system kernel to load a kdump kernel.
   
   These are 2.6.26.2 kernels on an x86_64.
   The kdump kernel has no modules.
   The kdump kernel area is reserved as [EMAIL PROTECTED]
   
   This is the way I try to load it:
   
   /usr/local/sbin/kexec -p /boot/vmlinux-cpwcomm --args-linux 
   --append=root=/dev/sda3 1 irqpoll maxcpus=1 reset_devices
   
   This works with -l.  But with -p the kernel objects to the 2 lowest
   segments, at 0x1000 and 0xa000 which I presume are the startup code
   and arguments.
   
  
  CCing to kexec mailing list.
  
  Few questions.
  
  - What version of kexec-tools are you using?
  - Can you please provide output of /proc/iomem. (With crash kernel memory
reserved).
  - Looks like you have compiled your kernel for physical address 16MB?
(CONFIG_PHYSICAL_START=0x100)
  - Can you also try loading relocatable bzImage, instead of vmlinux and see
what happens.

  
   I have this debugging output from my kexec:
   
   cpw: elf_x86_64_load returning entry:0x1550
   cpw: after call to file_type[i].load: nr_segments:6 entry:0x1550
   kexec_load: entry = 0x1550 flags = 1
   nr_segments = 6
   segment[0].buf   = 0x5237a0
   segment[0].bufsz = 7100
   segment[0].mem   = 0x1000
   segment[0].memsz = 9000
   
   segment[1].buf   = 0x52aaf0
   segment[1].bufsz = 1000
   segment[1].mem   = 0xa000
   segment[1].memsz = 1000
   
  
  I think above two segments are not being loaded at right place. Looks like
  kexec-tools decided to load first one at physical address 0x1000 and other 
  at
  physical address 0xa000. For crash kernel this is not right. It should
  come out of reserved memory area and that's why you are encountering the
  error.
 
 Relocatability in ELF image never worked on x86_64 because of GDB but
 (so the binary was marked as ET_EXEC instead of ET_DYN).
 
 You have to use bzImage for kdump in any case.
 

True that vmlinux is not relocatable. But one can always compile the
vmlinux for a fixed physical address (Address in reserved region) and then
use it?  In this case his vmlinux seems to have been compiled for physical
address 16MB. Which should be usable if there is a reserved memory region
at 16MB.

Thanks
Vivek

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


Re: kexec -p loads

2008-08-27 Thread Bernhard Walle
* Vivek Goyal [2008-08-27 11:28]:
   
I have this debugging output from my kexec:

cpw: elf_x86_64_load returning entry:0x1550
cpw: after call to file_type[i].load: nr_segments:6 entry:0x1550
kexec_load: entry = 0x1550 flags = 1
nr_segments = 6
segment[0].buf   = 0x5237a0
segment[0].bufsz = 7100
segment[0].mem   = 0x1000
segment[0].memsz = 9000

segment[1].buf   = 0x52aaf0
segment[1].bufsz = 1000
segment[1].mem   = 0xa000
segment[1].memsz = 1000

   
   I think above two segments are not being loaded at right place. Looks like
   kexec-tools decided to load first one at physical address 0x1000 and 
   other at
   physical address 0xa000. For crash kernel this is not right. It should
   come out of reserved memory area and that's why you are encountering the
   error.
  
  Relocatability in ELF image never worked on x86_64 because of GDB but
  (so the binary was marked as ET_EXEC instead of ET_DYN).
  
  You have to use bzImage for kdump in any case.
 
 True that vmlinux is not relocatable. But one can always compile the
 vmlinux for a fixed physical address (Address in reserved region) and then
 use it?  In this case his vmlinux seems to have been compiled for physical
 address 16MB. Which should be usable if there is a reserved memory region
 at 16MB.

Of course, that's true. I just thought when Cliff uses the same kernel
for kexec -l and kexec -p, then it's the normal kernel. But I
didn't calculate the numbers.



Bernhard
-- 
Bernhard Walle, SUSE Linux Products GmbH, Architecture Development

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


Re: kexec -p loads

2008-08-27 Thread Vivek Goyal
On Wed, Aug 27, 2008 at 05:30:35PM +0200, Bernhard Walle wrote:
 * Vivek Goyal [2008-08-27 11:28]:

 I have this debugging output from my kexec:
 
 cpw: elf_x86_64_load returning entry:0x1550
 cpw: after call to file_type[i].load: nr_segments:6 entry:0x1550
 kexec_load: entry = 0x1550 flags = 1
 nr_segments = 6
 segment[0].buf   = 0x5237a0
 segment[0].bufsz = 7100
 segment[0].mem   = 0x1000
 segment[0].memsz = 9000
 
 segment[1].buf   = 0x52aaf0
 segment[1].bufsz = 1000
 segment[1].mem   = 0xa000
 segment[1].memsz = 1000
 

I think above two segments are not being loaded at right place. Looks 
like
kexec-tools decided to load first one at physical address 0x1000 and 
other at
physical address 0xa000. For crash kernel this is not right. It should
come out of reserved memory area and that's why you are encountering the
error.
   
   Relocatability in ELF image never worked on x86_64 because of GDB but
   (so the binary was marked as ET_EXEC instead of ET_DYN).
   
   You have to use bzImage for kdump in any case.
  
  True that vmlinux is not relocatable. But one can always compile the
  vmlinux for a fixed physical address (Address in reserved region) and then
  use it?  In this case his vmlinux seems to have been compiled for physical
  address 16MB. Which should be usable if there is a reserved memory region
  at 16MB.
 
 Of course, that's true. I just thought when Cliff uses the same kernel
 for kexec -l and kexec -p, then it's the normal kernel. But I
 didn't calculate the numbers.
 
 

Its litle tricky. I think one can always do both kexec -l and kexec -p
on a vmlinux which has been built for kdump (for reserved region).

But one can not do kexec -p on normal kernel vmlinux.

So I am assuming that Cliff is running into first case. But he can tell
us more. 

Cliff, is it same vmlinux which you use for first kernel or a different
vmlinux compiled for dump capture.

Thanks
Vivek

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


Re: kexec -p loads

2008-08-27 Thread Vivek Goyal
On Wed, Aug 27, 2008 at 01:34:13PM -0500, Cliff Wickman wrote:
 
 On Wed, Aug 27, 2008 at 11:36:22AM -0400, Vivek Goyal wrote:
  On Wed, Aug 27, 2008 at 05:30:35PM +0200, Bernhard Walle wrote:
   * Vivek Goyal [2008-08-27 11:28]:
  
   I have this debugging output from my kexec:
   
   cpw: elf_x86_64_load returning entry:0x1550
   cpw: after call to file_type[i].load: nr_segments:6 entry:0x1550
   kexec_load: entry = 0x1550 flags = 1
   nr_segments = 6
   segment[0].buf   = 0x5237a0
   segment[0].bufsz = 7100
   segment[0].mem   = 0x1000
   segment[0].memsz = 9000
   
   segment[1].buf   = 0x52aaf0
   segment[1].bufsz = 1000
   segment[1].mem   = 0xa000
   segment[1].memsz = 1000
   
  
  I think above two segments are not being loaded at right place. 
  Looks like
  kexec-tools decided to load first one at physical address 0x1000 
  and other at
  physical address 0xa000. For crash kernel this is not right. It 
  should
  come out of reserved memory area and that's why you are 
  encountering the
  error.
 
 Relocatability in ELF image never worked on x86_64 because of GDB but
 (so the binary was marked as ET_EXEC instead of ET_DYN).
 
 You have to use bzImage for kdump in any case.

True that vmlinux is not relocatable. But one can always compile the
vmlinux for a fixed physical address (Address in reserved region) and 
then
use it?  In this case his vmlinux seems to have been compiled for 
physical
address 16MB. Which should be usable if there is a reserved memory 
region
at 16MB.
   
   Of course, that's true. I just thought when Cliff uses the same kernel
   for kexec -l and kexec -p, then it's the normal kernel. But I
   didn't calculate the numbers.
   
   
  
  Its litle tricky. I think one can always do both kexec -l and kexec -p
  on a vmlinux which has been built for kdump (for reserved region).
  
  But one can not do kexec -p on normal kernel vmlinux.
  
  So I am assuming that Cliff is running into first case. But he can tell
  us more. 
  
  Cliff, is it same vmlinux which you use for first kernel or a different
  vmlinux compiled for dump capture.
 
 Sorry for the lag.  I was working on the problem and not watching my mail.
 
 I'm using two different kernels.
 The kdump vmlinux is compiled with
 CONFIG_CRASH_DUMP=y
 CONFIG_PHYSICAL_START=0x100
 
 I'm using  kexec-tools-1.101

This is too old  a version. Can you try the version 2.0.0. from following
link.

http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools.tar.bz2

Thanks
Vivek

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


Re: kexec -p loads

2008-08-27 Thread Cliff Wickman
On Wed, Aug 27, 2008 at 03:01:57PM -0400, Vivek Goyal wrote:
 On Wed, Aug 27, 2008 at 01:34:13PM -0500, Cliff Wickman wrote:
  
  On Wed, Aug 27, 2008 at 11:36:22AM -0400, Vivek Goyal wrote:
   On Wed, Aug 27, 2008 at 05:30:35PM +0200, Bernhard Walle wrote:
* Vivek Goyal [2008-08-27 11:28]:
   
I have this debugging output from my kexec:

cpw: elf_x86_64_load returning entry:0x1550
cpw: after call to file_type[i].load: nr_segments:6 entry:0x1550
kexec_load: entry = 0x1550 flags = 1
nr_segments = 6
segment[0].buf   = 0x5237a0
segment[0].bufsz = 7100
segment[0].mem   = 0x1000
segment[0].memsz = 9000

segment[1].buf   = 0x52aaf0
segment[1].bufsz = 1000
segment[1].mem   = 0xa000
segment[1].memsz = 1000

   
   I think above two segments are not being loaded at right place. 
   Looks like
   kexec-tools decided to load first one at physical address 0x1000 
   and other at
   physical address 0xa000. For crash kernel this is not right. It 
   should
   come out of reserved memory area and that's why you are 
   encountering the
   error.
  
  Relocatability in ELF image never worked on x86_64 because of GDB 
  but
  (so the binary was marked as ET_EXEC instead of ET_DYN).
  
  You have to use bzImage for kdump in any case.
 
 True that vmlinux is not relocatable. But one can always compile the
 vmlinux for a fixed physical address (Address in reserved region) and 
 then
 use it?  In this case his vmlinux seems to have been compiled for 
 physical
 address 16MB. Which should be usable if there is a reserved memory 
 region
 at 16MB.

Of course, that's true. I just thought when Cliff uses the same kernel
for kexec -l and kexec -p, then it's the normal kernel. But I
didn't calculate the numbers.


   
   Its litle tricky. I think one can always do both kexec -l and kexec -p
   on a vmlinux which has been built for kdump (for reserved region).
   
   But one can not do kexec -p on normal kernel vmlinux.
   
   So I am assuming that Cliff is running into first case. But he can tell
   us more. 
   
   Cliff, is it same vmlinux which you use for first kernel or a different
   vmlinux compiled for dump capture.
  
  Sorry for the lag.  I was working on the problem and not watching my mail.
  
  I'm using two different kernels.
  The kdump vmlinux is compiled with
  CONFIG_CRASH_DUMP=y
  CONFIG_PHYSICAL_START=0x100
  
  I'm using  kexec-tools-1.101
 
 This is too old  a version. Can you try the version 2.0.0. from following
 link.
 
 http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools.tar.bz2

Ahh.  That works.
I think I got 1.101 as the latest from sourceforge.  I should've looked
at the path in Documentation/kdump/kdump.txt

Thanks.
-Cliff
-- 
Cliff Wickman
Silicon Graphics, Inc.
[EMAIL PROTECTED]
(651) 683-3824

___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec