Merge commit 'dfec2ecfa1713daac7f3cdf7c6dc2cf4f09a4ee3'
[unleashed.git] / include / sys / task.h
bloba6051b79d14c5e653d9e088cf88a61155306cc45
1 /*
2 * CDDL HEADER START
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]
19 * CDDL HEADER END
22 * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
25 #ifndef _SYS_TASK_H
26 #define _SYS_TASK_H
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
32 #include <sys/param.h>
33 #include <sys/types.h>
34 #include <sys/rctl.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
43 #ifdef _KERNEL
45 #include <sys/id_space.h>
46 #include <sys/exacct_impl.h>
47 #include <sys/kmem.h>
49 struct proc;
50 struct zone;
52 typedef struct task {
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 */
59 /* task members */
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 */
72 /* member process */
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 */
80 } task_t;
82 typedef struct task_kstat {
83 kstat_named_t ktk_zonename;
84 kstat_named_t ktk_usage;
85 kstat_named_t ktk_value;
86 } task_kstat_t;
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);
108 #else /* _KERNEL */
110 struct task;
112 extern taskid_t settaskid(projid_t, uint_t);
113 extern taskid_t gettaskid(void);
115 #endif /* _KERNEL */
117 #ifdef __cplusplus
119 #endif
121 #endif /* _SYS_TASK_H */