svn commit: r324734 - head/sys/kern

Mateusz Guzik mjg at FreeBSD.org
Thu Oct 19 00:38:15 UTC 2017


Author: mjg
Date: Thu Oct 19 00:38:14 2017
New Revision: 324734
URL: https://svnweb.freebsd.org/changeset/base/324734

Log:
  Tidy up pmc support at execve.
  
  The proc-specific check is inherently racy, so the code can just unlock
  beforehand.
  
  MFC after:	1 week

Modified:
  head/sys/kern/kern_exec.c

Modified: head/sys/kern/kern_exec.c
==============================================================================
--- head/sys/kern/kern_exec.c	Thu Oct 19 00:31:00 2017	(r324733)
+++ head/sys/kern/kern_exec.c	Thu Oct 19 00:38:14 2017	(r324734)
@@ -849,28 +849,23 @@ interpret:
 	p->p_args = newargs;
 	newargs = NULL;
 
+	PROC_UNLOCK(p);
+
 #ifdef	HWPMC_HOOKS
 	/*
 	 * Check if system-wide sampling is in effect or if the
 	 * current process is using PMCs.  If so, do exec() time
 	 * processing.  This processing needs to happen AFTER the
 	 * P_INEXEC flag is cleared.
-	 *
-	 * The proc lock needs to be released before taking the PMC
-	 * SX.
 	 */
 	if (PMC_SYSTEM_SAMPLING_ACTIVE() || PMC_PROC_IS_USING_PMCS(p)) {
-		PROC_UNLOCK(p);
 		VOP_UNLOCK(imgp->vp, 0);
 		pe.pm_credentialschanged = credential_changing;
 		pe.pm_entryaddr = imgp->entry_addr;
 
 		PMC_CALL_HOOK_X(td, PMC_FN_PROCESS_EXEC, (void *) &pe);
 		vn_lock(imgp->vp, LK_SHARED | LK_RETRY);
-	} else
-		PROC_UNLOCK(p);
-#else  /* !HWPMC_HOOKS */
-	PROC_UNLOCK(p);
+	}
 #endif
 
 	/* Set values passed into the program in registers. */


More information about the svn-src-head mailing list