2020-12-18 12:14:23

by Xiaoming Ni

[permalink] [raw]
Subject: [PATCH 0/4] Add new API is_being_panic()

Add is_being_panic() to check whether the system is in panic state.
Used to replace the global variable used to determine the panic status
in other features: hung_task ledtrig-activity ledtrig-heartbeat


Xiaoming Ni (4):
panic: Add new API is_being_panic()
hung_task: Replace "did_panic" with is_be_panic()
leds:trigger:ledtrig-activity Replace "panic_detected" with
is_be_panic()
leds:trigger:ledtrig-heartbeat: Replace "panic_heartbeats" with
is_be_panic()

drivers/leds/trigger/ledtrig-activity.c | 19 +------------------
drivers/leds/trigger/ledtrig-heartbeat.c | 19 +------------------
include/linux/kernel.h | 1 +
kernel/hung_task.c | 17 +----------------
kernel/panic.c | 6 ++++++
5 files changed, 10 insertions(+), 52 deletions(-)

--
2.27.0


2020-12-18 12:14:31

by Xiaoming Ni

[permalink] [raw]
Subject: [PATCH 2/4] hung_task: Replace "did_panic" with is_be_panic()

Replace the global variable "did_panic" with is_be_panic()

Signed-off-by: Xiaoming Ni <[email protected]>
---
kernel/hung_task.c | 17 +----------------
1 file changed, 1 insertion(+), 16 deletions(-)

diff --git a/kernel/hung_task.c b/kernel/hung_task.c
index bb2e3e15c84c..3374b993da4c 100644
--- a/kernel/hung_task.c
+++ b/kernel/hung_task.c
@@ -50,7 +50,6 @@ unsigned long __read_mostly sysctl_hung_task_check_interval_secs;

int __read_mostly sysctl_hung_task_warnings = 10;

-static int __read_mostly did_panic;
static bool hung_task_show_lock;
static bool hung_task_call_panic;
static bool hung_task_show_all_bt;
@@ -72,18 +71,6 @@ unsigned int __read_mostly sysctl_hung_task_all_cpu_backtrace;
unsigned int __read_mostly sysctl_hung_task_panic =
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE;

-static int
-hung_task_panic(struct notifier_block *this, unsigned long event, void *ptr)
-{
- did_panic = 1;
-
- return NOTIFY_DONE;
-}
-
-static struct notifier_block panic_block = {
- .notifier_call = hung_task_panic,
-};
-
static void check_hung_task(struct task_struct *t, unsigned long timeout)
{
unsigned long switch_count = t->nvcsw + t->nivcsw;
@@ -223,7 +210,7 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)
* If the system crashed already then all bets are off,
* do not report extra hung tasks:
*/
- if (test_taint(TAINT_DIE) || did_panic)
+ if (test_taint(TAINT_DIE) || unlikely(is_being_panic()))
return;

hung_task_show_lock = false;
@@ -347,8 +334,6 @@ static int watchdog(void *dummy)

