public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [Fastboot] Zero size /proc/vmcore on ia64
@ 2007-02-12 18:57 Bernhard Walle
  2007-02-12 21:49 ` Bernhard Walle
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Bernhard Walle @ 2007-02-12 18:57 UTC (permalink / raw)
  To: linux-ia64

* Zou, Nanhai <nanhai.zou@intel.com> [2007-02-09 00:45]:
>  I have not implement serial print in purgatory code yet, see
>  comments in purgatory/arch/ia64/console-ia64.c However from your
>  print, I can see last 2 entries of efi mem map are corrupt. 

I have the same problem (corrupted memory map entries), and the cause
was in kexec-tools, patch below. I'm not sure if the fix is right, at
least the problem is the uninitialised value of size. :)

Signed-off-by: Bernhard Walle <bwalle@suse.de>

---
 crashdump-ia64.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kexec/arch/ia64/crashdump-ia64.c b/kexec/arch/ia64/crashdump-ia64.c
index 14e95a6..be61dc1 100644
--- a/kexec/arch/ia64/crashdump-ia64.c
+++ b/kexec/arch/ia64/crashdump-ia64.c
@@ -221,7 +221,7 @@ int load_crashdump_segments(struct kexec_info *info, struct mem_ehdr *ehdr,
 	struct memory_range *mem_range;
 	int nr_ranges;
 	unsigned long sz;
-	size_t size;
+	size_t size = 0;
 	void *tmp;
 	if (info->kexec_flags & KEXEC_ON_CRASH ) {
 		if (get_crash_memory_ranges(&mem_range, &nr_ranges) = 0) {
@@ -238,7 +238,7 @@ int load_crashdump_segments(struct kexec_info *info, struct mem_ehdr *ehdr,
 			elfcorehdr = add_buffer(info, tmp, sz, sz, EFI_PAGE_SIZE, min_base,
 					max_addr, -1);
 			loaded_segments[loaded_segments_num].start = elfcorehdr;
-			loaded_segments[loaded_segments_num].end = elfcorehdr + size;
+			loaded_segments[loaded_segments_num].end = elfcorehdr + sz;
 			loaded_segments[loaded_segments_num].reserved = 1;
 			loaded_segments_num++;
 			cmdline_add_elfcorehdr(cmdline, elfcorehdr);

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Fastboot] Zero size /proc/vmcore on ia64
  2007-02-12 18:57 [Fastboot] Zero size /proc/vmcore on ia64 Bernhard Walle
@ 2007-02-12 21:49 ` Bernhard Walle
  2007-02-13  1:08 ` Zou, Nanhai
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Bernhard Walle @ 2007-02-12 21:49 UTC (permalink / raw)
  To: linux-ia64

* Bernhard Walle <bwalle@suse.de> [2007-02-12 19:57]:
> * Zou, Nanhai <nanhai.zou@intel.com> [2007-02-09 00:45]:
> >  I have not implement serial print in purgatory code yet, see
> >  comments in purgatory/arch/ia64/console-ia64.c However from your
> >  print, I can see last 2 entries of efi mem map are corrupt. 
> 
> I have the same problem (corrupted memory map entries), and the cause
> was in kexec-tools, patch below. I'm not sure if the fix is right, at
> least the problem is the uninitialised value of size. :)

But that patch doesn't fix the zero-size problem, it just fixes the
invalid EFI map problem. That patch (against kexec-tools, not against
the kernel) fixes both.

The problem is simply that the space for the core header doesn't
occupy a EFI page.

Signed-off-by: Bernhard Walle <bwalle@suse.de>

---
 crashdump-ia64.c |   14 ++++++++++----
 kexec-ia64.h     |    6 +++++-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/kexec/arch/ia64/crashdump-ia64.c b/kexec/arch/ia64/crashdump-ia64.c
index 14e95a6..e3d8b41 100644
--- a/kexec/arch/ia64/crashdump-ia64.c
+++ b/kexec/arch/ia64/crashdump-ia64.c
@@ -220,8 +220,8 @@ int load_crashdump_segments(struct kexec_info *info, struct mem_ehdr *ehdr,
 {
 	struct memory_range *mem_range;
 	int nr_ranges;
-	unsigned long sz;
-	size_t size;
+	unsigned long sz, memsz;
+	size_t size = 0;
 	void *tmp;
 	if (info->kexec_flags & KEXEC_ON_CRASH ) {
 		if (get_crash_memory_ranges(&mem_range, &nr_ranges) = 0) {
@@ -235,10 +235,16 @@ int load_crashdump_segments(struct kexec_info *info, struct mem_ehdr *ehdr,
 						       &tmp, &sz) < 0)
 				return -1;
 
-			elfcorehdr = add_buffer(info, tmp, sz, sz, EFI_PAGE_SIZE, min_base,
+			/* round sz up */
+			if (sz != ((sz >> EFI_PAGE_SHIFT) << EFI_PAGE_SHIFT))
+				memsz = ((sz >> EFI_PAGE_SHIFT) + 1) << EFI_PAGE_SHIFT;
+			else
+				memsz = sz;
+
+			elfcorehdr = add_buffer(info, tmp, sz, memsz, EFI_PAGE_SIZE, min_base,
 					max_addr, -1);
 			loaded_segments[loaded_segments_num].start = elfcorehdr;
-			loaded_segments[loaded_segments_num].end = elfcorehdr + size;
+			loaded_segments[loaded_segments_num].end = elfcorehdr + memsz;
 			loaded_segments[loaded_segments_num].reserved = 1;
 			loaded_segments_num++;
 			cmdline_add_elfcorehdr(cmdline, elfcorehdr);
diff --git a/kexec/arch/ia64/kexec-ia64.h b/kexec/arch/ia64/kexec-ia64.h
index 176d5f9..28a728b 100644
--- a/kexec/arch/ia64/kexec-ia64.h
+++ b/kexec/arch/ia64/kexec-ia64.h
@@ -10,6 +10,10 @@ int update_loaded_segments(struct kexec_info *info, struct mem_ehdr *ehdr);
 void move_loaded_segments(struct kexec_info *info, struct mem_ehdr *ehdr,
 			  unsigned long addr);
 
-#define EFI_PAGE_SIZE	  (1UL<<12)
+#define EFI_PAGE_SHIFT		12
+
+#define EFI_PAGE_SIZE	  (1UL<<EFI_PAGE_SHIFT)
 #define ELF_PAGE_SIZE	  (1UL<<16)
+
+
 #endif /* KEXEC_IA64_H */

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* RE: [Fastboot] Zero size /proc/vmcore on ia64
  2007-02-12 18:57 [Fastboot] Zero size /proc/vmcore on ia64 Bernhard Walle
  2007-02-12 21:49 ` Bernhard Walle
