[Devel] [PATCH RH7] fence-watchdog: return back message printing about fencing
Kirill Tkhai
ktkhai at virtuozzo.com
Wed Sep 14 08:08:49 PDT 2016
On 14.09.2016 13:10, Pavel Tikhomirov wrote:
> Use stock panic for crash and schedule work for reboot:
>
> We've temporary stopped printing the message about fencing
> as that caused problems in video card driver which needs to
> vmalloc but can not do so in_interrupt() context.(reproduces
> rarely 1/10 when triger fence watchdog from net_rx_action)
>
> So now we try to use stock panic's print to deliver message
> about fencing in kernel log.(checked 20 times - no reproduce)
>
> Also we need to print message for reboot action, for that matter
> we can schedule work for it same as for poweroff action as all
> outgoing network packets will be droped after time exhausted.
>
> Pity that when call panic we will not get modules list as in
> oops, all other relevant info seem to stay in current output.
>
> https://jira.sw.ru/browse/PSBM-50006
> Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
Acked-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> kernel/fence-watchdog.c | 31 +++++++++++++------------------
> 1 file changed, 13 insertions(+), 18 deletions(-)
>
> diff --git a/kernel/fence-watchdog.c b/kernel/fence-watchdog.c
> index 622cd53..f5c2347f 100644
> --- a/kernel/fence-watchdog.c
> +++ b/kernel/fence-watchdog.c
> @@ -42,36 +42,31 @@ DEFINE_VVAR(volatile unsigned long, fence_wdog_jiffies64) = MAX_U64;
> static int fence_wdog_action = FENCE_WDOG_CRASH;
> static atomic_t not_fenced = ATOMIC_INIT(-1);
>
> -static void do_halt(struct work_struct *dummy)
> +static void do_halt_or_reboot(struct work_struct *dummy)
> {
> printk(KERN_EMERG"fence-watchdog: %s\n",
> action_names[fence_wdog_action]);
> - kernel_halt();
> -}
> -
> -static DECLARE_WORK(halt_work, do_halt);
> -
> -void fence_wdog_do_fence(void)
> -{
> - char *killer = NULL;
> -
> switch (fence_wdog_action) {
> - case FENCE_WDOG_CRASH:
> - panic_on_oops = 1;
> - wmb();
> - *killer = 1;
> - break;
> case FENCE_WDOG_REBOOT:
> - lockdep_off();
> - local_irq_enable();
> emergency_restart();
> break;
> case FENCE_WDOG_POWEROFF:
> - schedule_work(&halt_work);
> + kernel_halt();
> break;
> }
> }
>
> +static DECLARE_WORK(halt_or_reboot_work, do_halt_or_reboot);
> +
> +void fence_wdog_do_fence(void)
> +{
> + if (fence_wdog_action == FENCE_WDOG_CRASH)
> + panic("fence-watchdog: %s\n",
> + action_names[fence_wdog_action]);
> + else
> + schedule_work(&halt_or_reboot_work);
> +}
> +
> inline int fence_wdog_check_timer(void)
> {
> if (unlikely(get_jiffies_64() > fence_wdog_jiffies64 &&
>
More information about the Devel
mailing list