Lines Matching refs:wd_data

100 	struct watchdog_core_data *wd_data = wdd->wd_data;  in watchdog_next_keepalive()  local
108 virt_timeout = ktime_add(wd_data->last_keepalive, in watchdog_next_keepalive()
111 virt_timeout = wd_data->open_deadline; in watchdog_next_keepalive()
130 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_update_worker() local
136 hrtimer_start(&wd_data->timer, t, in watchdog_update_worker()
139 hrtimer_cancel(&wd_data->timer); in watchdog_update_worker()
145 struct watchdog_core_data *wd_data = wdd->wd_data; in __watchdog_ping() local
149 earliest_keepalive = ktime_add(wd_data->last_hw_keepalive, in __watchdog_ping()
154 hrtimer_start(&wd_data->timer, in __watchdog_ping()
160 wd_data->last_hw_keepalive = now; in __watchdog_ping()
192 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_ping() local
197 set_bit(_WDOG_KEEPALIVE, &wd_data->status); in watchdog_ping()
199 wd_data->last_keepalive = ktime_get(); in watchdog_ping()
203 static bool watchdog_worker_should_ping(struct watchdog_core_data *wd_data) in watchdog_worker_should_ping() argument
205 struct watchdog_device *wdd = wd_data->wdd; in watchdog_worker_should_ping()
213 return watchdog_hw_running(wdd) && !watchdog_past_open_deadline(wd_data); in watchdog_worker_should_ping()
218 struct watchdog_core_data *wd_data; in watchdog_ping_work() local
220 wd_data = container_of(work, struct watchdog_core_data, work); in watchdog_ping_work()
222 mutex_lock(&wd_data->lock); in watchdog_ping_work()
223 if (watchdog_worker_should_ping(wd_data)) in watchdog_ping_work()
224 __watchdog_ping(wd_data->wdd); in watchdog_ping_work()
225 mutex_unlock(&wd_data->lock); in watchdog_ping_work()
230 struct watchdog_core_data *wd_data; in watchdog_timer_expired() local
232 wd_data = container_of(timer, struct watchdog_core_data, timer); in watchdog_timer_expired()
234 kthread_queue_work(watchdog_kworker, &wd_data->work); in watchdog_timer_expired()
249 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_start() local
256 set_bit(_WDOG_KEEPALIVE, &wd_data->status); in watchdog_start()
270 wd_data->last_keepalive = started_at; in watchdog_start()
271 wd_data->last_hw_keepalive = started_at; in watchdog_start()
331 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_get_status() local
345 if (test_bit(_WDOG_ALLOW_RELEASE, &wd_data->status)) in watchdog_get_status()
348 if (test_and_clear_bit(_WDOG_KEEPALIVE, &wd_data->status)) in watchdog_get_status()
475 struct watchdog_core_data *wd_data = wdd->wd_data; in status_show() local
478 mutex_lock(&wd_data->lock); in status_show()
480 mutex_unlock(&wd_data->lock); in status_show()
499 struct watchdog_core_data *wd_data = wdd->wd_data; in timeleft_show() local
503 mutex_lock(&wd_data->lock); in timeleft_show()
505 mutex_unlock(&wd_data->lock); in timeleft_show()
678 struct watchdog_core_data *wd_data = file->private_data; in watchdog_write() local
691 clear_bit(_WDOG_ALLOW_RELEASE, &wd_data->status); in watchdog_write()
698 set_bit(_WDOG_ALLOW_RELEASE, &wd_data->status); in watchdog_write()
704 mutex_lock(&wd_data->lock); in watchdog_write()
705 wdd = wd_data->wdd; in watchdog_write()
708 mutex_unlock(&wd_data->lock); in watchdog_write()
731 struct watchdog_core_data *wd_data = file->private_data; in watchdog_ioctl() local
738 mutex_lock(&wd_data->lock); in watchdog_ioctl()
740 wdd = wd_data->wdd; in watchdog_ioctl()
827 mutex_unlock(&wd_data->lock); in watchdog_ioctl()
844 struct watchdog_core_data *wd_data; in watchdog_open() local
851 wd_data = old_wd_data; in watchdog_open()
853 wd_data = container_of(inode->i_cdev, struct watchdog_core_data, in watchdog_open()
857 if (test_and_set_bit(_WDOG_DEV_OPEN, &wd_data->status)) in watchdog_open()
860 wdd = wd_data->wdd; in watchdog_open()
876 file->private_data = wd_data; in watchdog_open()
879 get_device(&wd_data->dev); in watchdog_open()
888 wd_data->open_deadline = KTIME_MAX; in watchdog_open()
894 module_put(wd_data->wdd->ops->owner); in watchdog_open()
896 clear_bit(_WDOG_DEV_OPEN, &wd_data->status); in watchdog_open()
902 struct watchdog_core_data *wd_data; in watchdog_core_data_release() local
904 wd_data = container_of(dev, struct watchdog_core_data, dev); in watchdog_core_data_release()
906 kfree(wd_data); in watchdog_core_data_release()
922 struct watchdog_core_data *wd_data = file->private_data; in watchdog_release() local
927 mutex_lock(&wd_data->lock); in watchdog_release()
929 wdd = wd_data->wdd; in watchdog_release()
940 else if (test_and_clear_bit(_WDOG_ALLOW_RELEASE, &wd_data->status) || in watchdog_release()
953 clear_bit(_WDOG_DEV_OPEN, &wd_data->status); in watchdog_release()
957 mutex_unlock(&wd_data->lock); in watchdog_release()
964 module_put(wd_data->cdev.owner); in watchdog_release()
965 put_device(&wd_data->dev); in watchdog_release()
1003 struct watchdog_core_data *wd_data; in watchdog_cdev_register() local
1006 wd_data = kzalloc(sizeof(struct watchdog_core_data), GFP_KERNEL); in watchdog_cdev_register()
1007 if (!wd_data) in watchdog_cdev_register()
1009 mutex_init(&wd_data->lock); in watchdog_cdev_register()
1011 wd_data->wdd = wdd; in watchdog_cdev_register()
1012 wdd->wd_data = wd_data; in watchdog_cdev_register()
1015 kfree(wd_data); in watchdog_cdev_register()
1019 device_initialize(&wd_data->dev); in watchdog_cdev_register()
1020 wd_data->dev.devt = MKDEV(MAJOR(watchdog_devt), wdd->id); in watchdog_cdev_register()
1021 wd_data->dev.class = &watchdog_class; in watchdog_cdev_register()
1022 wd_data->dev.parent = wdd->parent; in watchdog_cdev_register()
1023 wd_data->dev.groups = wdd->groups; in watchdog_cdev_register()
1024 wd_data->dev.release = watchdog_core_data_release; in watchdog_cdev_register()
1025 dev_set_drvdata(&wd_data->dev, wdd); in watchdog_cdev_register()
1026 err = dev_set_name(&wd_data->dev, "watchdog%d", wdd->id); in watchdog_cdev_register()
1028 put_device(&wd_data->dev); in watchdog_cdev_register()
1032 kthread_init_work(&wd_data->work, watchdog_ping_work); in watchdog_cdev_register()
1033 hrtimer_init(&wd_data->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); in watchdog_cdev_register()
1034 wd_data->timer.function = watchdog_timer_expired; in watchdog_cdev_register()
1038 old_wd_data = wd_data; in watchdog_cdev_register()
1048 put_device(&wd_data->dev); in watchdog_cdev_register()
1054 cdev_init(&wd_data->cdev, &watchdog_fops); in watchdog_cdev_register()
1057 err = cdev_device_add(&wd_data->cdev, &wd_data->dev); in watchdog_cdev_register()
1064 put_device(&wd_data->dev); in watchdog_cdev_register()
1069 wd_data->cdev.owner = wdd->ops->owner; in watchdog_cdev_register()
1072 wd_data->last_hw_keepalive = ktime_sub(ktime_get(), 1); in watchdog_cdev_register()
1073 watchdog_set_open_deadline(wd_data); in watchdog_cdev_register()
1081 get_device(&wd_data->dev); in watchdog_cdev_register()
1083 hrtimer_start(&wd_data->timer, 0, in watchdog_cdev_register()
1102 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_cdev_unregister() local
1104 cdev_device_del(&wd_data->cdev, &wd_data->dev); in watchdog_cdev_unregister()
1117 mutex_lock(&wd_data->lock); in watchdog_cdev_unregister()
1118 wd_data->wdd = NULL; in watchdog_cdev_unregister()
1119 wdd->wd_data = NULL; in watchdog_cdev_unregister()
1120 mutex_unlock(&wd_data->lock); in watchdog_cdev_unregister()
1122 hrtimer_cancel(&wd_data->timer); in watchdog_cdev_unregister()
1123 kthread_cancel_work_sync(&wd_data->work); in watchdog_cdev_unregister()
1125 put_device(&wd_data->dev); in watchdog_cdev_unregister()
1182 struct watchdog_core_data *wd_data; in watchdog_set_last_hw_keepalive() local
1188 wd_data = wdd->wd_data; in watchdog_set_last_hw_keepalive()
1192 wd_data->last_hw_keepalive = ktime_sub(now, ms_to_ktime(last_ping_ms)); in watchdog_set_last_hw_keepalive()
1254 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_dev_suspend() local
1257 if (!wdd->wd_data) in watchdog_dev_suspend()
1261 mutex_lock(&wd_data->lock); in watchdog_dev_suspend()
1262 if (watchdog_worker_should_ping(wd_data)) in watchdog_dev_suspend()
1263 ret = __watchdog_ping(wd_data->wdd); in watchdog_dev_suspend()
1264 mutex_unlock(&wd_data->lock); in watchdog_dev_suspend()
1273 hrtimer_cancel(&wd_data->timer); in watchdog_dev_suspend()
1274 kthread_cancel_work_sync(&wd_data->work); in watchdog_dev_suspend()
1281 struct watchdog_core_data *wd_data = wdd->wd_data; in watchdog_dev_resume() local
1284 if (!wdd->wd_data) in watchdog_dev_resume()
1291 mutex_lock(&wd_data->lock); in watchdog_dev_resume()
1292 if (watchdog_worker_should_ping(wd_data)) in watchdog_dev_resume()
1293 ret = __watchdog_ping(wd_data->wdd); in watchdog_dev_resume()
1294 mutex_unlock(&wd_data->lock); in watchdog_dev_resume()