@ 2007-02-13  1:08 ` Zou, Nanhai
  2007-02-14  1:38 ` Horms
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Zou, Nanhai @ 2007-02-13  1:08 UTC (permalink / raw)
  To: linux-ia64

> -----Original Message-----
> From: linux-ia64-owner@vger.kernel.org
> [mailto:linux-ia64-owner@vger.kernel.org] On Behalf Of Bernhard Walle
> Sent: 2007Äê2ÔÂ13ÈÕ 5:50
> To: fastboot@lists.osdl.org; Linux-IA64
> Subject: Re: [Fastboot] Zero size /proc/vmcore on ia64
> 
> * Bernhard Walle <bwalle@suse.de> [2007-02-12 19:57]:
> > * Zou, Nanhai <nanhai.zou@intel.com> [2007-02-09 00:45]:
> > >  I have not implement serial print in purgatory code yet, see
> > >  comments in purgatory/arch/ia64/console-ia64.c However from your
> > >  print, I can see last 2 entries of efi mem map are corrupt.
> >
> > I have the same problem (corrupted memory map entries), and the cause
> > was in kexec-tools, patch below. I'm not sure if the fix is right, at
> > least the problem is the uninitialised value of size. :)
> 
> But that patch doesn't fix the zero-size problem, it just fixes the
> invalid EFI map problem. That patch (against kexec-tools, not against
> the kernel) fixes both.
> 
> The problem is simply that the space for the core header doesn't
> occupy a EFI page.
> 
> Signed-off-by: Bernhard Walle <bwalle@suse.de>
> 
> ---
>  crashdump-ia64.c |   14 ++++++++++----
>  kexec-ia64.h     |    6 +++++-
>  2 files changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/kexec/arch/ia64/crashdump-ia64.c
> b/kexec/arch/ia64/crashdump-ia64.c
> index 14e95a6..e3d8b41 100644
> --- a/kexec/arch/ia64/crashdump-ia64.c
> +++ b/kexec/arch/ia64/crashdump-ia64.c
> @@ -220,8 +220,8 @@ int load_crashdump_segments(struct kexec_info *info,
> struct mem_ehdr *ehdr,
>  {
>  	struct memory_range *mem_range;
>  	int nr_ranges;
> -	unsigned long sz;
> -	size_t size;
> +	unsigned long sz, memsz;
> +	size_t size = 0;
>  	void *tmp;
>  	if (info->kexec_flags & KEXEC_ON_CRASH ) {
>  		if (get_crash_memory_ranges(&mem_range, &nr_ranges) = 0) {
> @@ -235,10 +235,16 @@ int load_crashdump_segments(struct kexec_info *info,
> struct mem_ehdr *ehdr,
>  						       &tmp, &sz) < 0)
>  				return -1;
> 
> -			elfcorehdr = add_buffer(info, tmp, sz, sz, EFI_PAGE_SIZE,
> min_base,
> +			/* round sz up */
> +			if (sz != ((sz >> EFI_PAGE_SHIFT) << EFI_PAGE_SHIFT))
> +				memsz = ((sz >> EFI_PAGE_SHIFT) + 1) << EFI_PAGE_SHIFT;
> +			else
> +				memsz = sz;
> +
> +			elfcorehdr = add_buffer(info, tmp, sz, memsz, EFI_PAGE_SIZE,
> min_base,
>  					max_addr, -1);


  The kexec-tools version seems to be different.
  In my local version the size is aligned, there is size = (size + EFI_PAGE_SIZE - 1) & ~(EFI_PAGE_SIZE -1); so that is why I did not see this issue, someone has changed the code...
  Anyway you can round size to page size like this instead of if else, this will save 3 lines of code .:)

  Thanks
  Zou Nan hai 

>  			loaded_segments[loaded_segments_num].start = elfcorehdr;
> -			loaded_segments[loaded_segments_num].end = elfcorehdr + size;
> +			loaded_segments[loaded_segments_num].end = elfcorehdr + memsz;
>  			loaded_segments[loaded_segments_num].reserved = 1;
>  			loaded_segments_num++;
>  			cmdline_add_elfcorehdr(cmdline, elfcorehdr);
> diff --git a/kexec/arch/ia64/kexec-ia64.h b/kexec/arch/ia64/kexec-ia64.h
> index 176d5f9..28a728b 100644
> --- a/kexec/arch/ia64/kexec-ia64.h
> +++ b/kexec/arch/ia64/kexec-ia64.h
> @@ -10,6 +10,10 @@ int update_loaded_segments(struct kexec_info *info, struct
> mem_ehdr *ehdr);
>  void move_loaded_segments(struct kexec_info *info, struct mem_ehdr *ehdr,
>  			  unsigned long addr);
> 
> -#define EFI_PAGE_SIZE	  (1UL<<12)
> +#define EFI_PAGE_SHIFT		12
> +
> +#define EFI_PAGE_SIZE	  (1UL<<EFI_PAGE_SHIFT)
>  #define ELF_PAGE_SIZE	  (1UL<<16)
> +
> +
>  #endif /* KEXEC_IA64_H */
> -
> To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Fastboot] Zero size /proc/vmcore on ia64
  2007-02-12 18:57 [Fastboot] Zero size /proc/vmcore on ia64 Bernhard Walle
  2007-02-12 21:49 ` Bernhard Walle
  2007-02-13  1:08 ` Zou, Nanhai
@ 2007-02-14  1:38 ` Horms
  2007-02-14 19:59 ` Bernhard Walle
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Horms @ 2007-02-14  1:38 UTC (permalink / raw)
  To: linux-ia64

On Tue, Feb 13, 2007 at 06:03:20PM +0100, Bernhard Walle wrote:
> > Index: kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c
> > =================================> > --- kexec-tools-bw.orig/kexec/arch/ia64/crashdump-ia64.c	2007-02-13 17:39:18.000000000 +0900
> > +++ kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c	2007-02-13 18:09:44.000000000 +0900
> > @@ -232,13 +232,14 @@
> >  			if (crash_create_elf64_headers(info, &elf_info,
> >  						       crash_memory_range,
> >  						       nr_ranges,
> > -						       &tmp, &sz) < 0)
> > +						       &tmp, &sz,
> > +						       4096) < 0)
> 
> Why not using EFI_PAGE_SIZE here? It would also be good to find a
> suitable constant name for 1024.

