Lines Matching refs:wd_data

101 	struct watchdog_core_data *wd_data = wdd->wd_data;  in watchdog_next_keepalive()  local
109 virt_timeout = ktime_add(wd_data->last_keepalive, in watchdog_next_keepalive()
112 virt_timeout = wd_data->open_deadline; in watchdog_next_keepalive()
131 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_update_worker() local
137 hrtimer_start(&wd_data->timer, t, in watchdog_update_worker()
140 hrtimer_cancel(&wd_data->timer); in watchdog_update_worker()
146 struct watchdog_core_data *wd_data = wdd->wd_data; in __watchdog_ping() local
150 earliest_keepalive = ktime_add(wd_data->last_hw_keepalive, in __watchdog_ping()
155 hrtimer_start(&wd_data->timer, in __watchdog_ping()
161 wd_data->last_hw_keepalive = now; in __watchdog_ping()
193 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_ping() local
198 set_bit(_WDOG_KEEPALIVE, &wd_data->status); in watchdog_ping()
200 wd_data->last_keepalive = ktime_get(); in watchdog_ping()
204 static bool watchdog_worker_should_ping(struct watchdog_core_data *wd_data) in watchdog_worker_should_ping() argument
206 struct watchdog_device *wdd = wd_data->wdd; in watchdog_worker_should_ping()
214 return watchdog_hw_running(wdd) && !watchdog_past_open_deadline(wd_data); in watchdog_worker_should_ping()
219 struct watchdog_core_data *wd_data; in watchdog_ping_work() local
221 wd_data = container_of(work, struct watchdog_core_data, work); in watchdog_ping_work()
223 mutex_lock(&wd_data->lock); in watchdog_ping_work()
224 if (watchdog_worker_should_ping(wd_data)) in watchdog_ping_work()
225 __watchdog_ping(wd_data->wdd); in watchdog_ping_work()
226 mutex_unlock(&wd_data->lock); in watchdog_ping_work()
231 struct watchdog_core_data *wd_data; in watchdog_timer_expired() local
233 wd_data = container_of(timer, struct watchdog_core_data, timer); in watchdog_timer_expired()
235 kthread_queue_work(watchdog_kworker, &wd_data->work); in watchdog_timer_expired()
250 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_start() local
257 set_bit(_WDOG_KEEPALIVE, &wd_data->status); in watchdog_start()
272 wd_data->last_keepalive = started_at; in watchdog_start()
273 wd_data->last_hw_keepalive = started_at; in watchdog_start()
333 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_get_status() local
347 if (test_bit(_WDOG_ALLOW_RELEASE, &wd_data->status)) in watchdog_get_status()
350 if (test_and_clear_bit(_WDOG_KEEPALIVE, &wd_data->status)) in watchdog_get_status()
436 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_get_timeleft() local
437 s64 last_keepalive_ms = ktime_ms_delta(ktime_get(), wd_data->last_keepalive); in watchdog_get_timeleft()
479 struct watchdog_core_data *wd_data = wdd->wd_data; in status_show() local
482 mutex_lock(&wd_data->lock); in status_show()
484 mutex_unlock(&wd_data->lock); in status_show()
503 struct watchdog_core_data *wd_data = wdd->wd_data; in timeleft_show() local
506 mutex_lock(&wd_data->lock); in timeleft_show()
508 mutex_unlock(&wd_data->lock); in timeleft_show()
697 struct watchdog_core_data *wd_data = file->private_data; in watchdog_write() local
710 clear_bit(_WDOG_ALLOW_RELEASE, &wd_data->status); in watchdog_write()
717 set_bit(_WDOG_ALLOW_RELEASE, &wd_data->status); in watchdog_write()
723 mutex_lock(&wd_data->lock); in watchdog_write()
724 wdd = wd_data->wdd; in watchdog_write()
727 mutex_unlock(&wd_data->lock); in watchdog_write()
750 struct watchdog_core_data *wd_data = file->private_data; in watchdog_ioctl() local
757 mutex_lock(&wd_data->lock); in watchdog_ioctl()
759 wdd = wd_data->wdd; in watchdog_ioctl()
844 mutex_unlock(&wd_data->lock); in watchdog_ioctl()
861 struct watchdog_core_data *wd_data; in watchdog_open() local
868 wd_data = old_wd_data; in watchdog_open()
870 wd_data = container_of(inode->i_cdev, struct watchdog_core_data, in watchdog_open()
874 if (test_and_set_bit(_WDOG_DEV_OPEN, &wd_data->status)) in watchdog_open()
877 wdd = wd_data->wdd; in watchdog_open()
893 file->private_data = wd_data; in watchdog_open()
896 get_device(&wd_data->dev); in watchdog_open()
905 wd_data->open_deadline = KTIME_MAX; in watchdog_open()
911 module_put(wd_data->wdd->ops->owner); in watchdog_open()
913 clear_bit(_WDOG_DEV_OPEN, &wd_data->status); in watchdog_open()
919 struct watchdog_core_data *wd_data; in watchdog_core_data_release() local
921 wd_data = container_of(dev, struct watchdog_core_data, dev); in watchdog_core_data_release()
923 kfree(wd_data); in watchdog_core_data_release()
939 struct watchdog_core_data *wd_data = file->private_data; in watchdog_release() local
944 mutex_lock(&wd_data->lock); in watchdog_release()
946 wdd = wd_data->wdd; in watchdog_release()
957 else if (test_and_clear_bit(_WDOG_ALLOW_RELEASE, &wd_data->status) || in watchdog_release()
970 clear_bit(_WDOG_DEV_OPEN, &wd_data->status); in watchdog_release()
974 mutex_unlock(&wd_data->lock); in watchdog_release()
981 module_put(wd_data->cdev.owner); in watchdog_release()
982 put_device(&wd_data->dev); in watchdog_release()
1019 struct watchdog_core_data *wd_data; in watchdog_cdev_register() local
1022 wd_data = kzalloc_obj(struct watchdog_core_data); in watchdog_cdev_register()
1023 if (!wd_data) in watchdog_cdev_register()
1025 mutex_init(&wd_data->lock); in watchdog_cdev_register()
1027 wd_data->wdd = wdd; in watchdog_cdev_register()
1028 wdd->wd_data = wd_data; in watchdog_cdev_register()
1031 kfree(wd_data); in watchdog_cdev_register()
1035 device_initialize(&wd_data->dev); in watchdog_cdev_register()
1036 wd_data->dev.devt = MKDEV(MAJOR(watchdog_devt), wdd->id); in watchdog_cdev_register()
1037 wd_data->dev.class = &watchdog_class; in watchdog_cdev_register()
1038 wd_data->dev.parent = wdd->parent; in watchdog_cdev_register()
1039 wd_data->dev.groups = wdd->groups; in watchdog_cdev_register()
1040 wd_data->dev.release = watchdog_core_data_release; in watchdog_cdev_register()
1041 dev_set_drvdata(&wd_data->dev, wdd); in watchdog_cdev_register()
1042 err = dev_set_name(&wd_data->dev, "watchdog%d", wdd->id); in watchdog_cdev_register()
1044 put_device(&wd_data->dev); in watchdog_cdev_register()
1048 kthread_init_work(&wd_data->work, watchdog_ping_work); in watchdog_cdev_register()
1049 hrtimer_setup(&wd_data->timer, watchdog_timer_expired, CLOCK_MONOTONIC, in watchdog_cdev_register()
1054 old_wd_data = wd_data; in watchdog_cdev_register()
1064 put_device(&wd_data->dev); in watchdog_cdev_register()
1070 cdev_init(&wd_data->cdev, &watchdog_fops); in watchdog_cdev_register()
1071 wd_data->cdev.owner = wdd->ops->owner; in watchdog_cdev_register()
1074 err = cdev_device_add(&wd_data->cdev, &wd_data->dev); in watchdog_cdev_register()
1082 put_device(&wd_data->dev); in watchdog_cdev_register()
1087 wd_data->last_hw_keepalive = ktime_sub(ktime_get(), 1); in watchdog_cdev_register()
1088 watchdog_set_open_deadline(wd_data); in watchdog_cdev_register()
1096 get_device(&wd_data->dev); in watchdog_cdev_register()
1098 hrtimer_start(&wd_data->timer, 0, in watchdog_cdev_register()
1117 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_cdev_unregister() local
1119 cdev_device_del(&wd_data->cdev, &wd_data->dev); in watchdog_cdev_unregister()
1132 mutex_lock(&wd_data->lock); in watchdog_cdev_unregister()
1133 wd_data->wdd = NULL; in watchdog_cdev_unregister()
1134 wdd->wd_data = NULL; in watchdog_cdev_unregister()
1135 mutex_unlock(&wd_data->lock); in watchdog_cdev_unregister()
1137 hrtimer_cancel(&wd_data->timer); in watchdog_cdev_unregister()
1138 kthread_cancel_work_sync(&wd_data->work); in watchdog_cdev_unregister()
1140 put_device(&wd_data->dev); in watchdog_cdev_unregister()
1197 struct watchdog_core_data *wd_data; in watchdog_set_last_hw_keepalive() local
1203 wd_data = wdd->wd_data; in watchdog_set_last_hw_keepalive()
1207 wd_data->last_hw_keepalive = ktime_sub(now, ms_to_ktime(last_ping_ms)); in watchdog_set_last_hw_keepalive()
1269 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_dev_suspend() local
1272 if (!wdd->wd_data) in watchdog_dev_suspend()
1276 mutex_lock(&wd_data->lock); in watchdog_dev_suspend()
1277 if (watchdog_worker_should_ping(wd_data)) in watchdog_dev_suspend()
1278 ret = __watchdog_ping(wd_data->wdd); in watchdog_dev_suspend()
1279 mutex_unlock(&wd_data->lock); in watchdog_dev_suspend()
1288 hrtimer_cancel(&wd_data->timer); in watchdog_dev_suspend()
1289 kthread_cancel_work_sync(&wd_data->work); in watchdog_dev_suspend()
1296 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_dev_resume() local
1299 if (!wdd->wd_data) in watchdog_dev_resume()
1306 mutex_lock(&wd_data->lock); in watchdog_dev_resume()
1307 if (watchdog_worker_should_ping(wd_data)) in watchdog_dev_resume()
1308 ret = __watchdog_ping(wd_data->wdd); in watchdog_dev_resume()
1309 mutex_unlock(&wd_data->lock); in watchdog_dev_resume()