| /* |
| * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org> |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| * |
| * $FreeBSD$ |
| */ |
| |
| #ifndef _OPENSOLARIS_SYS_PROC_H_ |
| #define _OPENSOLARIS_SYS_PROC_H_ |
| |
| #include <sys/param.h> |
| #include <sys/kthread.h> |
| #include_next <sys/proc.h> |
| #include <sys/stdint.h> |
| #include <sys/smp.h> |
| #include <sys/sched.h> |
| #include <sys/lock.h> |
| #include <sys/mutex.h> |
| #include <sys/unistd.h> |
| #include <sys/kmem.h> |
| #include <sys/malloc.h> |
| |
| #ifdef _KERNEL |
| #define CPU curcpu |
| #define minclsyspri PRIBIO |
| #define defclsyspri minclsyspri |
| #define maxclsyspri PVM |
| #define max_ncpus (mp_maxid + 1) |
| #define boot_max_ncpus (mp_maxid + 1) |
| |
| #define TS_RUN 0 |
| |
| #define p0 proc0 |
| |
| #define t_tid td_tid |
| |
| typedef short pri_t; |
| typedef struct thread _kthread; |
| typedef struct thread kthread_t; |
| typedef struct thread *kthread_id_t; |
| typedef struct proc proc_t; |
| |
| extern proc_t *system_proc; |
| |
| static __inline kthread_t * |
| do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg, |
| size_t len, proc_t *pp, int state, pri_t pri, const char *name) |
| { |
| kthread_t *td = NULL; |
| proc_t **ppp; |
| int error; |
| |
| /* |
| * Be sure there are no surprises. |
| */ |
| ASSERT(stk == NULL); |
| ASSERT(len == 0); |
| ASSERT(state == TS_RUN); |
| |
| if (pp == &p0) |
| ppp = &system_proc; |
| else |
| ppp = &pp; |
| error = kproc_kthread_add(proc, arg, ppp, &td, RFSTOPPED, |
| stksize / PAGE_SIZE, "zfskern", "%s", name); |
| if (error == 0) { |
| thread_lock(td); |
| sched_prio(td, pri); |
| sched_add(td, SRQ_BORING); |
| #if __FreeBSD_version < 1300068 |
| thread_unlock(td); |
| #endif |
| } |
| return (td); |
| } |
| |
| #define thread_create_named(name, stk, stksize, proc, arg, len, \ |
| pp, state, pri) \ |
| do_thread_create(stk, stksize, proc, arg, len, pp, state, pri, name) |
| #define thread_create(stk, stksize, proc, arg, len, pp, state, pri) \ |
| do_thread_create(stk, stksize, proc, arg, len, pp, state, pri, #proc) |
| #define thread_exit() kthread_exit() |
| |
| int uread(proc_t *, void *, size_t, uintptr_t); |
| int uwrite(proc_t *, void *, size_t, uintptr_t); |
| |
| static inline boolean_t |
| zfs_proc_is_caller(proc_t *p) |
| { |
| return (p == curproc); |
| } |
| |
| #endif /* _KERNEL */ |
| #endif /* _OPENSOLARIS_SYS_PROC_H_ */ |