Indeed, I meant to use EFI_PAGE_SIZE instead of 4096.
I'll fix that up and apply.

As for a good constant name, I'm open to suggestions.

-- 
Horms
  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Fastboot] Zero size /proc/vmcore on ia64
  2007-02-12 18:57 [Fastboot] Zero size /proc/vmcore on ia64 Bernhard Walle
                   ` (2 preceding siblings ...)
  2007-02-14  1:38 ` Horms
@ 2007-02-14 19:59 ` Bernhard Walle
  2007-02-15  2:15 ` Magnus Damm
  2007-02-15  2:28 ` Horms
  5 siblings, 0 replies; 7+ messages in thread
From: Bernhard Walle @ 2007-02-14 19:59 UTC (permalink / raw)
  To: linux-ia64

* Horms <horms@verge.net.au> [2007-02-14 02:38]:
> On Tue, Feb 13, 2007 at 06:03:20PM +0100, Bernhard Walle wrote:
> > > Index: kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c
> > > =================================> > > --- kexec-tools-bw.orig/kexec/arch/ia64/crashdump-ia64.c	2007-02-13 17:39:18.000000000 +0900
> > > +++ kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c	2007-02-13 18:09:44.000000000 +0900
> > > @@ -232,13 +232,14 @@
> > >  			if (crash_create_elf64_headers(info, &elf_info,
> > >  						       crash_memory_range,
> > >  						       nr_ranges,
> > > -						       &tmp, &sz) < 0)
> > > +						       &tmp, &sz,
> > > +						       4096) < 0)
> > 
> > Why not using EFI_PAGE_SIZE here? It would also be good to find a
> > suitable constant name for 1024.
> 
> Indeed, I meant to use EFI_PAGE_SIZE instead of 4096.
> I'll fix that up and apply.
> 
> As for a good constant name, I'm open to suggestions.

Hmmm ..., I don't know why there must be an alignment to 1024 on i386
and x86_64, Vivek?

Regards,
Bernhard

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Fastboot] Zero size /proc/vmcore on ia64
  2007-02-12 18:57 [Fastboot] Zero size /proc/vmcore on ia64 Bernhard Walle
                   ` (3 preceding siblings ...)
  2007-02-14 19:59 ` Bernhard Walle
@ 2007-02-15  2:15 ` Magnus Damm
  2007-02-15  2:28 ` Horms
  5 siblings, 0 replies; 7+ messages in thread
From: Magnus Damm @ 2007-02-15  2:15 UTC (permalink / raw)
  To: linux-ia64

On 2/15/07, Bernhard Walle <bwalle@novell.com> wrote:
> * Horms <horms@verge.net.au> [2007-02-14 02:38]:
> > On Tue, Feb 13, 2007 at 06:03:20PM +0100, Bernhard Walle wrote:
> > > > Index: kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c
> > > > =================================> > > > --- kexec-tools-bw.orig/kexec/arch/ia64/crashdump-ia64.c  2007-02-13 17:39:18.000000000 +0900
> > > > +++ kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c       2007-02-13 18:09:44.000000000 +0900
> > > > @@ -232,13 +232,14 @@
> > > >                   if (crash_create_elf64_headers(info, &elf_info,
> > > >                                                  crash_memory_range,
> > > >                                                  nr_ranges,
> > > > -                                                &tmp, &sz) < 0)
> > > > +                                                &tmp, &sz,
> > > > +                                                4096) < 0)
> > >
> > > Why not using EFI_PAGE_SIZE here? It would also be good to find a
> > > suitable constant name for 1024.
> >
> > Indeed, I meant to use EFI_PAGE_SIZE instead of 4096.
> > I'll fix that up and apply.
> >
> > As for a good constant name, I'm open to suggestions.
>
> Hmmm ..., I don't know why there must be an alignment to 1024 on i386
> and x86_64, Vivek?

The following comment explains it pretty well:

-       /*
-        * The kernel command line option memmap= requires 1k granularity,
-        * therefore we align the size to 1024 here.
-        */
-
-       align = 1024;

The comment was unfortunately removed by one of the patches in this
thread, and I think your question is a good proof that we need the
comment. I asked the same thing a few months ago too. =)

/ magnus

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Fastboot] Zero size /proc/vmcore on ia64
  2007-02-12 18:57 [Fastboot] Zero size /proc/vmcore on ia64 Bernhard Walle
                   ` (4 preceding siblings ...)
  2007-02-15  2:15 ` Magnus Damm
@ 2007-02-15  2:28 ` Horms
  5 siblings, 0 replies; 7+ messages in thread
