Author: dchagin
Date: Sun May 24 14:37:45 2015
New Revision: 283373
URL: https://svnweb.freebsd.org/changeset/base/283373

Log:
  In preparation for switching linuxulator to the use the native 1:1
  threads introduce kern_thr_alloc() which will be used later in the
  linux_clone().
  
  Differential Revision:        https://reviews.freebsd.org/D1029
  Reviewed by:  trasz

Modified:
  head/sys/kern/kern_thr.c
  head/sys/sys/syscallsubr.h

Modified: head/sys/kern/kern_thr.c
==============================================================================
--- head/sys/kern/kern_thr.c    Sun May 24 14:36:33 2015        (r283372)
+++ head/sys/kern/kern_thr.c    Sun May 24 14:37:45 2015        (r283373)
@@ -162,12 +162,6 @@ create_thread(struct thread *td, mcontex
 
        p = td->td_proc;
 
-       /* Have race condition but it is cheap. */
-       if (p->p_numthreads >= max_threads_per_proc) {
-               ++max_threads_hits;
-               return (EPROCLIM);
-       }
-
        if (rtp != NULL) {
                switch(rtp->type) {
                case RTP_PRIO_REALTIME:
@@ -197,11 +191,9 @@ create_thread(struct thread *td, mcontex
 #endif
 
        /* Initialize our td */
-       newtd = thread_alloc(0);
-       if (newtd == NULL) {
-               error = ENOMEM;
+       error = kern_thr_alloc(p, 0, &newtd);
+       if (error)
                goto fail;
-       }
 
        cpu_set_upcall(newtd, td);
 
@@ -566,3 +558,20 @@ sys_thr_set_name(struct thread *td, stru
        PROC_UNLOCK(p);
        return (error);
 }
+
+int
+kern_thr_alloc(struct proc *p, int pages, struct thread **ntd)
+{
+
+       /* Have race condition but it is cheap. */
+       if (p->p_numthreads >= max_threads_per_proc) {
+               ++max_threads_hits;
+               return (EPROCLIM);
+       }
+
+       *ntd = thread_alloc(pages);
+       if (*ntd == NULL)
+               return (ENOMEM);
+
+       return (0);
+}

Modified: head/sys/sys/syscallsubr.h
==============================================================================
--- head/sys/sys/syscallsubr.h  Sun May 24 14:36:33 2015        (r283372)
+++ head/sys/sys/syscallsubr.h  Sun May 24 14:37:45 2015        (r283373)
@@ -214,6 +214,7 @@ int kern_ktimer_settime(struct thread *t
 int    kern_ktimer_gettime(struct thread *td, int timer_id,
            struct itimerspec *val);
 int    kern_ktimer_getoverrun(struct thread *td, int timer_id);
+int    kern_thr_alloc(struct proc *, int pages, struct thread **);
 int    kern_thr_exit(struct thread *td);
 int    kern_thr_new(struct thread *td, struct thr_param *param);
 int    kern_thr_suspend(struct thread *td, struct timespec *tsp);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to