diff options
-rw-r--r-- | sys/kern/kern_thread.c | 13 | ||||
-rw-r--r-- | sys/sys/proc.h | 9 |
2 files changed, 22 insertions, 0 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index dcb52b137b58..bb724a17803e 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -868,6 +868,19 @@ thread_cow_update(struct thread *td) lim_free(oldlimit); } +void +thread_cow_synced(struct thread *td) +{ + struct proc *p; + + p = td->td_proc; + PROC_LOCK_ASSERT(p, MA_OWNED); + MPASS(td->td_cowgen != p->p_cowgen); + MPASS(td->td_ucred == p->p_ucred); + MPASS(td->td_limit == p->p_limit); + td->td_cowgen = p->p_cowgen; +} + /* * Discard the current thread and exit from its context. * Always called with scheduler locked. diff --git a/sys/sys/proc.h b/sys/sys/proc.h index ff97bfbd54a9..0e33192303f4 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -1009,6 +1009,14 @@ extern pid_t pid_max; (p)->p_cowgen++; \ } while (0) +#define PROC_COW_CHANGECOUNT(td, p) ({ \ + struct thread *_td = (td); \ + struct proc *_p = (p); \ + MPASS(_td == curthread); \ + PROC_LOCK_ASSERT(_p, MA_OWNED); \ + _p->p_cowgen - _td->td_cowgen; \ +}) + /* Check whether a thread is safe to be swapped out. */ #define thread_safetoswapout(td) ((td)->td_flags & TDF_CANSWAP) @@ -1200,6 +1208,7 @@ void thread_cow_get_proc(struct thread *newtd, struct proc *p); void thread_cow_get(struct thread *newtd, struct thread *td); void thread_cow_free(struct thread *td); void thread_cow_update(struct thread *td); +void thread_cow_synced(struct thread *td); int thread_create(struct thread *td, struct rtprio *rtp, int (*initialize_thread)(struct thread *, void *), void *thunk); void thread_exit(void) __dead2; |