static int __init hung_task_init(void)
{
- atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
-
/* Disable hung task detector on suspend */
pm_notifier(hungtask_pm_notify, 0);

--
2.27.0

2020-12-18 12:14:49

by Xiaoming Ni

[permalink] [raw]
Subject: [PATCH 3/4] leds:trigger:ledtrig-activity Replace "panic_detected" with is_be_panic()

Replace the global variable "panic_detected" with is_be_panic()

Signed-off-by: Xiaoming Ni <[email protected]>
---
drivers/leds/trigger/ledtrig-activity.c | 19 +------------------
1 file changed, 1 insertion(+), 18 deletions(-)

diff --git a/drivers/leds/trigger/ledtrig-activity.c b/drivers/leds/trigger/ledtrig-activity.c
index 14ba7faaed9e..bbacb3dbe341 100644
--- a/drivers/leds/trigger/ledtrig-activity.c
+++ b/drivers/leds/trigger/ledtrig-activity.c
@@ -17,8 +17,6 @@
#include <linux/timer.h>
#include "../leds.h"

-static int panic_detected;
-
struct activity_data {
struct timer_list timer;
struct led_classdev *led_cdev;
@@ -47,7 +45,7 @@ static void led_activity_function(struct timer_list *t)
if (test_and_clear_bit(LED_BLINK_BRIGHTNESS_CHANGE, &led_cdev->work_flags))
led_cdev->blink_brightness = led_cdev->new_blink_brightness;

- if (unlikely(panic_detected)) {
+ if (unlikely(is_being_panic())) {
/* full brightness in case of panic */
led_set_brightness_nosleep(led_cdev, led_cdev->blink_brightness);
return;
@@ -226,28 +224,15 @@ static int activity_reboot_notifier(struct notifier_block *nb,
return NOTIFY_DONE;
}

-static int activity_panic_notifier(struct notifier_block *nb,
- unsigned long code, void *unused)
-{
- panic_detected = 1;
- return NOTIFY_DONE;
-}
-
static struct notifier_block activity_reboot_nb = {
.notifier_call = activity_reboot_notifier,
};

-static struct notifier_block activity_panic_nb = {
- .notifier_call = activity_panic_notifier,
-};
-
static int __init activity_init(void)
{
int rc = led_trigger_register(&activity_led_trigger);

if (!rc) {
- atomic_notifier_chain_register(&panic_notifier_list,
- &activity_panic_nb);
register_reboot_notifier(&activity_reboot_nb);
}
return rc;
@@ -256,8 +241,6 @@ static int __init activity_init(void)
static void __exit activity_exit(void)
{
unregister_reboot_notifier(&activity_reboot_nb);
- atomic_notifier_chain_unregister(&panic_notifier_list,
- &activity_panic_nb);
led_trigger_unregister(&activity_led_trigger);
}

--
2.27.0

2020-12-18 13:42:14

by Pavel Machek

[permalink] [raw]
Subject: Re: [PATCH 2/4] hung_task: Replace "did_panic" with is_be_panic()

On Fri 2020-12-18 19:44:04, Xiaoming Ni wrote:
> Replace the global variable "did_panic" with is_be_panic()

Changelog does not match patch.

Plus.. is_being_panic is not really english. "is_paniccing" would be
closer...?

Best regards,
Pavel
--
http://www.livejournal.com/~pavelmachek


Attachments:
(No filename) (307.00 B)
signature.asc (201.00 B)
Download all attachments

2020-12-18 14:39:05

by Tetsuo Handa

[permalink] [raw]
Subject: Re: [PATCH 2/4] hung_task: Replace "did_panic" with is_be_panic()

On 2020/12/18 21:59, Pavel Machek wrote:
> On Fri 2020-12-18 19:44:04, Xiaoming Ni wrote:
> Plus.. is_being_panic is not really english. "is_paniccing" would be
> closer...?

Or in_panic() ?

2020-12-18 17:09:30

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH 2/4] hung_task: Replace "did_panic" with is_be_panic()

On 12/18/20 6:36 AM, Tetsuo Handa wrote:
> On 2020/12/18 21:59, Pavel Machek wrote:
>> On Fri 2020-12-18 19:44:04, Xiaoming Ni wrote:
>> Plus.. is_being_panic is not really english. "is_paniccing" would be
>> closer...?
>
> Or in_panic() ?
>

Yes, or in_panic_state()

--
~Randy

2020-12-20 03:01:00

by Xiaoming Ni

[permalink] [raw]
Subject: Re: [PATCH 2/4] hung_task: Replace "did_panic" with is_be_panic()

On 2020/12/19 1:06, Randy Dunlap wrote:
> On 12/18/20 6:36 AM, Tetsuo Handa wrote:
>> On 2020/12/18 21:59, Pavel Machek wrote:
>>> On Fri 2020-12-18 19:44:04, Xiaoming Ni wrote:
>>> Plus.. is_being_panic is not really english. "is_paniccing" would be
>>> closer...?
>>
>> Or in_panic() ?
>>
>
> Yes, or in_panic_state()
>

Thank you,
I'll resend the patch later on according to your suggestion.

Thanks
Xiaoming Ni
.