From: Scott Wood <scottwood@freescale•com>
To: Tiejun Chen <tiejun.chen@windriver•com>
Cc: linuxppc-dev@lists•ozlabs.org, linux-kernel@vger•kernel.org
Subject: Re: [v3][PATCH 5/8] book3e/kexec/kdump: introduce a kexec kernel flag
Date: Tue, 17 Dec 2013 21:42:32 -0600 [thread overview]
Message-ID: <1387338152.3140.37.camel@snotra.buserror.net> (raw)
In-Reply-To: <1373357007-30785-6-git-send-email-tiejun.chen@windriver.com>
On Tue, 2013-07-09 at 16:03 +0800, Tiejun Chen wrote:
> We need to introduce a flag to indicate we're already running
> a kexec kernel then we can go proper path. For example, We
> shouldn't access spin_table from the bootloader to up any secondary
> cpu for kexec kernel, and kexec kernel already know how to jump to
> generic_secondary_smp_init.
>
> Signed-off-by: Tiejun Chen <tiejun.chen@windriver•com>
> ---
> arch/powerpc/include/asm/smp.h | 1 +
> arch/powerpc/kernel/head_64.S | 10 ++++++++++
> arch/powerpc/kernel/misc_64.S | 6 ++++++
> arch/powerpc/platforms/85xx/smp.c | 20 +++++++++++++++-----
> 4 files changed, 32 insertions(+), 5 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
> index ffbaabe..59165a3 100644
> --- a/arch/powerpc/include/asm/smp.h
> +++ b/arch/powerpc/include/asm/smp.h
> @@ -200,6 +200,7 @@ extern void generic_secondary_thread_init(void);
> extern unsigned long __secondary_hold_spinloop;
> extern unsigned long __secondary_hold_acknowledge;
> extern char __secondary_hold;
> +extern unsigned long __run_at_kexec;
>
> extern void __early_start(void);
> #endif /* __ASSEMBLY__ */
> diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
> index 7dc56be..0b46c9d 100644
> --- a/arch/powerpc/kernel/head_64.S
> +++ b/arch/powerpc/kernel/head_64.S
> @@ -89,6 +89,10 @@ __secondary_hold_spinloop:
> __secondary_hold_acknowledge:
> .llong 0x0
>
> + .globl __run_at_kexec
> +__run_at_kexec:
> + .llong 0x0 /* Flag for the secondary kernel from kexec. */
> +
No leading underscores please -- and why does this need to be 64-bit?
> #ifdef CONFIG_RELOCATABLE
> /* This flag is set to 1 by a loader if the kernel should run
> * at the loaded address instead of the linked address. This
> @@ -417,6 +421,12 @@ _STATIC(__after_prom_start)
> #if defined(CONFIG_PPC_BOOK3E)
> tovirt(r26,r26) /* on booke, we already run at PAGE_OFFSET */
> #endif
> +#if defined(CONFIG_KEXEC) || defined(CONFIG_CRASH_DUMP)
> + /* If relocated we need to restore this flag on that relocated address. */
> + ld r7,__run_at_kexec-_stext(r26)
> + std r7,__run_at_kexec-_stext(r26)
> +#endif
> +
> lwz r7,__run_at_load-_stext(r26)
> #if defined(CONFIG_PPC_BOOK3E)
> tophys(r26,r26) /* Restore for the remains. */
> diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
> index 20cbb98..c89aead 100644
> --- a/arch/powerpc/kernel/misc_64.S
> +++ b/arch/powerpc/kernel/misc_64.S
> @@ -619,6 +619,12 @@ _GLOBAL(kexec_sequence)
> bl .copy_and_flush /* (dest, src, copy limit, start offset) */
> 1: /* assume normal blr return */
>
> + /* notify we're going into kexec kernel for SMP. */
> + LOAD_REG_ADDR(r3,__run_at_kexec)
> + li r4,1
> + std r4,0(r3)
> + sync
> +
> /* release other cpus to the new kernel secondary start at 0x60 */
> mflr r5
> li r6,1
> diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c
> index 5ced4f5..14d461b 100644
> --- a/arch/powerpc/platforms/85xx/smp.c
> +++ b/arch/powerpc/platforms/85xx/smp.c
> @@ -150,6 +150,9 @@ static int smp_85xx_kick_cpu(int nr)
> int hw_cpu = get_hard_smp_processor_id(nr);
> int ioremappable;
> int ret = 0;
> +#ifdef CONFIG_PPC64
> + unsigned long *ptr = NULL;
> +#endif
Looks like an unnecessary initialization.
>
> WARN_ON(nr < 0 || nr >= NR_CPUS);
> WARN_ON(hw_cpu < 0 || hw_cpu >= NR_CPUS);
> @@ -238,11 +241,18 @@ out:
> #else
> smp_generic_kick_cpu(nr);
>
> - flush_spin_table(spin_table);
> - out_be32(&spin_table->pir, hw_cpu);
> - out_be64((u64 *)(&spin_table->addr_h),
> - __pa((u64)*((unsigned long long *)generic_secondary_smp_init)));
> - flush_spin_table(spin_table);
> + ptr = (unsigned long *)((unsigned long)&__run_at_kexec);
> + /* We shouldn't access spin_table from the bootloader to up any
> + * secondary cpu for kexec kernel, and kexec kernel already
> + * know how to jump to generic_secondary_smp_init.
> + */
> + if (!*ptr) {
> + flush_spin_table(spin_table);
> + out_be32(&spin_table->pir, hw_cpu);
> + out_be64((u64 *)(&spin_table->addr_h),
> + __pa((u64)*((unsigned long long *)generic_secondary_smp_init)));
> + flush_spin_table(spin_table);
> + }
> #endif
Please use a more descriptive name than "ptr".
How is all that different than just:
if (!__run_at_kexec) {
...
}
-Scott
next prev parent reply other threads:[~2013-12-18 3:42 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-09 8:03 [v3][PATCH 0/8] powerpc/book3e: support kexec and kdump Tiejun Chen
2013-07-09 8:03 ` [v3][PATCH 1/8] powerpc/book3e: rename interrupt_end_book3e with __end_interrupts Tiejun Chen
2013-07-10 5:17 ` Bhushan Bharat-R65777
2013-07-10 5:39 ` tiejun.chen
2013-12-18 3:03 ` Scott Wood
2013-07-09 8:03 ` [v3][PATCH 2/8] powerpc/book3e: support CONFIG_RELOCATABLE Tiejun Chen
2013-12-18 3:29 ` Scott Wood
2013-07-09 8:03 ` [v3][PATCH 3/8] book3e/kexec/kdump: enable kexec for kernel Tiejun Chen
2013-12-18 3:35 ` Scott Wood
2013-07-09 8:03 ` [v3][PATCH 4/8] book3e/kexec/kdump: create a 1:1 TLB mapping Tiejun Chen
2013-12-18 3:39 ` Scott Wood
2013-07-09 8:03 ` [v3][PATCH 5/8] book3e/kexec/kdump: introduce a kexec kernel flag Tiejun Chen
2013-12-18 3:42 ` Scott Wood [this message]
2013-07-09 8:03 ` [v3][PATCH 6/8] book3e/kexec/kdump: implement ppc64 kexec specfic Tiejun Chen
2013-12-18 3:45 ` Scott Wood
2013-07-09 8:03 ` [v3][PATCH 7/8] book3e/kexec/kdump: redefine VIRT_PHYS_OFFSET Tiejun Chen
2013-07-10 5:20 ` Bhushan Bharat-R65777
2013-07-10 5:46 ` tiejun.chen
2013-12-18 3:48 ` Scott Wood
2013-07-09 8:03 ` [v3][PATCH 8/8] book3e/kexec/kdump: recover "r4 = 0" to create the initial TLB Tiejun Chen
2013-12-18 3:50 ` Scott Wood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1387338152.3140.37.camel@snotra.buserror.net \
--to=scottwood@freescale$(echo .)com \
--cc=linux-kernel@vger$(echo .)kernel.org \
--cc=linuxppc-dev@lists$(echo .)ozlabs.org \
--cc=tiejun.chen@windriver$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox