[PATCH] detect Xen dom0 properly to avoid conflict with pv_on_hvm domU

Simon Horman horms at verge.net.au
Thu May 5 08:20:03 EDT 2011


On Wed, May 04, 2011 at 06:32:32PM +0200, Olaf Hering wrote:
> A Xen HVM guest with PV drivers loaded has also a /proc/xen directory.
> But such a guest is an ordinary PC and the special handling for dom0
> breaks kdump in this environment.
> Test for /proc/xen/capabilities instead and cache the result.
> 
> Also make two variables static, they are only used in this file.
> 
> Signed-off-by: Olaf Hering <olaf at aepfle.de>
> 
> ---
>  kexec/crashdump-xen.c |   15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
> 
> Index: kexec-tools-0.8.15/kexec/crashdump-xen.c
> ===================================================================
> --- kexec-tools-0.8.15.orig/kexec/crashdump-xen.c
> +++ kexec-tools-0.8.15/kexec/crashdump-xen.c
> @@ -25,14 +25,19 @@ struct crash_note_info {
>  	unsigned long length;
>  };
>  
> -int xen_phys_cpus = 0;
> -struct crash_note_info *xen_phys_notes;
> +static int xen_phys_cpus;
> +static struct crash_note_info *xen_phys_notes;
> +static int is_dom0;

I think you need to explicitly initialise is_dom0 to 0.

Alternatively, is it really such a burden to call access()
each time xen_present() is called?  (I'm ambivalent with regards to this).

>  
>  int xen_present(void)
>  {
> -	struct stat buf;
> -
> -	return stat("/proc/xen", &buf) == 0;
> +	if (!is_dom0) {
> +		if (access("/proc/xen/capabilities", F_OK) == 0)
> +			is_dom0 = 1;
> +		else
> +			is_dom0 = -1;
> +	}
> +	return is_dom0 > 0;
>  }
>  
>  unsigned long xen_architecture(struct crash_elf_info *elf_info)
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec
> 



More information about the kexec mailing list