[PATCHv3 5/9] Initialize phys_start during early Xen setup

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Wed Nov 28 00:56:58 EST 2012


Hello Petr,

On Fri, 24 Aug 2012 17:42:24 +0200
Petr Tesarik <ptesarik at suse.cz> wrote:

> With early Xen setup, we can move the initialization of xen_phys_start
> to the setup routine. This is cleaner, as we can get rid of ifdef'ed
> arch-specific code in makedumpfile.c (which should IMO stay generic).
> 
> Signed-off-by: Petr Tesarik <ptesarik at suse.cz>
> 
> ---
>  arch/x86.c     |    9 +++++++++
>  arch/x86_64.c  |    9 +++++++++
>  makedumpfile.c |   16 ----------------
>  3 files changed, 18 insertions(+), 16 deletions(-)
> 
> --- a/arch/x86.c
> +++ b/arch/x86.c
> @@ -296,6 +296,15 @@ int get_xen_basic_info_x86(void)
>  	unsigned long frame_table_vaddr;
>  	unsigned long xen_end;
>  
> +	if (!info->xen_phys_start) {
> +		if (info->xen_crash_info_v < 2) {
> +			ERRMSG("Can't get Xen physical start address.\n"
> +			       "Please use the --xen_phys_start option.");
> +			return FALSE;
> +		}
> +		info->xen_phys_start = info->xen_crash_info.v2->xen_phys_start;
> +	}
> +

I tested for the vmcore which doesn't include xen_phys_start, then the 
error message below showed:

  $ makedumpfile_v1.5.1 -E -X --xen-syms xen-syms-2.6.18-92.el5.debug vmcore dumpfile.EX
  get_xen_basic_info_x86: Can't get Xen physical start address.
  Please use the --xen_phys_start option.
  makedumpfile Failed.
  $

So, should I understand this result as reasonable error handling ?

The reason why I have this question is because the same vmcore can be
filtered out with makedumpfile-1.5.0 or before like below:

  $ makedumpfile_v1.5.0 -E -X --xen-syms xen-syms-2.6.18-92.el5.debug vmcore dumpfile.EX
  Switched running mode from cyclic to non-cyclic,
  because the cyclic mode doesn't support Xen.
  Copying data                       : [100 %]

  The dumpfile is saved to dumpfile.EX.

  makedumpfile Completed.
  $

I have checked with grep, it seems that xen_phys_start is used for
x86_64 only. So, is the valid check really necessary for x86 ?


Thanks
Atsushi Kumagai

>  	if (SYMBOL(pgd_l2) == NOT_FOUND_SYMBOL &&
>  	    SYMBOL(pgd_l3) == NOT_FOUND_SYMBOL) {
>  		ERRMSG("Can't get pgd.\n");
> --- a/arch/x86_64.c
> +++ b/arch/x86_64.c
> @@ -361,6 +361,15 @@ int get_xen_basic_info_x86_64(void)
>  	unsigned long frame_table_vaddr;
>  	unsigned long xen_end;
>  
> + 	if (!info->xen_phys_start) {
> +		if (info->xen_crash_info_v < 2) {
> +			ERRMSG("Can't get Xen physical start address.\n"
> +			       "Please use the --xen_phys_start option.");
> +			return FALSE;
> +		}
> +		info->xen_phys_start = info->xen_crash_info.v2->xen_phys_start;
> +	}
> +
>  	if (SYMBOL(pgd_l4) == NOT_FOUND_SYMBOL) {
>  		ERRMSG("Can't get pml4.\n");
>  		return FALSE;
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -5365,20 +5365,6 @@ init_xen_crash_info(void)
>  }
>  
>  int
> -get_xen_phys_start(void)
> -{
> -	if (info->xen_phys_start)
> -		return TRUE;
> -
> -#if defined(__x86__) || defined(__x86_64__)
> -	if (info->xen_crash_info_v >= 2)
> -		info->xen_phys_start = info->xen_crash_info.v2->xen_phys_start;
> -#endif
> -
> -	return TRUE;
> -}
> -
> -int
>  get_xen_info(void)
>  {
>  	unsigned long domain;
> @@ -5877,8 +5863,6 @@ initial_xen(void)
>  		if (!read_vmcoreinfo_from_vmcore(offset, size, TRUE))
>  			return FALSE;
>  	}
> -	if (!get_xen_phys_start())
> -		return FALSE;
>  	if (!get_xen_info())
>  		return FALSE;
>  
> 
> 
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec



More information about the kexec mailing list