4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
32 #include <sys/param.h>
33 #include <sys/types.h>
36 #define TASK_NORMAL 0x0 /* task may create tasks via settaskid() */
37 #define TASK_FINAL 0x1 /* task finalized, settaskid() will fail */
38 #define TASK_MASK 0x1 /* task flags mask */
40 #define TASK_PROJ_PURGE 0x100000 /* purge project.* rctl entities */
41 #define TASK_PROJ_MASK 0x100000
45 #include <sys/id_space.h>
46 #include <sys/exacct_impl.h>
53 taskid_t tk_tkid
; /* task id */
54 uint_t tk_flags
; /* task properties */
55 struct kproject
*tk_proj
; /* project membership */
56 uint_t tk_hold_count
; /* number of members/observers */
57 struct proc
*tk_memb_list
; /* pointer to the first process */
58 /* in a doubly linked list of */
60 kmutex_t tk_usage_lock
; /* lock to protect tk_*usage */
61 task_usage_t
*tk_usage
; /* total task resource usage */
62 task_usage_t
*tk_prevusage
; /* previous interval usage */
63 task_usage_t
*tk_zoneusage
; /* previous interval usage in zone */
64 rctl_set_t
*tk_rctls
; /* task's resource controls */
65 rctl_qty_t tk_nlwps
; /* protected by */
66 /* tk_zone->zone_nlwps_lock */
67 rctl_qty_t tk_nlwps_ctl
; /* protected by tk_rctls->rcs_lock */
68 rctl_qty_t tk_cpu_time
; /* accumulated CPU seconds */
69 struct zone
*tk_zone
; /* zone task belongs to */
70 task_usage_t
*tk_inherited
; /* task resource usage */
71 /* inherited with the first */
73 rctl_qty_t tk_cpu_ticks
; /* accumulated CPU ticks */
74 kmutex_t tk_cpu_time_lock
; /* accumulated CPU seconds lock */
75 rctl_qty_t tk_nprocs
; /* protected by */
76 /* tk_zone->zone_nlwps_lock */
77 rctl_qty_t tk_nprocs_ctl
; /* protected by tk_rctls->rcs_lock */
78 kstat_t
*tk_nprocs_kstat
; /* max-processes rctl kstat */
79 struct task
*tk_commit_next
; /* next task on task commit list */
82 typedef struct task_kstat
{
83 kstat_named_t ktk_zonename
;
84 kstat_named_t ktk_usage
;
85 kstat_named_t ktk_value
;
88 extern task_t
*task0p
;
89 extern rctl_hndl_t rc_task_lwps
;
90 extern rctl_hndl_t rc_task_nprocs
;
91 extern rctl_hndl_t rc_task_cpu_time
;
93 extern void task_init(void);
94 extern task_t
*task_create(projid_t
, struct zone
*);
95 extern void task_begin(task_t
*, struct proc
*);
96 extern void task_attach(task_t
*, struct proc
*);
97 extern void task_change(task_t
*, struct proc
*);
98 extern void task_detach(struct proc
*);
99 extern task_t
*task_join(task_t
*, uint_t
);
100 extern task_t
*task_hold_by_id(taskid_t
);
101 extern task_t
*task_hold_by_id_zone(taskid_t
, zoneid_t
);
102 extern void task_rele(task_t
*);
103 extern void task_hold(task_t
*);
104 extern void task_end(task_t
*);
105 extern rctl_qty_t
task_cpu_time_incr(task_t
*, rctl_qty_t
);
106 extern void task_commit_thread_init(void);
112 extern taskid_t
settaskid(projid_t
, uint_t
);
113 extern taskid_t
gettaskid(void);
121 #endif /* _SYS_TASK_H */