brintos

brintos / linux-shallow public Read only

0
0
Text · 1.2 KiB · 940b537 Raw
45 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * (c) Copyright 2021 Hewlett Packard Enterprise Development LP.4 */5 6#include <linux/hrtimer.h>7#include <linux/watchdog.h>8 9#include "watchdog_core.h"10#include "watchdog_pretimeout.h"11 12static enum hrtimer_restart watchdog_hrtimer_pretimeout(struct hrtimer *timer)13{14	struct watchdog_core_data *wd_data;15 16	wd_data = container_of(timer, struct watchdog_core_data, pretimeout_timer);17 18	watchdog_notify_pretimeout(wd_data->wdd);19	return HRTIMER_NORESTART;20}21 22void watchdog_hrtimer_pretimeout_init(struct watchdog_device *wdd)23{24	struct watchdog_core_data *wd_data = wdd->wd_data;25 26	hrtimer_init(&wd_data->pretimeout_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);27	wd_data->pretimeout_timer.function = watchdog_hrtimer_pretimeout;28}29 30void watchdog_hrtimer_pretimeout_start(struct watchdog_device *wdd)31{32	if (!(wdd->info->options & WDIOF_PRETIMEOUT) &&33	    !watchdog_pretimeout_invalid(wdd, wdd->pretimeout))34		hrtimer_start(&wdd->wd_data->pretimeout_timer,35			      ktime_set(wdd->timeout - wdd->pretimeout, 0),36			      HRTIMER_MODE_REL);37	else38		hrtimer_cancel(&wdd->wd_data->pretimeout_timer);39}40 41void watchdog_hrtimer_pretimeout_stop(struct watchdog_device *wdd)42{43	hrtimer_cancel(&wdd->wd_data->pretimeout_timer);44}45