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. */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to