13d0407baSopenharmony_ci// SPDX-License-Identifier: GPL-2.0
23d0407baSopenharmony_ci/*
33d0407baSopenharmony_ci * WGCM: Workergroup Control Monitor
43d0407baSopenharmony_ci *
53d0407baSopenharmony_ci * Copyright (c) 2022-2023 Huawei Technologies Co., Ltd.
63d0407baSopenharmony_ci */
73d0407baSopenharmony_ci
83d0407baSopenharmony_ci#ifndef _LINUX_WGCM_H
93d0407baSopenharmony_ci#define _LINUX_WGCM_H
103d0407baSopenharmony_ci
113d0407baSopenharmony_ci#include <linux/sched.h>
123d0407baSopenharmony_ci
133d0407baSopenharmony_ci#ifdef CONFIG_WGCM
143d0407baSopenharmony_ci#include <linux/types.h>
153d0407baSopenharmony_ci#include <uapi/linux/wgcm.h>
163d0407baSopenharmony_ci
173d0407baSopenharmony_ci/*
183d0407baSopenharmony_ci * struct wgcm_task: controls the state of WGCM tasks.
193d0407baSopenharmony_ci */
203d0407baSopenharmony_cistruct wgcm_task {
213d0407baSopenharmony_ci	unsigned int	server_tid;
223d0407baSopenharmony_ci
233d0407baSopenharmony_ci	/* count the number of workers which is bound with server */
243d0407baSopenharmony_ci	atomic_t	workers_sum;
253d0407baSopenharmony_ci
263d0407baSopenharmony_ci	/* count the number of block workers */
273d0407baSopenharmony_ci	atomic_t	blk_workers_sum;
283d0407baSopenharmony_ci};
293d0407baSopenharmony_ci
303d0407baSopenharmony_ci/*
313d0407baSopenharmony_ci * use sys_prctl() (see kernel/sys.c) :
323d0407baSopenharmony_ci *	wgcm_ctl():	register/unregister WGCM tasks.
333d0407baSopenharmony_ci */
343d0407baSopenharmony_ciextern int wgcm_ctl(unsigned long flags, unsigned long server_tid);
353d0407baSopenharmony_ci
363d0407baSopenharmony_ciextern void wgcm_do_exit(struct task_struct *tsk);
373d0407baSopenharmony_ciextern void wgcm_clear_child(struct task_struct *p);
383d0407baSopenharmony_ciextern void wgcm_activate_task(struct task_struct *p);
393d0407baSopenharmony_ciextern void wgcm_deactivate_task(struct task_struct *p, int flags);
403d0407baSopenharmony_ci#else
413d0407baSopenharmony_cistatic inline int wgcm_ctl(unsigned long flags, unsigned long server_tid)
423d0407baSopenharmony_ci{
433d0407baSopenharmony_ci	return -EOPNOTSUPP;
443d0407baSopenharmony_ci}
453d0407baSopenharmony_ci
463d0407baSopenharmony_cistatic inline void wgcm_do_exit(struct task_struct *tsk)
473d0407baSopenharmony_ci{
483d0407baSopenharmony_ci}
493d0407baSopenharmony_ci
503d0407baSopenharmony_cistatic inline void wgcm_clear_child(struct task_struct *p)
513d0407baSopenharmony_ci{
523d0407baSopenharmony_ci}
533d0407baSopenharmony_ci
543d0407baSopenharmony_cistatic inline void wgcm_activate_task(struct task_struct *p)
553d0407baSopenharmony_ci{
563d0407baSopenharmony_ci}
573d0407baSopenharmony_ci
583d0407baSopenharmony_cistatic inline void wgcm_deactivate_task(struct task_struct *p, int flags)
593d0407baSopenharmony_ci{
603d0407baSopenharmony_ci}
613d0407baSopenharmony_ci#endif /* CONFIG_WGCM */
623d0407baSopenharmony_ci
633d0407baSopenharmony_ci#endif /* _LINUX_WGCM_H */
64