RE: [Fastboot] Zero size /proc/vmcore on ia64

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: linux-ia64-owner@xxxxxxxxxxxxxxx
> [mailto:linux-ia64-owner@xxxxxxxxxxxxxxx] On Behalf Of Bernhard Walle
> Sent: 2007年2月13日 5:50
> To: fastboot@xxxxxxxxxxxxxx; Linux-IA64
> Subject: Re: [Fastboot] Zero size /proc/vmcore on ia64
> 
> * Bernhard Walle <bwalle@xxxxxxx> [2007-02-12 19:57]:
> > * Zou, Nanhai <nanhai.zou@xxxxxxxxx> [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@xxxxxxx>
> 
> ---
>  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@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Sparc Linux]     [DCCP]     [Linux ARM]     [Yosemite News]     [Linux SCSI]     [Linux x86_64]     [Linux for Ham Radio]

  Powered by Linux