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