* 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