From: Horms @ 2007-02-15  2:28 UTC (permalink / raw)
  To: linux-ia64

On Thu, Feb 15, 2007 at 11:15:56AM +0900, Magnus Damm wrote:
> On 2/15/07, Bernhard Walle <bwalle@novell.com> wrote:
> >* Horms <horms@verge.net.au> [2007-02-14 02:38]:
> >> On Tue, Feb 13, 2007 at 06:03:20PM +0100, Bernhard Walle wrote:
> >> > > Index: kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c
> >> > > =================================> >> > > --- kexec-tools-bw.orig/kexec/arch/ia64/crashdump-ia64.c  2007-02-13 
> >17:39:18.000000000 +0900
> >> > > +++ kexec-tools-bw/kexec/arch/ia64/crashdump-ia64.c       2007-02-13 
> >18:09:44.000000000 +0900
> >> > > @@ -232,13 +232,14 @@
> >> > >                   if (crash_create_elf64_headers(info, &elf_info,
> >> > >                                                  crash_memory_range,
> >> > >                                                  nr_ranges,
> >> > > -                                                &tmp, &sz) < 0)
> >> > > +                                                &tmp, &sz,
> >> > > +                                                4096) < 0)
> >> >
> >> > Why not using EFI_PAGE_SIZE here? It would also be good to find a
> >> > suitable constant name for 1024.
> >>
> >> Indeed, I meant to use EFI_PAGE_SIZE instead of 4096.
> >> I'll fix that up and apply.
> >>
> >> As for a good constant name, I'm open to suggestions.
> >
> >Hmmm ..., I don't know why there must be an alignment to 1024 on i386
> >and x86_64, Vivek?
> 
> The following comment explains it pretty well:
> 
> -       /*
> -        * The kernel command line option memmap= requires 1k granularity,
> -        * therefore we align the size to 1024 here.
> -        */
> -
> -       align = 1024;
> 
> The comment was unfortunately removed by one of the patches in this
> thread, and I think your question is a good proof that we need the
> comment. I asked the same thing a few months ago too. =)

If you can work out a good place to put the comment, I'll put it back in :-)

-- 
Horms
  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2007-02-15  2:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-12 18:57 [Fastboot] Zero size /proc/vmcore on ia64 Bernhard Walle
2007-02-12 21:49 ` Bernhard Walle
2007-02-13  1:08 ` Zou, Nanhai
2007-02-14  1:38 ` Horms
2007-02-14 19:59 ` Bernhard Walle
2007-02-15  2:15 ` Magnus Damm
2007-02-15  2:28 ` Horms

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox