Lines Matching +full:machine +full:- +full:mode +full:- +full:visible
1 /*-
2 * SPDX-License-Identifier: BSD-4-Clause
63 #include <machine/cpu.h>
82 * Define the code needed before returning to user mode, for trap and
88 struct proc *p = td->td_proc; in userret()
90 CTR3(KTR_SYSC, "userret: thread %p (pid %d, %s)", td, p->p_pid, in userret()
91 td->td_name); in userret()
92 KASSERT((p->p_flag & P_WEXIT) == 0, in userret()
97 * multi-threaded processes, where signal distribution might in userret()
104 if (p->p_numthreads == 1) { in userret()
107 if ((p->p_flag & P_PPWAIT) == 0 && in userret()
108 (td->td_pflags & TDP_SIGFASTBLOCK) == 0 && in userret()
115 p, td, td->td_ast, td->td_flags); in userret()
125 if (__predict_false(p->p_flag & P_PROFIL)) in userret()
126 addupc_task(td, TRAPF_PC(frame), td->td_pticks * psratio); in userret()
158 KASSERT(td->td_critnest == 0, in userret()
160 KASSERT(td->td_locks == 0, in userret()
161 ("userret: Returning with %d locks held", td->td_locks)); in userret()
162 KASSERT(td->td_rw_rlocks == 0, in userret()
163 ("userret: Returning with %d rwlocks held in read mode", in userret()
164 td->td_rw_rlocks)); in userret()
165 KASSERT(td->td_sx_slocks == 0, in userret()
166 ("userret: Returning with %d sx locks held in shared mode", in userret()
167 td->td_sx_slocks)); in userret()
168 KASSERT(td->td_lk_slocks == 0, in userret()
169 ("userret: Returning with %d lockmanager locks held in shared mode", in userret()
170 td->td_lk_slocks)); in userret()
171 KASSERT((td->td_pflags & TDP_NOFAULTING) == 0, in userret()
179 KASSERT(td->td_pinned == 0 || (td->td_pflags & TDP_CALLCHAIN) != 0, in userret()
181 KASSERT(td->td_vp_reserved == NULL, in userret()
183 KASSERT((td->td_flags & (TDF_SBDRY | TDF_SEINTR | TDF_SERESTART)) == 0, in userret()
185 KASSERT(td->td_vslock_sz == 0, in userret()
186 ("userret: Returning with vslock-wired space")); in userret()
191 __func__, td, p->p_pid, td->td_name, curvnet, in userret()
192 (td->td_vnet_lpush != NULL) ? td->td_vnet_lpush : "N/A")); in userret()
200 td->td_pticks = 0; in ast_prep()
201 if (td->td_cowgen != atomic_load_int(&td->td_proc->p_cowgen)) in ast_prep()
228 MPASS(ae->ae_f == NULL); in ast_register()
229 ae->ae_flags = flags; in ast_register()
230 ae->ae_tdp = tdp; in ast_register()
232 ae->ae_f = f; in ast_register()
249 MPASS(ae->ae_f != NULL); in ast_deregister()
250 ae->ae_f = NULL; in ast_deregister()
252 ae->ae_flags = 0; in ast_deregister()
253 ae->ae_tdp = 0; in ast_deregister()
262 td->td_ast |= TDAI(tda); in ast_sched_locked()
271 td->td_ast &= ~TDAI(tda); in ast_unsched_locked()
286 td->td_ast |= ast; in ast_sched_mask()
293 return ((ae->ae_flags & ASTR_TDP) == 0 || in ast_handler_calc_tdp_run()
294 (td->td_pflags & ae->ae_tdp) != 0); in ast_handler_calc_tdp_run()
310 td->td_frame = framep; in ast_handler()
314 WITNESS_WARN(WARN_PANIC, NULL, "Returning to user mode"); in ast_handler()
322 * AST's saved in td_ast, the td_ast is again non-zero and in ast_handler()
326 td_ast = td->td_ast; in ast_handler()
327 td->td_ast = 0; in ast_handler()
335 * not runnable or visible to other threads. in ast_handler()
337 td_ast = td->td_ast; in ast_handler()
338 td->td_ast = 0; in ast_handler()
342 td->td_proc == NULL ? -1 : td->td_proc->p_pid, in ast_handler()
343 td->td_proc == NULL ? "" : td->td_proc->p_comm); in ast_handler()
345 ("ast in kernel mode")); in ast_handler()
349 f = ae->ae_f; in ast_handler()
356 if ((ae->ae_flags & ASTR_KCLEAR) != 0) in ast_handler()
359 if ((ae->ae_flags & ASTR_UNCOND) != 0) in ast_handler()
361 else if ((ae->ae_flags & ASTR_ASTF_REQUIRED) != 0 && in ast_handler()
392 sv = p->p_sysent; in syscallname()
393 if (sv->sv_syscallnames == NULL || code >= sv->sv_size) in syscallname()
395 return (sv->sv_syscallnames[code]); in syscallname()