[v2][PATCH 2/7] book3e/kexec/kdump: enable kexec for kernel

Bhushan Bharat-R65777 R65777 at freescale.com
Tue Jul 2 15:17:39 EST 2013



> -----Original Message-----
> From: Linuxppc-dev [mailto:linuxppc-dev-
> bounces+bharat.bhushan=freescale.com at lists.ozlabs.org] On Behalf Of Tiejun Chen
> Sent: Thursday, June 20, 2013 1:23 PM
> To: benh at kernel.crashing.org
> Cc: linuxppc-dev at lists.ozlabs.org; linux-kernel at vger.kernel.org
> Subject: [v2][PATCH 2/7] book3e/kexec/kdump: enable kexec for kernel
> 
> We need to active KEXEC for book3e and bypass or convert non-book3e stuff
> in kexec coverage.
> 
> Signed-off-by: Tiejun Chen <tiejun.chen at windriver.com>
> ---
>  arch/powerpc/Kconfig                   |    2 +-
>  arch/powerpc/kernel/machine_kexec_64.c |    6 ++++++
>  arch/powerpc/kernel/misc_64.S          |    6 ++++++
>  3 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index c33e3ad..6ecf3c9 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -364,7 +364,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
> 
>  config KEXEC
>  	bool "kexec system call"
> -	depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
> +	depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) || PPC_BOOK3E
>  	help
>  	  kexec is a system call that implements the ability to shutdown your
>  	  current kernel, and to start another kernel.  It is like a reboot
> diff --git a/arch/powerpc/kernel/machine_kexec_64.c
> b/arch/powerpc/kernel/machine_kexec_64.c
> index 611acdf..ef39271 100644
> --- a/arch/powerpc/kernel/machine_kexec_64.c
> +++ b/arch/powerpc/kernel/machine_kexec_64.c
> @@ -33,6 +33,7 @@
>  int default_machine_kexec_prepare(struct kimage *image)
>  {
>  	int i;
> +#ifndef CONFIG_PPC_BOOK3E
>  	unsigned long begin, end;	/* limits of segment */
>  	unsigned long low, high;	/* limits of blocked memory range */
>  	struct device_node *node;
> @@ -41,6 +42,7 @@ int default_machine_kexec_prepare(struct kimage *image)
> 
>  	if (!ppc_md.hpte_clear_all)
>  		return -ENOENT;
> +#endif

Do we really need this function for book3e? can we have a separate function rather than multiple confusing ifdef?

-Bharat

> 
>  	/*
>  	 * Since we use the kernel fault handlers and paging code to
> @@ -51,6 +53,7 @@ int default_machine_kexec_prepare(struct kimage *image)
>  		if (image->segment[i].mem < __pa(_end))
>  			return -ETXTBSY;
> 
> +#ifndef CONFIG_PPC_BOOK3E
>  	/*
>  	 * For non-LPAR, we absolutely can not overwrite the mmu hash
>  	 * table, since we are still using the bolted entries in it to
> @@ -92,6 +95,7 @@ int default_machine_kexec_prepare(struct kimage *image)
>  				return -ETXTBSY;
>  		}
>  	}
> +#endif
> 
>  	return 0;
>  }
> @@ -367,6 +371,7 @@ void default_machine_kexec(struct kimage *image)
>  	/* NOTREACHED */
>  }
> 
> +#ifndef CONFIG_PPC_BOOK3E
>  /* Values we need to export to the second kernel via the device tree. */
>  static unsigned long htab_base;
> 
> @@ -411,3 +416,4 @@ static int __init export_htab_values(void)
>  	return 0;
>  }
>  late_initcall(export_htab_values);
> +#endif
> diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
> index 6820e45..f1a7ce7 100644
> --- a/arch/powerpc/kernel/misc_64.S
> +++ b/arch/powerpc/kernel/misc_64.S
> @@ -543,9 +543,13 @@ _GLOBAL(kexec_sequence)
>  	lhz	r25,PACAHWCPUID(r13)	/* get our phys cpu from paca */
> 
>  	/* disable interrupts, we are overwriting kernel data next */
> +#ifndef CONFIG_PPC_BOOK3E
>  	mfmsr	r3
>  	rlwinm	r3,r3,0,17,15
>  	mtmsrd	r3,1
> +#else
> +	wrteei	0
> +#endif
> 
>  	/* copy dest pages, flush whole dest image */
>  	mr	r3,r29
> @@ -567,10 +571,12 @@ _GLOBAL(kexec_sequence)
>  	li	r6,1
>  	stw	r6,kexec_flag-1b(5)
> 
> +#ifndef CONFIG_PPC_BOOK3E
>  	/* clear out hardware hash page table and tlb */
>  	ld	r5,0(r27)		/* deref function descriptor */
>  	mtctr	r5
>  	bctrl				/* ppc_md.hpte_clear_all(void); */
> +#endif
> 
>  /*
>   *   kexec image calling is:
> --
> 1.7.9.5
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev




More information about the Linuxppc-dev mailing list