source: mainline/kernel/generic/include/proc/task.h@ a35b458

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since a35b458 was a35b458, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 7 years ago

style: Remove trailing whitespace on _all_ lines, including empty ones, for particular file types.

Command used: tools/srepl '\s\+$' '' -- *.c *.h *.py *.sh *.s *.S *.ag

Currently, whitespace on empty lines is very inconsistent.
There are two basic choices: Either remove the whitespace, or keep empty lines
indented to the level of surrounding code. The former is AFAICT more common,
and also much easier to do automatically.

Alternatively, we could write script for automatic indentation, and use that
instead. However, if such a script exists, it's possible to use the indented
style locally, by having the editor apply relevant conversions on load/save,
without affecting remote repository. IMO, it makes more sense to adopt
the simpler rule.

  • Property mode set to 100644
File size: 4.9 KB
Line 
1/*
2 * Copyright (c) 2010 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup genericproc
30 * @{
31 */
32/** @file
33 */
34
35#ifndef KERN_TASK_H_
36#define KERN_TASK_H_
37
38#include <cpu.h>
39#include <ipc/ipc.h>
40#include <ipc/event.h>
41#include <ipc/kbox.h>
42#include <synch/spinlock.h>
43#include <synch/mutex.h>
44#include <synch/futex.h>
45#include <synch/workqueue.h>
46#include <adt/avl.h>
47#include <adt/btree.h>
48#include <adt/cht.h>
49#include <adt/list.h>
50#include <security/perm.h>
51#include <arch/proc/task.h>
52#include <arch/proc/thread.h>
53#include <arch/context.h>
54#include <arch/fpu_context.h>
55#include <arch/cpu.h>
56#include <mm/tlb.h>
57#include <proc/scheduler.h>
58#include <udebug/udebug.h>
59#include <mm/as.h>
60#include <abi/proc/task.h>
61#include <abi/sysinfo.h>
62#include <arch.h>
63#include <cap/cap.h>
64
65#define TASK THE->task
66
67
68struct thread;
69struct cap;
70
71/** Task structure. */
72typedef struct task {
73 /** Task's linkage for the tasks_tree AVL tree. */
74 avltree_node_t tasks_tree_node;
75
76 /** Task lock.
77 *
78 * Must be acquired before threads_lock and thread lock of any of its
79 * threads.
80 */
81 IRQ_SPINLOCK_DECLARE(lock);
82
83 char name[TASK_NAME_BUFLEN];
84 /** List of threads contained in this task. */
85 list_t threads;
86 /** Address space. */
87 as_t *as;
88 /** Unique identity of task. */
89 task_id_t taskid;
90 /** Task security container. */
91 container_id_t container;
92
93 /** Number of references (i.e. threads). */
94 atomic_t refcount;
95 /** Number of threads that haven't exited yet. */
96 atomic_t lifecount;
97
98 /** Task permissions. */
99 perm_t perms;
100
101 /** Capabilities */
102 cap_info_t *cap_info;
103
104 /* IPC stuff */
105
106 /** Receiving communication endpoint */
107 answerbox_t answerbox;
108
109 /** Spinlock protecting the active_calls list. */
110 SPINLOCK_DECLARE(active_calls_lock);
111
112 /**
113 * List of all calls sent by this task that have not yet been
114 * answered.
115 */
116 list_t active_calls;
117
118 event_t events[EVENT_TASK_END - EVENT_END];
119
120 /** IPC statistics */
121 stats_ipc_t ipc_info;
122
123#ifdef CONFIG_UDEBUG
124 /** Debugging stuff. */
125 udebug_task_t udebug;
126
127 /** Kernel answerbox. */
128 kbox_t kb;
129#endif /* CONFIG_UDEBUG */
130
131 /** Architecture specific task data. */
132 task_arch_t arch;
133
134 struct futex_cache {
135 /** CHT mapping virtual addresses of futex variables to futex objects.*/
136 cht_t ht;
137 /** Serializes access to futex_list.*/
138 SPINLOCK_DECLARE(list_lock);
139 /** List of all futexes accesses by this task. */
140 list_t list;
141 work_t destroy_work;
142 } *futexes;
143
144 /** Accumulated accounting. */
145 uint64_t ucycles;
146 uint64_t kcycles;
147} task_t;
148
149IRQ_SPINLOCK_EXTERN(tasks_lock);
150extern avltree_t tasks_tree;
151
152extern void task_init(void);
153extern void task_done(void);
154extern task_t *task_create(as_t *, const char *);
155extern void task_destroy(task_t *);
156extern void task_hold(task_t *);
157extern void task_release(task_t *);
158extern task_t *task_find_by_id(task_id_t);
159extern errno_t task_kill(task_id_t);
160extern void task_kill_self(bool) __attribute__((noreturn));
161extern void task_get_accounting(task_t *, uint64_t *, uint64_t *);
162extern void task_print_list(bool);
163
164extern void perm_set(task_t *, perm_t);
165extern perm_t perm_get(task_t *);
166
167#ifndef task_create_arch
168extern void task_create_arch(task_t *);
169#endif
170
171#ifndef task_destroy_arch
172extern void task_destroy_arch(task_t *);
173#endif
174
175#ifdef __32_BITS__
176extern sys_errno_t sys_task_get_id(sysarg64_t *);
177#endif
178
179#ifdef __64_BITS__
180extern sysarg_t sys_task_get_id(void);
181#endif
182
183extern sys_errno_t sys_task_set_name(const char *, size_t);
184extern sys_errno_t sys_task_kill(task_id_t *);
185extern sys_errno_t sys_task_exit(sysarg_t);
186
187#endif
188
189/** @}
190 */
Note: See TracBrowser for help on using the repository browser.