diff mbox

[v12,16/16] arm64: kdump: relax BUG_ON() if more than one cpus are still active

Message ID 83db66df70fc1f7cd4da8b580d264b9320991cf0.1448403503.git.geoff@infradead.org
State New
Headers show

Commit Message

Geoff Levand Nov. 24, 2015, 10:25 p.m. UTC
From: AKASHI Takahiro <takahiro.akashi@linaro.org>


We should try best in case of kdump.
So even if not all secondary cpus have shut down, we do kdump anyway.
---
 arch/arm64/kernel/machine_kexec.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

-- 
2.5.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Comments

Will Deacon Dec. 15, 2015, 5:05 p.m. UTC | #1
On Tue, Nov 24, 2015 at 10:25:34PM +0000, Geoff Levand wrote:
> From: AKASHI Takahiro <takahiro.akashi@linaro.org>

> 

> We should try best in case of kdump.

> So even if not all secondary cpus have shut down, we do kdump anyway.

> ---

>  arch/arm64/kernel/machine_kexec.c | 8 +++++++-

>  1 file changed, 7 insertions(+), 1 deletion(-)

> 

> diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c

> index d2d7e90..482aae7 100644

> --- a/arch/arm64/kernel/machine_kexec.c

> +++ b/arch/arm64/kernel/machine_kexec.c

> @@ -148,7 +148,13 @@ void machine_kexec(struct kimage *kimage)

>  	phys_addr_t reboot_code_buffer_phys;

>  	void *reboot_code_buffer;

>  

> -	BUG_ON(num_online_cpus() > 1);

> +	if (num_online_cpus() > 1) {

> +		if (in_crash_kexec)

> +			pr_warn("kdump might fail because %d cpus are still online\n",

> +					num_online_cpus());

> +		else

> +			BUG();

> +	}


Can you just rewrite the existing BUG_ON as:

  BUG_ON(num_online_cpus() && !WARN_ON(in_crash_kexec));

?

Will

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
AKASHI Takahiro Dec. 16, 2015, 5:51 a.m. UTC | #2
On 12/16/2015 02:05 AM, Will Deacon wrote:
> On Tue, Nov 24, 2015 at 10:25:34PM +0000, Geoff Levand wrote:

>> From: AKASHI Takahiro <takahiro.akashi@linaro.org>

>>

>> We should try best in case of kdump.

>> So even if not all secondary cpus have shut down, we do kdump anyway.

>> ---

>>   arch/arm64/kernel/machine_kexec.c | 8 +++++++-

>>   1 file changed, 7 insertions(+), 1 deletion(-)

>>

>> diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c

>> index d2d7e90..482aae7 100644

>> --- a/arch/arm64/kernel/machine_kexec.c

>> +++ b/arch/arm64/kernel/machine_kexec.c

>> @@ -148,7 +148,13 @@ void machine_kexec(struct kimage *kimage)

>>   	phys_addr_t reboot_code_buffer_phys;

>>   	void *reboot_code_buffer;

>>

>> -	BUG_ON(num_online_cpus() > 1);

>> +	if (num_online_cpus() > 1) {

>> +		if (in_crash_kexec)

>> +			pr_warn("kdump might fail because %d cpus are still online\n",

>> +					num_online_cpus());

>> +		else

>> +			BUG();

>> +	}

>

> Can you just rewrite the existing BUG_ON as:

>

>    BUG_ON(num_online_cpus() && !WARN_ON(in_crash_kexec));

>

> ?


Yes, but
      BUG_ON((num_online_cpus() > 1) && !WARN_ON(in_crash_kexec));

Thanks,
-Takahiro AKASHI

> Will

>


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff mbox

Patch

diff --git a/arch/arm64/kernel/machine_kexec.c b/arch/arm64/kernel/machine_kexec.c
index d2d7e90..482aae7 100644
--- a/arch/arm64/kernel/machine_kexec.c
+++ b/arch/arm64/kernel/machine_kexec.c
@@ -148,7 +148,13 @@  void machine_kexec(struct kimage *kimage)
 	phys_addr_t reboot_code_buffer_phys;
 	void *reboot_code_buffer;
 
-	BUG_ON(num_online_cpus() > 1);
+	if (num_online_cpus() > 1) {
+		if (in_crash_kexec)
+			pr_warn("kdump might fail because %d cpus are still online\n",
+					num_online_cpus());
+		else
+			BUG();
+	}
 
 	reboot_code_buffer_phys = page_to_phys(kimage->control_code_page);
 	reboot_code_buffer = phys_to_virt(reboot_code_buffer_phys);