Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 12 Aug 2006 10:47:48 GMT
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 103699 for review
Message-ID:  <200608121047.k7CAlmur014364@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=103699

Change 103699 by rdivacky@rdivacky_witten on 2006/08/12 10:47:33

	Change various if (em == NULL) to KASSERTs. The code is tested enough. Btw: this and last
	change caused that the code now feels much faster.

Affected files ...

.. //depot/projects/soc2006/rdivacky_linuxolator/compat/linux/linux_misc.c#10 edit
.. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_machdep.c#41 edit

Differences ...

==== //depot/projects/soc2006/rdivacky_linuxolator/compat/linux/linux_misc.c#10 (text+ko) ====

@@ -1337,12 +1337,7 @@
 
 	em = em_find(td->td_proc, EMUL_UNLOCKED);
 
-	if (em == NULL) {
-#ifdef	DEBUG
-		printf(LMSG("emuldata not found in getpid.\n"));
-#endif
-		return (0);
-	}
+	KASSERT(em != NULL, ("getpid: emuldata not found.\n"));
 
 	td->td_retval[0] = em->shared->group_pid;
 	EMUL_UNLOCK(&emul_lock);
@@ -1357,12 +1352,7 @@
 
 	em = em_find(td->td_proc, EMUL_UNLOCKED);
 
-	if (em == NULL) {
-#ifdef	DEBUG
-		printf(LMSG("emuldata for current process not found in getppid.\n"));
-#endif
-		return (0);
-	}
+	KASSERT(em != NULL, ("getppid: process emuldata not found.\n"));
 
 	/* find the group leader */
 	p = pfind(em->shared->group_pid);
@@ -1381,13 +1371,8 @@
 	/* if its also linux process */
 	if (pp->p_sysent == &elf_linux_sysvec) {
    	   	em = em_find(pp, EMUL_LOCKED);
-   		if (em == NULL) {
-#ifdef	DEBUG
-			printf(LMSG("emuldata for parent process not found in getppid.\n"));
-#endif
-			PROC_UNLOCK(pp);
-			return (0);
-		}
+		KASSERT(em != NULL, ("getppid: parent emuldata not found.\n"));
+
 	   	td->td_retval[0] = em->shared->group_pid;
 	} else
 	   	td->td_retval[0] = pp->p_pid;

==== //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_machdep.c#41 (text+ko) ====

@@ -422,7 +422,7 @@
 	error = linux_proc_init(td, p2->p_pid, args->flags);
 	/* reference it - no need to check this */
 	em = em_find(p2, EMUL_UNLOCKED);
-	KASSERT(em != NULL, ("no emuldata after proc_init()!\n"));
+	KASSERT(em != NULL, ("clone: emuldata not found.\n"));
 	/* and adjust it */
 	if (args->flags & CLONE_PARENT_SETTID) {
 	   	if (args->parent_tidptr == NULL) {
@@ -1183,14 +1183,7 @@
 	} else {
 		/* lookup the old one */
 		em = em_find(td->td_proc, EMUL_UNLOCKED);
-		/* XXX: this might be turned into KASSERT once its tested enough */
-		if (em == NULL) {
-		   	/* this should not happen */
-#ifdef DEBUG
-		   	printf(LMSG("emuldata not found in exec case.\n"));
-#endif
-			return (0);
-		}
+		KASSERT(em != NULL, ("proc_init: emuldata not found in exec case.\n"));
 	}
 
 	em->child_clear_tid = NULL;
@@ -1204,15 +1197,9 @@
    	   	if (flags & CLONE_VM) {
    		   	/* lookup the parent */
 		   	p_em = em_find(td->td_proc, EMUL_LOCKED);
-			if (p_em == NULL) {
-#ifdef DEBUG	
-#endif
-			   	printf(LMSG("parent emuldata not found for CLONE_VM.\n"));
-				panic("impossible to continue\n");
-			} else {
-			   	em->shared = p_em->shared;
-				em->shared->refs++;
-			}
+			KASSERT(p_em != NULL, ("proc_init: parent emuldata not found for CLONE_VM\n"));
+			em->shared = p_em->shared;
+			em->shared->refs++;
 		} else {
 		   	/* handled earlier to avoid malloc(M_WAITOK) with rwlock held */
 		}
@@ -1248,12 +1235,7 @@
 	/* find the emuldata */
 	em = em_find(p, EMUL_UNLOCKED);
 
-	if (em == NULL) {
-#ifdef DEBUG
-	   	printf(LMSG("we didnt find emuldata for the exiting process.\n"));
-#endif
-		return;
-	}
+	KASSERT(em != NULL, ("proc_exit: emuldata not found.\n"));
 
 	child_clear_tid = em->child_clear_tid;
 	
@@ -1311,13 +1293,7 @@
 
 		em = em_find(p, EMUL_UNLOCKED);
 
-		if (em == NULL) {
-#ifdef 	DEBUG
-			struct thread *td = FIRST_THREAD_IN_PROC(p);
-		   	printf(LMSG("we didnt find emuldata for the execing process.\n"));
-#endif
-			return;			
-		}
+		KASSERT(em != NULL, ("proc_exec: emuldata not found.\n"));
 		
 		EMUL_UNLOCK(&emul_lock);
 
@@ -1364,10 +1340,7 @@
 	   	error = tsleep(&p->p_emuldata, PLOCK, "linux_schedtail", hz);
 		if (error == 0)
 		   	goto retry;
-#ifdef	DEBUG
-	   	printf(LMSG("we didnt find emuldata for the userreting process.\n"));
-#endif
-		return;
+	   	panic("no emuldata found for userreting process.\n");
 	}
 	child_set_tid = em->child_set_tid;
 	EMUL_UNLOCK(&emul_lock);
@@ -1391,12 +1364,7 @@
 	 /* find the emuldata */
 	em = em_find(td->td_proc, EMUL_UNLOCKED);
 
-	if (em == NULL) {
-#ifdef DEBUG
-	   	printf(LMSG("we didnt find emuldata for the userreting process.\n"));
-#endif
-		return (0);
-	}
+	KASSERT(em != NULL, ("set_tid_address: emuldata not found.\n"));
 
 	em->child_clear_tid = args->tidptr;
 	td->td_retval[0] = td->td_proc->p_pid;
@@ -1418,12 +1386,7 @@
 
 	td_em = em_find(td->td_proc, EMUL_UNLOCKED);
 
-	if (td_em == NULL) {
-#ifdef DEBUG
-	   	printf(LMSG("we didnt find emuldata in exit_group."));
-#endif
-		return (0);
-	}
+	KASSERT(td_em != NULL, ("exit_group: emuldata not found.\n"));
 
 	EMUL_SHARED_RLOCK(&emul_shared_lock);
      	LIST_FOREACH_SAFE(em, &td_em->shared->threads, threads, tmp_em) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200608121047.k7CAlmur014364>