Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F176523168
D59358.id188091.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D59358.id188091.diff
View Options
diff --git a/sys/dev/hwpmc/hwpmc_logging.c b/sys/dev/hwpmc/hwpmc_logging.c
--- a/sys/dev/hwpmc/hwpmc_logging.c
+++ b/sys/dev/hwpmc/hwpmc_logging.c
@@ -920,7 +920,7 @@
PMCLOG_RESERVE_SAFE(po, PMCLOG_TYPE_CALLCHAIN, recordlen, ps->ps_tsc);
PMCLOG_EMIT32(ps->ps_pid);
PMCLOG_EMIT32(ps->ps_tid);
- PMCLOG_EMIT32(pm->pm_id);
+ PMCLOG_EMIT32(pm->pm_handle);
PMCLOG_EMIT32(flags);
for (n = 0; n < ps->ps_nsamples; n++)
PMCLOG_EMITADDR(ps->ps_pc[n]);
@@ -967,6 +967,45 @@
PMCLOG_DESPATCH_SYNC(po);
}
+/*
+ * Queue a mapping record without a thread wakeup.
+ * Use this function when the caller holds a spin lock.
+ */
+void
+pmclog_process_map_in_nowakeup(struct pmc_owner *po, pid_t pid,
+ uintfptr_t start, const char *path)
+{
+ int pathlen, recordlen;
+
+ KASSERT(path != NULL, ("[pmclog,%d] map-in, null path", __LINE__));
+
+ pathlen = strlen(path) + 1; /* #bytes for path name */
+ recordlen = offsetof(struct pmclog_map_in, pl_pathname) +
+ pathlen;
+
+ PMCLOG_RESERVE_SAFE(po, PMCLOG_TYPE_MAP_IN, recordlen, pmc_rdtsc());
+ PMCLOG_EMIT32(pid);
+ PMCLOG_EMIT32(0);
+ PMCLOG_EMITADDR(start);
+ PMCLOG_EMITSTRING(path,pathlen);
+ PMCLOG_DESPATCH_SCHED_LOCK(po);
+}
+
+void
+pmclog_process_map_out_nowakeup(struct pmc_owner *po, pid_t pid,
+ uintfptr_t start, uintfptr_t end)
+{
+ KASSERT(start <= end, ("[pmclog,%d] start > end", __LINE__));
+
+ PMCLOG_RESERVE_SAFE(po, PMCLOG_TYPE_MAP_OUT,
+ sizeof(struct pmclog_map_out), pmc_rdtsc());
+ PMCLOG_EMIT32(pid);
+ PMCLOG_EMIT32(0);
+ PMCLOG_EMITADDR(start);
+ PMCLOG_EMITADDR(end);
+ PMCLOG_DESPATCH_SCHED_LOCK(po);
+}
+
void
pmclog_process_map_out(struct pmc_owner *po, pid_t pid, uintfptr_t start,
uintfptr_t end)
@@ -994,7 +1033,7 @@
if (PMC_TO_CLASS(pm) == PMC_CLASS_SOFT) {
PMCLOG_RESERVE(po, PMCLOG_TYPE_PMCALLOCATEDYN,
sizeof(struct pmclog_pmcallocatedyn));
- PMCLOG_EMIT32(pm->pm_id);
+ PMCLOG_EMIT32(pm->pm_handle);
PMCLOG_EMIT32(pm->pm_event);
PMCLOG_EMIT32(pm->pm_flags);
PMCLOG_EMIT32(0);
@@ -1009,7 +1048,7 @@
} else {
PMCLOG_RESERVE(po, PMCLOG_TYPE_PMCALLOCATE,
sizeof(struct pmclog_pmcallocate));
- PMCLOG_EMIT32(pm->pm_id);
+ PMCLOG_EMIT32(pm->pm_handle);
PMCLOG_EMIT32(pm->pm_event);
PMCLOG_EMIT32(pm->pm_flags);
PMCLOG_EMIT32(0);
@@ -1032,7 +1071,7 @@
recordlen = offsetof(struct pmclog_pmcattach, pl_pathname) + pathlen;
PMCLOG_RESERVE(po, PMCLOG_TYPE_PMCATTACH, recordlen);
- PMCLOG_EMIT32(pm->pm_id);
+ PMCLOG_EMIT32(pm->pm_handle);
PMCLOG_EMIT32(pid);
PMCLOG_EMITSTRING(path, pathlen);
PMCLOG_DESPATCH_SYNC(po);
@@ -1049,7 +1088,27 @@
PMCLOG_RESERVE(po, PMCLOG_TYPE_PMCDETACH,
sizeof(struct pmclog_pmcdetach));
- PMCLOG_EMIT32(pm->pm_id);
+ PMCLOG_EMIT32(pm->pm_handle);
+ PMCLOG_EMIT32(pid);
+ PMCLOG_DESPATCH_SYNC(po);
+}
+
+/*
+ * Record that a group did not follow a fork.
+ * This is not a detach. The edge never attached, so PMCDETACH is wrong here.
+ */
+void
+pmclog_process_pmcgroupinheritmiss(struct pmc *pm, pid_t pid)
+{
+ struct pmc_owner *po;
+
+ PMCDBG2(LOG,ATT,1,"!pm=%p pid=%d", pm, pid);
+
+ po = pm->pm_owner;
+
+ PMCLOG_RESERVE(po, PMCLOG_TYPE_PMCGROUPINHERITMISS,
+ sizeof(struct pmclog_pmcgroupinheritmiss));
+ PMCLOG_EMIT32(pm->pm_handle);
PMCLOG_EMIT32(pid);
PMCLOG_DESPATCH_SYNC(po);
}
@@ -1094,7 +1153,7 @@
PMCLOG_RESERVE_SAFE(po, PMCLOG_TYPE_PROCCSW,
sizeof(struct pmclog_proccsw), pmc_rdtsc());
PMCLOG_EMIT64(v);
- PMCLOG_EMIT32(pm->pm_id);
+ PMCLOG_EMIT32(pm->pm_handle);
PMCLOG_EMIT32(pp->pp_proc->p_pid);
PMCLOG_EMIT32(td->td_tid);
PMCLOG_EMIT32(0);
@@ -1138,7 +1197,7 @@
PMCLOG_RESERVE(po, PMCLOG_TYPE_PROCEXIT,
sizeof(struct pmclog_procexit));
- PMCLOG_EMIT32(pm->pm_id);
+ PMCLOG_EMIT32(pm->pm_handle);
PMCLOG_EMIT32(pp->pp_proc->p_pid);
PMCLOG_EMIT64(pp->pp_pmcs[ri].pp_pmcval);
PMCLOG_DESPATCH(po);
diff --git a/sys/sys/pmclog.h b/sys/sys/pmclog.h
--- a/sys/sys/pmclog.h
+++ b/sys/sys/pmclog.h
@@ -71,7 +71,8 @@
*/
PMCLOG_TYPE_THR_CREATE = 18,
PMCLOG_TYPE_THR_EXIT = 19,
- PMCLOG_TYPE_PROC_CREATE = 20
+ PMCLOG_TYPE_PROC_CREATE = 20,
+ PMCLOG_TYPE_PMCGROUPINHERITMISS = 21
};
/*
@@ -200,6 +201,12 @@
uint32_t pl_pid;
} __packed;
+struct pmclog_pmcgroupinheritmiss {
+ PMCLOG_ENTRY_HEADER
+ uint32_t pl_pmcid;
+ uint32_t pl_pid;
+} __packed;
+
struct pmclog_proccsw {
PMCLOG_ENTRY_HEADER
uint64_t pl_value; /* keep 8 byte aligned */
@@ -287,6 +294,7 @@
struct pmclog_pmcallocatedyn pl_ad;
struct pmclog_pmcattach pl_t;
struct pmclog_pmcdetach pl_d;
+ struct pmclog_pmcgroupinheritmiss pl_gim;
struct pmclog_proccsw pl_c;
struct pmclog_proccreate pl_pc;
struct pmclog_procexec pl_x;
@@ -327,11 +335,16 @@
void pmclog_process_dropnotify(struct pmc_owner *po);
void pmclog_process_map_in(struct pmc_owner *po, pid_t pid,
uintfptr_t start, const char *path);
+void pmclog_process_map_in_nowakeup(struct pmc_owner *po, pid_t pid,
+ uintfptr_t start, const char *path);
void pmclog_process_map_out(struct pmc_owner *po, pid_t pid,
uintfptr_t start, uintfptr_t end);
+void pmclog_process_map_out_nowakeup(struct pmc_owner *po, pid_t pid,
+ uintfptr_t start, uintfptr_t end);
void pmclog_process_pmcallocate(struct pmc *_pm);
void pmclog_process_pmcattach(struct pmc *_pm, pid_t _pid, char *_path);
void pmclog_process_pmcdetach(struct pmc *_pm, pid_t _pid);
+void pmclog_process_pmcgroupinheritmiss(struct pmc *_pm, pid_t _pid);
void pmclog_process_proccsw(struct pmc *_pm, struct pmc_process *_pp,
pmc_value_t _v, struct thread *);
void pmclog_process_procexec(struct pmc_owner *_po, pmc_id_t _pmid, pid_t _pid,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Oct 20, 1:06 PM (3 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41103453
Default Alt Text
D59358.id188091.diff (5 KB)
Attached To
Mode
D59358: hwpmc: add a group-inherit-miss log record
Attached
Detach File
Event Timeline
Log In to Comment