Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145894023
D40515.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
22 KB
Referenced Files
None
Subscribers
None
D40515.diff
View Options
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -456,11 +456,8 @@
tmpflags = malloc(sizeof(*tmpflags), M_PMC, M_WAITOK | M_ZERO);
- p = newstr;
error = 0;
-
- for (; p < fence && (c = *p); p++) {
-
+ for (p = newstr; p < fence && (c = *p); p++) {
/* skip white space */
if (c == ' ' || c == '\t')
continue;
@@ -593,11 +590,10 @@
/* if there is a new string, parse and copy it */
if (error == 0 && req->newptr != NULL) {
fence = newstr + (n < req->newlen ? n : req->newlen + 1);
- if ((error = pmc_debugflags_parse(newstr, fence)) == 0)
- (void) strlcpy(pmc_debugstr, newstr,
- sizeof(pmc_debugstr));
+ error = pmc_debugflags_parse(newstr, fence);
+ if (error == 0)
+ strlcpy(pmc_debugstr, newstr, sizeof(pmc_debugstr));
}
-
free(newstr, M_PMC);
return (error);
@@ -923,11 +919,12 @@
PMCDBG3(PRC,TLK,1, "link-target pmc=%p ri=%d pmc-process=%p",
pm, ri, pp);
-#ifdef HWPMC_DEBUG
- LIST_FOREACH(pt, &pm->pm_targets, pt_next)
- if (pt->pt_process == pp)
- KASSERT(0, ("[pmc,%d] pp %p already in pmc %p targets",
- __LINE__, pp, pm));
+#ifdef HWPMC_DEBUG
+ LIST_FOREACH(pt, &pm->pm_targets, pt_next) {
+ if (pt->pt_process == pp)
+ KASSERT(0, ("[pmc,%d] pp %p already in pmc %p targets",
+ __LINE__, pp, pm));
+ }
#endif
pt = malloc(sizeof(struct pmc_target), M_PMC, M_WAITOK | M_ZERO);
pt->pt_process = pp;
@@ -1210,7 +1207,7 @@
}
}
- if (error)
+ if (error != 0)
(void)pmc_detach_process(top, pm);
done:
@@ -1302,16 +1299,18 @@
for (;;) {
(void)pmc_detach_one_process(p, pm, PMC_FLAG_REMOVE);
- if (!LIST_EMPTY(&p->p_children))
+ if (!LIST_EMPTY(&p->p_children)) {
p = LIST_FIRST(&p->p_children);
- else for (;;) {
- if (p == top)
- goto done;
- if (LIST_NEXT(p, p_sibling)) {
- p = LIST_NEXT(p, p_sibling);
- break;
+ } else {
+ for (;;) {
+ if (p == top)
+ goto done;
+ if (LIST_NEXT(p, p_sibling)) {
+ p = LIST_NEXT(p, p_sibling);
+ break;
+ }
+ p = p->p_pptr;
}
- p = p->p_pptr;
}
}
done:
@@ -1608,9 +1607,9 @@
* once we have thoroughly tested that we
* don't hit the above assert.
*/
- if (pt != NULL)
+ if (pt != NULL) {
pt->pt_pmcs[ri].pt_pmcval = newvalue;
- else {
+ } else {
/*
* For sampling process-virtual PMCs,
* newvalue is the number of events to
@@ -1625,9 +1624,10 @@
*/
pp->pp_pmcs[ri].pp_pmcval += newvalue;
if (pp->pp_pmcs[ri].pp_pmcval >
- pm->pm_sc.pm_reloadcount)
+ pm->pm_sc.pm_reloadcount) {
pp->pp_pmcs[ri].pp_pmcval -=
pm->pm_sc.pm_reloadcount;
+ }
}
mtx_pool_unlock_spin(pmc_mtxpool, pm);
} else {
@@ -1730,9 +1730,11 @@
PMC_EPOCH_ENTER();
/* Inform owners of all system-wide sampling PMCs. */
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
- pmclog_process_map_in(po, pid, pkm->pm_address, fullpath);
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if (po->po_flags & PMC_PO_OWNS_LOGFILE)
+ pmclog_process_map_in(po, pid, pkm->pm_address,
+ fullpath);
+ }
if ((pp = pmc_find_process_descriptor(td->td_proc, 0)) == NULL)
goto done;
@@ -1740,14 +1742,16 @@
/*
* Inform sampling PMC owners tracking this process.
*/
- for (ri = 0; ri < md->pmd_npmc; ri++)
+ for (ri = 0; ri < md->pmd_npmc; ri++) {
if ((pm = pp->pp_pmcs[ri].pp_pmc) != NULL &&
- PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
+ PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) {
pmclog_process_map_in(pm->pm_owner,
pid, pkm->pm_address, fullpath);
+ }
+ }
done:
- if (freepath)
+ if (freepath != NULL)
free(freepath, M_TEMP);
PMC_EPOCH_EXIT();
}
@@ -1767,20 +1771,23 @@
pid = td->td_proc->p_pid;
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
- pmclog_process_map_out(po, pid, pkm->pm_address,
- pkm->pm_address + pkm->pm_size);
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if (po->po_flags & PMC_PO_OWNS_LOGFILE)
+ pmclog_process_map_out(po, pid, pkm->pm_address,
+ pkm->pm_address + pkm->pm_size);
+ }
PMC_EPOCH_EXIT();
if ((pp = pmc_find_process_descriptor(td->td_proc, 0)) == NULL)
return;
- for (ri = 0; ri < md->pmd_npmc; ri++)
- if ((pm = pp->pp_pmcs[ri].pp_pmc) != NULL &&
- PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
+ for (ri = 0; ri < md->pmd_npmc; ri++) {
+ pm = pp->pp_pmcs[ri].pp_pmc;
+ if (pm != NULL && PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) {
pmclog_process_map_out(pm->pm_owner, pid,
pkm->pm_address, pkm->pm_address + pkm->pm_size);
+ }
+ }
}
/*
@@ -1798,8 +1805,7 @@
__LINE__, (void *) pm));
po = pm->pm_owner;
-
- if (po->po_flags & PMC_PO_INITIAL_MAPPINGS_DONE)
+ if ((po->po_flags & PMC_PO_INITIAL_MAPPINGS_DONE) != 0)
return;
if (PMC_TO_MODE(pm) == PMC_MODE_SS)
@@ -1856,9 +1862,9 @@
/*
* We only care about executable map entries.
*/
- if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) ||
- !(entry->protection & VM_PROT_EXECUTE) ||
- (entry->object.vm_object == NULL)) {
+ if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0 ||
+ (entry->protection & VM_PROT_EXECUTE) == 0 ||
+ entry->object.vm_object == NULL) {
continue;
}
@@ -1869,7 +1875,8 @@
* Walk the backing_object list to find the base
* (non-shadowed) vm_object.
*/
- for (lobj = tobj = obj; tobj != NULL; tobj = tobj->backing_object) {
+ for (lobj = tobj = obj; tobj != NULL;
+ tobj = tobj->backing_object) {
if (tobj != obj)
VM_OBJECT_RLOCK(tobj);
if (lobj != obj)
@@ -1937,7 +1944,7 @@
vp = NULL;
pmclog_process_map_in(po, p->p_pid, start_addr, fullpath);
- if (freepath)
+ if (freepath != NULL)
free(freepath, M_TEMP);
vm_map_lock_read(map);
@@ -2046,8 +2053,7 @@
PMCDBG4(MOD,PMH,1, "hook td=%p func=%d \"%s\" arg=%p", td, function,
pmc_hooknames[function], arg);
- switch (function)
- {
+ switch (function) {
/*
* Process exec()
@@ -2433,7 +2439,7 @@
* Pre-allocate memory in the PMC_FLAG_ALLOCATE case prior to
* acquiring the lock.
*/
- if (mode & PMC_FLAG_ALLOCATE) {
+ if ((mode & PMC_FLAG_ALLOCATE) != 0) {
if ((ptnew = pmc_thread_descriptor_pool_alloc()) == NULL) {
wait_flag = M_WAITOK;
if ((mode & PMC_FLAG_NOWAIT) != 0 ||
@@ -2446,15 +2452,15 @@
}
mtx_lock_spin(pp->pp_tdslock);
-
- LIST_FOREACH(pt, &pp->pp_tds, pt_next)
+ LIST_FOREACH(pt, &pp->pp_tds, pt_next) {
if (pt->pt_td == td)
break;
+ }
- if ((mode & PMC_FLAG_REMOVE) && pt != NULL)
+ if ((mode & PMC_FLAG_REMOVE) != 0 && pt != NULL)
LIST_REMOVE(pt, pt_next);
- if ((mode & PMC_FLAG_ALLOCATE) && pt == NULL && ptnew != NULL) {
+ if ((mode & PMC_FLAG_ALLOCATE) != 0 && pt == NULL && ptnew != NULL) {
pt = ptnew;
ptnew = NULL;
pt->pt_td = td;
@@ -2540,20 +2546,20 @@
* Pre-allocate memory in the PMC_FLAG_ALLOCATE case since we
* cannot call malloc(9) once we hold a spin lock.
*/
- if (mode & PMC_FLAG_ALLOCATE)
+ if ((mode & PMC_FLAG_ALLOCATE) != 0)
ppnew = malloc(sizeof(struct pmc_process) + md->pmd_npmc *
sizeof(struct pmc_targetstate), M_PMC, M_WAITOK | M_ZERO);
mtx_lock_spin(&pmc_processhash_mtx);
- LIST_FOREACH(pp, pph, pp_next)
- if (pp->pp_proc == p)
- break;
+ LIST_FOREACH(pp, pph, pp_next) {
+ if (pp->pp_proc == p)
+ break;
+ }
- if ((mode & PMC_FLAG_REMOVE) && pp != NULL)
+ if ((mode & PMC_FLAG_REMOVE) != 0 && pp != NULL)
LIST_REMOVE(pp, pp_next);
- if ((mode & PMC_FLAG_ALLOCATE) && pp == NULL &&
- ppnew != NULL) {
+ if ((mode & PMC_FLAG_ALLOCATE) != 0 && pp == NULL && ppnew != NULL) {
ppnew->pp_proc = p;
LIST_INIT(&ppnew->pp_tds);
ppnew->pp_tdslock = mtx_pool_find(pmc_mtxpool, ppnew);
@@ -2616,9 +2622,10 @@
poh = &pmc_ownerhash[hindex];
po = NULL;
- LIST_FOREACH(po, poh, po_next)
- if (po->po_owner == p)
- break;
+ LIST_FOREACH(po, poh, po_next) {
+ if (po->po_owner == p)
+ break;
+ }
PMCDBG5(OWN,FND,1, "find-owner proc=%p (%d, %s) hindex=0x%x -> "
"pmc-owner=%p", p, p->p_pid, p->p_comm, hindex, po);
@@ -2841,7 +2848,7 @@
PMC_UNMARK_ROW_THREAD(ri);
/* unlink from the owner's list */
- if (pm->pm_owner) {
+ if (pm->pm_owner != NULL) {
LIST_REMOVE(pm, pm_next);
pm->pm_owner = NULL;
}
@@ -2857,9 +2864,10 @@
sx_assert(&pmc_sx, SX_XLOCKED);
- if ((po = pmc_find_owner_descriptor(p)) == NULL)
+ if ((po = pmc_find_owner_descriptor(p)) == NULL) {
if ((po = pmc_allocate_owner_descriptor(p)) == NULL)
return (ENOMEM);
+ }
KASSERT(pmc->pm_owner == NULL,
("[pmc,%d] attempting to own an initialized PMC", __LINE__));
@@ -2871,7 +2879,7 @@
p->p_flag |= P_HWPMC;
PROC_UNLOCK(p);
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
+ if ((po->po_flags & PMC_PO_OWNS_LOGFILE) != 0)
pmclog_process_pmcallocate(pmc);
PMCDBG2(PMC,REG,1, "register-owner pmc-owner=%p pmc=%p",
@@ -2920,24 +2928,25 @@
* We shouldn't have allocated a system-wide PMC on the same
* CPU and same RI.
*/
- if ((po = pmc_find_owner_descriptor(p)) != NULL)
+ if ((po = pmc_find_owner_descriptor(p)) != NULL) {
LIST_FOREACH(pm, &po->po_pmcs, pm_next) {
- if (PMC_TO_ROWINDEX(pm) == ri) {
- mode = PMC_TO_MODE(pm);
- if (PMC_IS_VIRTUAL_MODE(mode))
- return EEXIST;
- if (PMC_IS_SYSTEM_MODE(mode) &&
- (int) PMC_TO_CPU(pm) == cpu)
- return EEXIST;
- }
- }
+ if (PMC_TO_ROWINDEX(pm) == ri) {
+ mode = PMC_TO_MODE(pm);
+ if (PMC_IS_VIRTUAL_MODE(mode))
+ return (EEXIST);
+ if (PMC_IS_SYSTEM_MODE(mode) &&
+ PMC_TO_CPU(pm) == cpu)
+ return (EEXIST);
+ }
+ }
+ }
/*
* We also shouldn't be the target of any PMC at this index
* since otherwise a PMC_ATTACH to ourselves will fail.
*/
if ((pp = pmc_find_process_descriptor(p, 0)) != NULL)
- if (pp->pp_pmcs[ri].pp_pmc)
+ if (pp->pp_pmcs[ri].pp_pmc != NULL)
return (EEXIST);
PMCDBG4(PMC,ALR,2, "can-allocate-rowindex proc=%p (%d, %s) ri=%d ok",
@@ -2997,9 +3006,10 @@
("[pmc,%d] Illegal pmc index %d (max %d)", __LINE__,
PMC_ID_TO_ROWINDEX(pmcid), md->pmd_npmc));
- LIST_FOREACH(pm, &po->po_pmcs, pm_next)
- if (pm->pm_id == pmcid)
- return pm;
+ LIST_FOREACH(pm, &po->po_pmcs, pm_next) {
+ if (pm->pm_id == pmcid)
+ return (pm);
+ }
return (NULL);
}
@@ -3021,19 +3031,19 @@
* the current process in the owners hash list. Find the owner
* process first and from there lookup the po.
*/
- if ((pp = pmc_find_process_descriptor(curthread->td_proc,
- PMC_FLAG_NONE)) == NULL) {
+ pp = pmc_find_process_descriptor(curthread->td_proc,
+ PMC_FLAG_NONE);
+ if (pp == NULL)
return (ESRCH);
- } else {
- opm = pp->pp_pmcs[PMC_ID_TO_ROWINDEX(pmcid)].pp_pmc;
- if (opm == NULL)
- return (ESRCH);
- if ((opm->pm_flags & (PMC_F_ATTACHED_TO_OWNER|
- PMC_F_DESCENDANTS)) != (PMC_F_ATTACHED_TO_OWNER|
- PMC_F_DESCENDANTS))
- return (ESRCH);
- po = opm->pm_owner;
- }
+ opm = pp->pp_pmcs[PMC_ID_TO_ROWINDEX(pmcid)].pp_pmc;
+ if (opm == NULL)
+ return (ESRCH);
+ if ((opm->pm_flags &
+ (PMC_F_ATTACHED_TO_OWNER | PMC_F_DESCENDANTS)) !=
+ (PMC_F_ATTACHED_TO_OWNER | PMC_F_DESCENDANTS))
+ return (ESRCH);
+
+ po = opm->pm_owner;
}
if ((pm = pmc_find_pmc_descriptor_in_process(po, pmcid)) == NULL)
@@ -3055,6 +3065,7 @@
struct pmc_owner *po;
struct pmc_binding pb;
struct pmc_classdep *pcd;
+ pmc_value_t v;
int adjri, error, cpu, ri;
KASSERT(pm != NULL,
@@ -3074,7 +3085,7 @@
* Disallow PMCSTART if a logfile is required but has not been
* configured yet.
*/
- if ((pm->pm_flags & PMC_F_NEEDS_LOGFILE) &&
+ if ((pm->pm_flags & PMC_F_NEEDS_LOGFILE) != 0 &&
(po->po_flags & PMC_PO_OWNS_LOGFILE) == 0)
return (EDOOFUS); /* programming error */
@@ -3090,10 +3101,10 @@
* If a PMCATTACH has never been done on this PMC,
* attach it to its owner process.
*/
-
- if (LIST_EMPTY(&pm->pm_targets))
- error = (pm->pm_flags & PMC_F_ATTACH_DONE) ? ESRCH :
- pmc_attach_process(po->po_owner, pm);
+ if (LIST_EMPTY(&pm->pm_targets)) {
+ error = (pm->pm_flags & PMC_F_ATTACH_DONE) != 0 ?
+ ESRCH : pmc_attach_process(po->po_owner, pm);
+ }
/*
* If the PMC is attached to its owner, then force a context
@@ -3101,7 +3112,7 @@
*/
if (error == 0) {
pm->pm_state = PMC_STATE_RUNNING;
- if (pm->pm_flags & PMC_F_ATTACHED_TO_OWNER)
+ if ((pm->pm_flags & PMC_F_ATTACHED_TO_OWNER) != 0)
pmc_force_context_switch();
}
@@ -3149,10 +3160,9 @@
pm->pm_state = PMC_STATE_RUNNING;
critical_enter();
- if ((error = pcd->pcd_write_pmc(cpu, adjri, pm,
- PMC_IS_SAMPLING_MODE(mode) ?
- pm->pm_sc.pm_reloadcount :
- pm->pm_sc.pm_initial)) == 0) {
+ v = PMC_IS_SAMPLING_MODE(mode) ? pm->pm_sc.pm_reloadcount :
+ pm->pm_sc.pm_initial;
+ if ((error = pcd->pcd_write_pmc(cpu, adjri, pm, v)) == 0) {
/* If a sampling mode PMC, reset stalled state. */
if (PMC_IS_SAMPLING_MODE(mode))
pm->pm_pcpu_state[cpu].pps_stalled = 0;
@@ -3218,9 +3228,10 @@
pm->pm_pcpu_state[cpu].pps_cpustate = 0;
critical_enter();
- if ((error = pcd->pcd_stop_pmc(cpu, adjri, pm)) == 0)
+ if ((error = pcd->pcd_stop_pmc(cpu, adjri, pm)) == 0) {
error = pcd->pcd_read_pmc(cpu, adjri, pm,
&pm->pm_sc.pm_initial);
+ }
critical_exit();
pmc_restore_cpu_binding(&pb);
@@ -3246,9 +3257,10 @@
{
int n;
- for (n = 0; n < md->pmd_nclass; n++)
+ for (n = 0; n < md->pmd_nclass; n++) {
if (md->pmd_classdep[n].pcd_class == class)
return (&md->pmd_classdep[n]);
+ }
return (NULL);
}
@@ -4548,7 +4560,7 @@
/*
* If there is multiple PMCs for the same interrupt ignore new post
*/
- if (td->td_pflags & TDP_CALLCHAIN)
+ if ((td->td_pflags & TDP_CALLCHAIN) != 0)
return;
/*
@@ -4625,9 +4637,9 @@
pmc_callchaindepth : 1;
MPASS(ps->ps_pc != NULL);
- if (callchaindepth == 1)
+ if (callchaindepth == 1) {
ps->ps_pc[0] = PMC_TRAPFRAME_TO_PC(tf);
- else {
+ } else {
/*
* Kernel stack traversals can be done immediately,
* while we defer to an AST for user space traversals.
@@ -4641,12 +4653,11 @@
}
}
- ps->ps_nsamples = callchaindepth; /* mark entry as in use */
+ ps->ps_nsamples = callchaindepth; /* mark entry as in-use */
if (ring == PMC_UR) {
- ps->ps_nsamples_actual = callchaindepth; /* mark entry as in use */
+ ps->ps_nsamples_actual = callchaindepth;
ps->ps_nsamples = PMC_USER_CALLCHAIN_PENDING;
- } else
- ps->ps_nsamples = callchaindepth; /* mark entry as in use */
+ }
KASSERT(counter_u64_fetch(pm->pm_runcount) >= 0,
("[pmc,%d] pm=%p runcount %ld", __LINE__, (void *) pm,
@@ -4676,8 +4687,7 @@
td = curthread;
if ((pm->pm_flags & PMC_F_USERCALLCHAIN) &&
- (td->td_proc->p_flag & P_KPROC) == 0 &&
- !TRAPF_USERMODE(tf)) {
+ (td->td_proc->p_flag & P_KPROC) == 0 && !TRAPF_USERMODE(tf)) {
atomic_add_int(&td->td_pmcpend, 1);
return (pmc_add_sample(PMC_UR, pm, tf));
}
@@ -4914,11 +4924,11 @@
("[pmc,%d] null pcd ri=%d", __LINE__, n));
(void)(*pcd->pcd_get_config)(cpu, adjri, &pm);
- if (pm == NULL || /* !cfg'ed */
- pm->pm_state != PMC_STATE_RUNNING || /* !active */
- !PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)) || /* !sampling */
- !pm->pm_pcpu_state[cpu].pps_cpustate || /* !desired */
- !pm->pm_pcpu_state[cpu].pps_stalled) /* !stalled */
+ if (pm == NULL || /* !cfg'ed */
+ pm->pm_state != PMC_STATE_RUNNING || /* !active */
+ !PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)) || /* !sampling */
+ !pm->pm_pcpu_state[cpu].pps_cpustate || /* !desired */
+ !pm->pm_pcpu_state[cpu].pps_stalled) /* !stalled */
continue;
pm->pm_pcpu_state[cpu].pps_stalled = 0;
@@ -4959,16 +4969,17 @@
pmc_value_t newvalue, tmp;
PROC_LOCK(p);
- is_using_hwpmcs = p->p_flag & P_HWPMC;
+ is_using_hwpmcs = (p->p_flag & P_HWPMC) != 0;
PROC_UNLOCK(p);
/*
* Log a sysexit event to all SS PMC owners.
*/
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
- pmclog_process_sysexit(po, p->p_pid);
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if ((po->po_flags & PMC_PO_OWNS_LOGFILE) != 0)
+ pmclog_process_sysexit(po, p->p_pid);
+ }
PMC_EPOCH_EXIT();
if (!is_using_hwpmcs)
@@ -4996,9 +5007,7 @@
critical_enter(); /* no preemption */
cpu = curthread->td_oncpu;
-
- if ((pp = pmc_find_process_descriptor(p,
- PMC_FLAG_REMOVE)) != NULL) {
+ if ((pp = pmc_find_process_descriptor(p, PMC_FLAG_REMOVE)) != NULL) {
PMCDBG2(PRC,EXT,2,
"process-exit proc=%p pmc-process=%p", p, pp);
@@ -5092,13 +5101,15 @@
*
* Log PMC value at exit time if requested.
*/
- for (ri = 0; ri < md->pmd_npmc; ri++)
+ for (ri = 0; ri < md->pmd_npmc; ri++) {
if ((pm = pp->pp_pmcs[ri].pp_pmc) != NULL) {
- if (pm->pm_flags & PMC_F_NEEDS_LOGFILE &&
- PMC_IS_COUNTING_MODE(PMC_TO_MODE(pm)))
+ if ((pm->pm_flags & PMC_F_NEEDS_LOGFILE) != 0 &&
+ PMC_IS_COUNTING_MODE(PMC_TO_MODE(pm))) {
pmclog_process_procexit(pm, pp);
+ }
pmc_unlink_target_process(pm, pp);
}
+ }
free(pp, M_PMC);
} else
critical_exit(); /* pp == NULL */
@@ -5135,7 +5146,7 @@
(void) flags; /* unused parameter */
PROC_LOCK(p1);
- is_using_hwpmcs = p1->p_flag & P_HWPMC;
+ is_using_hwpmcs = (p1->p_flag & P_HWPMC) != 0;
PROC_UNLOCK(p1);
/*
@@ -5143,11 +5154,12 @@
* log all fork events to their owner's logs.
*/
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE) {
- pmclog_process_procfork(po, p1->p_pid, newproc->p_pid);
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if (po->po_flags & PMC_PO_OWNS_LOGFILE) {
+ pmclog_process_procfork(po, p1->p_pid, newproc->p_pid);
pmclog_process_proccreate(po, newproc, 1);
}
+ }
PMC_EPOCH_EXIT();
if (!is_using_hwpmcs)
@@ -5163,14 +5175,18 @@
* inherited, and link these into the new process
* descriptor.
*/
- if ((ppold = pmc_find_process_descriptor(curthread->td_proc,
- PMC_FLAG_NONE)) == NULL)
- goto done; /* nothing to do */
+ ppold = pmc_find_process_descriptor(curthread->td_proc, PMC_FLAG_NONE);
+ if (ppold == NULL)
+ goto done; /* nothing to do */
do_descendants = 0;
- for (ri = 0; ri < md->pmd_npmc; ri++)
- if ((pm = ppold->pp_pmcs[ri].pp_pmc) != NULL)
- do_descendants |= pm->pm_flags & PMC_F_DESCENDANTS;
+ for (ri = 0; ri < md->pmd_npmc; ri++) {
+ if ((pm = ppold->pp_pmcs[ri].pp_pmc) != NULL &&
+ (pm->pm_flags & PMC_F_DESCENDANTS) != 0) {
+ do_descendants = true;
+ break;
+ }
+ }
if (do_descendants == 0) /* nothing to do */
goto done;
@@ -5182,8 +5198,8 @@
PROC_UNLOCK(newproc);
/* allocate a descriptor for the new process */
- if ((ppnew = pmc_find_process_descriptor(newproc,
- PMC_FLAG_ALLOCATE)) == NULL)
+ ppnew = pmc_find_process_descriptor(newproc, PMC_FLAG_ALLOCATE);
+ if (ppnew == NULL)
goto done;
/*
@@ -5194,16 +5210,18 @@
* Log the fork event to all owners of PMCs attached to this
* process, if not already logged.
*/
- for (ri = 0; ri < md->pmd_npmc; ri++)
+ for (ri = 0; ri < md->pmd_npmc; ri++) {
if ((pm = ppold->pp_pmcs[ri].pp_pmc) != NULL &&
- (pm->pm_flags & PMC_F_DESCENDANTS)) {
+ (pm->pm_flags & PMC_F_DESCENDANTS) != 0) {
pmc_link_target_process(pm, ppnew);
po = pm->pm_owner;
if (po->po_sscount == 0 &&
- po->po_flags & PMC_PO_OWNS_LOGFILE)
+ (po->po_flags & PMC_PO_OWNS_LOGFILE) != 0) {
pmclog_process_procfork(po, p1->p_pid,
newproc->p_pid);
+ }
}
+ }
done:
sx_xunlock(&pmc_sx);
@@ -5215,9 +5233,10 @@
struct pmc_owner *po;
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if ((po->po_flags & PMC_PO_OWNS_LOGFILE) != 0)
pmclog_process_threadcreate(po, td, 1);
+ }
PMC_EPOCH_EXIT();
}
@@ -5227,9 +5246,10 @@
struct pmc_owner *po;
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if ((po->po_flags & PMC_PO_OWNS_LOGFILE) != 0)
pmclog_process_threadexit(po, td);
+ }
PMC_EPOCH_EXIT();
}
@@ -5239,9 +5259,10 @@
struct pmc_owner *po;
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if ((po->po_flags & PMC_PO_OWNS_LOGFILE) != 0)
pmclog_process_proccreate(po, p, 1 /* sync */);
+ }
PMC_EPOCH_EXIT();
}
@@ -5277,10 +5298,11 @@
* Notify owners of system sampling PMCs about KLD operations.
*/
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
if (po->po_flags & PMC_PO_OWNS_LOGFILE)
pmclog_process_map_in(po, (pid_t) -1,
(uintfptr_t) lf->address, lf->pathname);
+ }
PMC_EPOCH_EXIT();
/*
@@ -5295,10 +5317,12 @@
struct pmc_owner *po;
PMC_EPOCH_ENTER();
- CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext)
- if (po->po_flags & PMC_PO_OWNS_LOGFILE)
+ CK_LIST_FOREACH(po, &pmc_ss_owners, po_ssnext) {
+ if ((po->po_flags & PMC_PO_OWNS_LOGFILE) != 0) {
pmclog_process_map_out(po, (pid_t)-1,
(uintfptr_t)address, (uintfptr_t)address + size);
+ }
+ }
PMC_EPOCH_EXIT();
/*
@@ -5526,7 +5550,7 @@
}
pmc_restore_cpu_binding(&pb);
- if (error)
+ if (error != 0)
return (error);
/* allocate space for the sample array */
@@ -5689,7 +5713,7 @@
EVENTHANDLER_DEREGISTER(kld_unload, pmc_kld_unload_tag);
/* send SIGBUS to all owner threads, free up allocations */
- if (pmc_ownerhash)
+ if (pmc_ownerhash != NULL) {
for (ph = pmc_ownerhash;
ph <= &pmc_ownerhash[pmc_ownerhashmask];
ph++) {
@@ -5709,17 +5733,18 @@
pmc_destroy_owner_descriptor(po);
}
}
+ }
/* reclaim allocated data structures */
taskqueue_drain(taskqueue_fast, &free_task);
mtx_destroy(&pmc_threadfreelist_mtx);
pmc_thread_descriptor_pool_drain();
- if (pmc_mtxpool)
+ if (pmc_mtxpool != NULL)
mtx_pool_destroy(&pmc_mtxpool);
mtx_destroy(&pmc_processhash_mtx);
- if (pmc_processhash) {
+ if (pmc_processhash != NULL) {
#ifdef HWPMC_DEBUG
struct pmc_process *pp;
@@ -5735,7 +5760,7 @@
pmc_processhash = NULL;
}
- if (pmc_ownerhash) {
+ if (pmc_ownerhash != NULL) {
PMCDBG0(MOD,INI,3, "destroy owner hash");
hashdestroy(pmc_ownerhash, M_PMC, pmc_ownerhashmask);
pmc_ownerhash = NULL;
@@ -5759,10 +5784,12 @@
continue;
pmc_select_cpu(cpu);
- for (c = 0; c < md->pmd_nclass; c++)
- if (md->pmd_classdep[c].pcd_num > 0)
+ for (c = 0; c < md->pmd_nclass; c++) {
+ if (md->pmd_classdep[c].pcd_num > 0) {
md->pmd_classdep[c].pcd_pcpu_fini(md,
cpu);
+ }
+ }
}
if (md->pmd_cputype == PMC_CPU_GENERIC)
@@ -5803,12 +5830,12 @@
free(pmc_pcpu_saved, M_PMC);
pmc_pcpu_saved = NULL;
- if (pmc_pmcdisp) {
+ if (pmc_pmcdisp != NULL) {
free(pmc_pmcdisp, M_PMC);
pmc_pmcdisp = NULL;
}
- if (pmc_rowindex_to_classdep) {
+ if (pmc_rowindex_to_classdep != NULL) {
free(pmc_rowindex_to_classdep, M_PMC);
pmc_rowindex_to_classdep = NULL;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 26, 8:13 PM (40 m, 42 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29007219
Default Alt Text
D40515.diff (22 KB)
Attached To
Mode
D40515: hwpmc_mod.c: conditional and loop style
Attached
Detach File
Event Timeline
Log In to Comment