[RESEND] panic: Add register_panic_notifier and unregister_panic_notifier

Message ID 20221119080305.111863-1-xuqiang36@huawei.com
State New
Headers
Series [RESEND] panic: Add register_panic_notifier and unregister_panic_notifier |

Commit Message

Xu Qiang Nov. 19, 2022, 8:03 a.m. UTC
  Add two methods to manipulate panic_notifier_list and export them.
Subsequently, panic_notifier_list is changed to static variable.

Signed-off-by: Xu Qiang <xuqiang36@huawei.com>
---
 include/linux/panic_notifier.h |  3 +++
 kernel/panic.c                 | 12 ++++++++++++
 2 files changed, 15 insertions(+)
  

Comments

Guilherme G. Piccoli Nov. 20, 2022, 3:41 p.m. UTC | #1
On 19/11/2022 05:03, Xu Qiang wrote:
> Add two methods to manipulate panic_notifier_list and export them.
> Subsequently, panic_notifier_list is changed to static variable.
> 
> Signed-off-by: Xu Qiang <xuqiang36@huawei.com>
> ---
>  include/linux/panic_notifier.h |  3 +++
>  kernel/panic.c                 | 12 ++++++++++++
>  2 files changed, 15 insertions(+)
>

Hi Xu Qiang,  thanks for your patch!

Did you manage to change all users in the kernel? I only received this
email that introduces the helpers, but I don't see them getting used in
code...

Also, did you follow [0]? I stopped a bit this work since the main
reviewers got busy in other stuff (so did I), but I intend to resume
that and submit a new version. With that said, these helpers you're
adding now will eventually require to be all replaced if my work reach a
consensus and gets merged..so, personally I don't think it's a necessary
addition for now [but don't oppose as well =)]

Cheers,


Guilherme


[0]
https://lore.kernel.org/linux-kernel/20220427224924.592546-1-gpiccoli@igalia.com/

> diff --git a/include/linux/panic_notifier.h b/include/linux/panic_notifier.h
> index 41e32483d7a7..9543d498b90b 100644
> --- a/include/linux/panic_notifier.h
> +++ b/include/linux/panic_notifier.h
> @@ -5,6 +5,9 @@
>  #include <linux/notifier.h>
>  #include <linux/types.h>
>  
> +int register_panic_notifier(struct notifier_block *nb);
> +int unregister_panic_notifier(struct notifier_block *nb);
> +
>  extern struct atomic_notifier_head panic_notifier_list;
>  
>  extern bool crash_kexec_post_notifiers;
> diff --git a/kernel/panic.c b/kernel/panic.c
> index 75fe389e8814..8f34dbd389cf 100644
> --- a/kernel/panic.c
> +++ b/kernel/panic.c
> @@ -200,6 +200,18 @@ static void panic_print_sys_info(bool console_flush)
>  		ftrace_dump(DUMP_ALL);
>  }
>  
> +int register_panic_notifier(struct notifier_block *nb)
> +{
> +	return atomic_notifier_chain_register(&panic_notifier_list, nb);
> +}
> +EXPORT_SYMBOL(register_panic_notifier);
> +
> +int unregister_panic_notifier(struct notifier_block *nb)
> +{
> +	return atomic_notifier_chain_unregister(&panic_notifier_list, nb);
> +}
> +EXPORT_SYMBOL(unregister_panic_notifier);
> +
>  /**
>   *	panic - halt the system
>   *	@fmt: The text string to print
  
Andrew Morton Nov. 21, 2022, 9:57 p.m. UTC | #2
On Sat, 19 Nov 2022 08:03:05 +0000 Xu Qiang <xuqiang36@huawei.com> wrote:

> Add two methods to manipulate panic_notifier_list and export them.
> Subsequently, panic_notifier_list is changed to static variable.

Fair enough, I guess.  But...

- It would be better to include a followup patch which converts at
  least some of the existing sites, so we know the code is getting
  tested.

- Better names would be panic_notifier_register() and
  panic_notifier_unregister()

- You forgot to make panic_notifier_list static to panic.c.
  

Patch

diff --git a/include/linux/panic_notifier.h b/include/linux/panic_notifier.h
index 41e32483d7a7..9543d498b90b 100644
--- a/include/linux/panic_notifier.h
+++ b/include/linux/panic_notifier.h
@@ -5,6 +5,9 @@ 
 #include <linux/notifier.h>
 #include <linux/types.h>
 
+int register_panic_notifier(struct notifier_block *nb);
+int unregister_panic_notifier(struct notifier_block *nb);
+
 extern struct atomic_notifier_head panic_notifier_list;
 
 extern bool crash_kexec_post_notifiers;
diff --git a/kernel/panic.c b/kernel/panic.c
index 75fe389e8814..8f34dbd389cf 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -200,6 +200,18 @@  static void panic_print_sys_info(bool console_flush)
 		ftrace_dump(DUMP_ALL);
 }
 
+int register_panic_notifier(struct notifier_block *nb)
+{
+	return atomic_notifier_chain_register(&panic_notifier_list, nb);
+}
+EXPORT_SYMBOL(register_panic_notifier);
+
+int unregister_panic_notifier(struct notifier_block *nb)
+{
+	return atomic_notifier_chain_unregister(&panic_notifier_list, nb);
+}
+EXPORT_SYMBOL(unregister_panic_notifier);
+
 /**
  *	panic - halt the system
  *	@fmt: The text string to print