svn commit: r293481 - in stable/10/sys: kern sys

Dmitry Chagin dchagin at FreeBSD.org
Sat Jan 9 14:38:30 UTC 2016


Author: dchagin
Date: Sat Jan  9 14:38:29 2016
New Revision: 293481
URL: https://svnweb.freebsd.org/changeset/base/293481

Log:
  MFC r283373:
  
  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().

Modified:
  stable/10/sys/kern/kern_thr.c
  stable/10/sys/sys/syscallsubr.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/kern_thr.c
==============================================================================
--- stable/10/sys/kern/kern_thr.c	Sat Jan  9 14:36:44 2016	(r293480)
+++ stable/10/sys/kern/kern_thr.c	Sat Jan  9 14:38:29 2016	(r293481)
@@ -192,12 +192,6 @@ thread_create(struct thread *td, struct 
 
 	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:
@@ -225,11 +219,9 @@ thread_create(struct thread *td, struct 
 #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);
 
@@ -564,3 +556,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: stable/10/sys/sys/syscallsubr.h
==============================================================================
--- stable/10/sys/sys/syscallsubr.h	Sat Jan  9 14:36:44 2016	(r293480)
+++ stable/10/sys/sys/syscallsubr.h	Sat Jan  9 14:38:29 2016	(r293481)
@@ -246,6 +246,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);


More information about the svn-src-all mailing list