Lines Matching refs:wd_data

125 	struct watchdog_core_data *wd_data = wdd->wd_data;  in watchdog_next_keepalive()  local
133 virt_timeout = ktime_add(wd_data->last_keepalive, in watchdog_next_keepalive()
136 virt_timeout = wd_data->open_deadline; in watchdog_next_keepalive()
155 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_update_worker() local
161 hrtimer_start(&wd_data->timer, t, HRTIMER_MODE_REL); in watchdog_update_worker()
163 hrtimer_cancel(&wd_data->timer); in watchdog_update_worker()
169 struct watchdog_core_data *wd_data = wdd->wd_data; in __watchdog_ping() local
173 earliest_keepalive = ktime_add(wd_data->last_hw_keepalive, in __watchdog_ping()
178 hrtimer_start(&wd_data->timer, in __watchdog_ping()
184 wd_data->last_hw_keepalive = now; in __watchdog_ping()
210 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_ping() local
215 set_bit(_WDOG_KEEPALIVE, &wd_data->status); in watchdog_ping()
217 wd_data->last_keepalive = ktime_get(); in watchdog_ping()
221 static bool watchdog_worker_should_ping(struct watchdog_core_data *wd_data) in watchdog_worker_should_ping() argument
223 struct watchdog_device *wdd = wd_data->wdd; in watchdog_worker_should_ping()
231 return watchdog_hw_running(wdd) && !watchdog_past_open_deadline(wd_data); in watchdog_worker_should_ping()
236 struct watchdog_core_data *wd_data; in watchdog_ping_work() local
238 wd_data = container_of(work, struct watchdog_core_data, work); in watchdog_ping_work()
240 mutex_lock(&wd_data->lock); in watchdog_ping_work()
241 if (watchdog_worker_should_ping(wd_data)) in watchdog_ping_work()
242 __watchdog_ping(wd_data->wdd); in watchdog_ping_work()
243 mutex_unlock(&wd_data->lock); in watchdog_ping_work()
248 struct watchdog_core_data *wd_data; in watchdog_timer_expired() local
250 wd_data = container_of(timer, struct watchdog_core_data, timer); in watchdog_timer_expired()
252 kthread_queue_work(watchdog_kworker, &wd_data->work); in watchdog_timer_expired()
269 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_start() local
276 set_bit(_WDOG_KEEPALIVE, &wd_data->status); in watchdog_start()
285 wd_data->last_keepalive = started_at; in watchdog_start()
343 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_get_status() local
357 if (test_bit(_WDOG_ALLOW_RELEASE, &wd_data->status)) in watchdog_get_status()
360 if (test_and_clear_bit(_WDOG_KEEPALIVE, &wd_data->status)) in watchdog_get_status()
461 struct watchdog_core_data *wd_data = wdd->wd_data; in status_show() local
464 mutex_lock(&wd_data->lock); in status_show()
466 mutex_unlock(&wd_data->lock); in status_show()
485 struct watchdog_core_data *wd_data = wdd->wd_data; in timeleft_show() local
489 mutex_lock(&wd_data->lock); in timeleft_show()
491 mutex_unlock(&wd_data->lock); in timeleft_show()
644 struct watchdog_core_data *wd_data = file->private_data; in watchdog_write() local
657 clear_bit(_WDOG_ALLOW_RELEASE, &wd_data->status); in watchdog_write()
664 set_bit(_WDOG_ALLOW_RELEASE, &wd_data->status); in watchdog_write()
670 mutex_lock(&wd_data->lock); in watchdog_write()
671 wdd = wd_data->wdd; in watchdog_write()
674 mutex_unlock(&wd_data->lock); in watchdog_write()
695 struct watchdog_core_data *wd_data = file->private_data; in watchdog_ioctl() local
702 mutex_lock(&wd_data->lock); in watchdog_ioctl()
704 wdd = wd_data->wdd; in watchdog_ioctl()
791 mutex_unlock(&wd_data->lock); in watchdog_ioctl()
807 struct watchdog_core_data *wd_data; in watchdog_open() local
814 wd_data = old_wd_data; in watchdog_open()
816 wd_data = container_of(inode->i_cdev, struct watchdog_core_data, in watchdog_open()
820 if (test_and_set_bit(_WDOG_DEV_OPEN, &wd_data->status)) in watchdog_open()
823 wdd = wd_data->wdd; in watchdog_open()
839 file->private_data = wd_data; in watchdog_open()
842 kref_get(&wd_data->kref); in watchdog_open()
851 wd_data->open_deadline = KTIME_MAX; in watchdog_open()
857 module_put(wd_data->wdd->ops->owner); in watchdog_open()
859 clear_bit(_WDOG_DEV_OPEN, &wd_data->status); in watchdog_open()
865 struct watchdog_core_data *wd_data; in watchdog_core_data_release() local
867 wd_data = container_of(kref, struct watchdog_core_data, kref); in watchdog_core_data_release()
869 kfree(wd_data); in watchdog_core_data_release()
884 struct watchdog_core_data *wd_data = file->private_data; in watchdog_release() local
889 mutex_lock(&wd_data->lock); in watchdog_release()
891 wdd = wd_data->wdd; in watchdog_release()
902 else if (test_and_clear_bit(_WDOG_ALLOW_RELEASE, &wd_data->status) || in watchdog_release()
915 clear_bit(_WDOG_DEV_OPEN, &wd_data->status); in watchdog_release()
919 mutex_unlock(&wd_data->lock); in watchdog_release()
926 module_put(wd_data->cdev.owner); in watchdog_release()
927 kref_put(&wd_data->kref, watchdog_core_data_release); in watchdog_release()
958 struct watchdog_core_data *wd_data; in watchdog_cdev_register() local
961 wd_data = kzalloc(sizeof(struct watchdog_core_data), GFP_KERNEL); in watchdog_cdev_register()
962 if (!wd_data) in watchdog_cdev_register()
964 kref_init(&wd_data->kref); in watchdog_cdev_register()
965 mutex_init(&wd_data->lock); in watchdog_cdev_register()
967 wd_data->wdd = wdd; in watchdog_cdev_register()
968 wdd->wd_data = wd_data; in watchdog_cdev_register()
973 kthread_init_work(&wd_data->work, watchdog_ping_work); in watchdog_cdev_register()
974 hrtimer_init(&wd_data->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in watchdog_cdev_register()
975 wd_data->timer.function = watchdog_timer_expired; in watchdog_cdev_register()
978 old_wd_data = wd_data; in watchdog_cdev_register()
988 kfree(wd_data); in watchdog_cdev_register()
994 cdev_init(&wd_data->cdev, &watchdog_fops); in watchdog_cdev_register()
995 wd_data->cdev.owner = wdd->ops->owner; in watchdog_cdev_register()
998 err = cdev_add(&wd_data->cdev, devno, 1); in watchdog_cdev_register()
1005 kref_put(&wd_data->kref, watchdog_core_data_release); in watchdog_cdev_register()
1011 wd_data->last_hw_keepalive = ktime_sub(ktime_get(), 1); in watchdog_cdev_register()
1012 watchdog_set_open_deadline(wd_data); in watchdog_cdev_register()
1020 kref_get(&wd_data->kref); in watchdog_cdev_register()
1022 hrtimer_start(&wd_data->timer, 0, HRTIMER_MODE_REL); in watchdog_cdev_register()
1041 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_cdev_unregister() local
1043 cdev_del(&wd_data->cdev); in watchdog_cdev_unregister()
1054 mutex_lock(&wd_data->lock); in watchdog_cdev_unregister()
1055 wd_data->wdd = NULL; in watchdog_cdev_unregister()
1056 wdd->wd_data = NULL; in watchdog_cdev_unregister()
1057 mutex_unlock(&wd_data->lock); in watchdog_cdev_unregister()
1059 hrtimer_cancel(&wd_data->timer); in watchdog_cdev_unregister()
1060 kthread_cancel_work_sync(&wd_data->work); in watchdog_cdev_unregister()
1062 kref_put(&wd_data->kref, watchdog_core_data_release); in watchdog_cdev_unregister()
1151 device_destroy(&watchdog_class, wdd->wd_data->cdev.dev); in watchdog_dev_unregister()