Deleted Added
full compact
hwpmc_logging.c (147191) hwpmc_logging.c (147708)
1/*-
2 * Copyright (c) 2005 Joseph Koshy
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 16 unchanged lines hidden (view full) ---

25 *
26 */
27
28/*
29 * Logging code for hwpmc(4)
30 */
31
32#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2005 Joseph Koshy
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 16 unchanged lines hidden (view full) ---

25 *
26 */
27
28/*
29 * Logging code for hwpmc(4)
30 */
31
32#include <sys/cdefs.h>
33__FBSDID("$FreeBSD: head/sys/dev/hwpmc/hwpmc_logging.c 147191 2005-06-09 19:45:09Z jkoshy $");
33__FBSDID("$FreeBSD: head/sys/dev/hwpmc/hwpmc_logging.c 147708 2005-06-30 19:01:26Z jkoshy $");
34
35#include <sys/param.h>
36#include <sys/file.h>
37#include <sys/kernel.h>
38#include <sys/kthread.h>
39#include <sys/lock.h>
40#include <sys/module.h>
41#include <sys/mutex.h>

--- 91 unchanged lines hidden (view full) ---

133 */
134
135CTASSERT(sizeof(struct pmclog_closelog) == 3*4);
136CTASSERT(sizeof(struct pmclog_dropnotify) == 3*4);
137CTASSERT(sizeof(struct pmclog_mappingchange) == PATH_MAX +
138 5*4 + 2*sizeof(uintfptr_t));
139CTASSERT(offsetof(struct pmclog_mappingchange,pl_pathname) ==
140 5*4 + 2*sizeof(uintfptr_t));
34
35#include <sys/param.h>
36#include <sys/file.h>
37#include <sys/kernel.h>
38#include <sys/kthread.h>
39#include <sys/lock.h>
40#include <sys/module.h>
41#include <sys/mutex.h>

--- 91 unchanged lines hidden (view full) ---

133 */
134
135CTASSERT(sizeof(struct pmclog_closelog) == 3*4);
136CTASSERT(sizeof(struct pmclog_dropnotify) == 3*4);
137CTASSERT(sizeof(struct pmclog_mappingchange) == PATH_MAX +
138 5*4 + 2*sizeof(uintfptr_t));
139CTASSERT(offsetof(struct pmclog_mappingchange,pl_pathname) ==
140 5*4 + 2*sizeof(uintfptr_t));
141CTASSERT(sizeof(struct pmclog_pcsample) == 5*4 + sizeof(uintfptr_t));
141CTASSERT(sizeof(struct pmclog_pcsample) == 6*4 + sizeof(uintfptr_t));
142CTASSERT(sizeof(struct pmclog_pmcallocate) == 6*4);
143CTASSERT(sizeof(struct pmclog_pmcattach) == 5*4 + PATH_MAX);
144CTASSERT(offsetof(struct pmclog_pmcattach,pl_pathname) == 5*4);
145CTASSERT(sizeof(struct pmclog_pmcdetach) == 5*4);
146CTASSERT(sizeof(struct pmclog_proccsw) == 5*4 + 8);
142CTASSERT(sizeof(struct pmclog_pmcallocate) == 6*4);
143CTASSERT(sizeof(struct pmclog_pmcattach) == 5*4 + PATH_MAX);
144CTASSERT(offsetof(struct pmclog_pmcattach,pl_pathname) == 5*4);
145CTASSERT(sizeof(struct pmclog_pmcdetach) == 5*4);
146CTASSERT(sizeof(struct pmclog_proccsw) == 5*4 + 8);
147CTASSERT(sizeof(struct pmclog_procexec) == 4*4 + PATH_MAX);
148CTASSERT(offsetof(struct pmclog_procexec,pl_pathname) == 4*4);
147CTASSERT(sizeof(struct pmclog_procexec) == 5*4 + PATH_MAX +
148 sizeof(uintfptr_t));
149CTASSERT(offsetof(struct pmclog_procexec,pl_pathname) == 5*4 +
150 sizeof(uintfptr_t));
149CTASSERT(sizeof(struct pmclog_procexit) == 5*4 + 8);
150CTASSERT(sizeof(struct pmclog_procfork) == 5*4);
151CTASSERT(sizeof(struct pmclog_sysexit) == 4*4);
152CTASSERT(sizeof(struct pmclog_userdata) == 4*4);
153
154/*
155 * Log buffer structure
156 */

--- 593 unchanged lines hidden (view full) ---

750 (void *) ps->ps_pc);
751
752 po = pm->pm_owner;
753
754 PMCLOG_RESERVE(po, PCSAMPLE, sizeof(struct pmclog_pcsample));
755 PMCLOG_EMIT32(ps->ps_pid);
756 PMCLOG_EMITADDR(ps->ps_pc);
757 PMCLOG_EMIT32(pm->pm_id);
151CTASSERT(sizeof(struct pmclog_procexit) == 5*4 + 8);
152CTASSERT(sizeof(struct pmclog_procfork) == 5*4);
153CTASSERT(sizeof(struct pmclog_sysexit) == 4*4);
154CTASSERT(sizeof(struct pmclog_userdata) == 4*4);
155
156/*
157 * Log buffer structure
158 */

--- 593 unchanged lines hidden (view full) ---

752 (void *) ps->ps_pc);
753
754 po = pm->pm_owner;
755
756 PMCLOG_RESERVE(po, PCSAMPLE, sizeof(struct pmclog_pcsample));
757 PMCLOG_EMIT32(ps->ps_pid);
758 PMCLOG_EMITADDR(ps->ps_pc);
759 PMCLOG_EMIT32(pm->pm_id);
760 PMCLOG_EMIT32(ps->ps_usermode);
758 PMCLOG_DESPATCH(po);
759}
760
761void
762pmclog_process_pmcallocate(struct pmc *pm)
763{
764 struct pmc_owner *po;
765

--- 63 unchanged lines hidden (view full) ---

829 PMCLOG_RESERVE(po, PROCCSW, sizeof(struct pmclog_proccsw));
830 PMCLOG_EMIT32(pm->pm_id);
831 PMCLOG_EMIT64(v);
832 PMCLOG_EMIT32(pp->pp_proc->p_pid);
833 PMCLOG_DESPATCH(po);
834}
835
836void
761 PMCLOG_DESPATCH(po);
762}
763
764void
765pmclog_process_pmcallocate(struct pmc *pm)
766{
767 struct pmc_owner *po;
768

--- 63 unchanged lines hidden (view full) ---

832 PMCLOG_RESERVE(po, PROCCSW, sizeof(struct pmclog_proccsw));
833 PMCLOG_EMIT32(pm->pm_id);
834 PMCLOG_EMIT64(v);
835 PMCLOG_EMIT32(pp->pp_proc->p_pid);
836 PMCLOG_DESPATCH(po);
837}
838
839void
837pmclog_process_procexec(struct pmc_owner *po, pid_t pid, char *path)
840pmclog_process_procexec(struct pmc_owner *po, pmc_id_t pmid, pid_t pid,
841 uintfptr_t startaddr, char *path)
838{
839 int pathlen, recordlen;
840
841 PMCDBG(LOG,EXC,1,"po=%p pid=%d path=\"%s\"", po, pid, path);
842
843 pathlen = strlen(path) + 1; /* #bytes for the path */
844 recordlen = offsetof(struct pmclog_procexec, pl_pathname) + pathlen;
845
846 PMCLOG_RESERVE(po, PROCEXEC, recordlen);
847 PMCLOG_EMIT32(pid);
842{
843 int pathlen, recordlen;
844
845 PMCDBG(LOG,EXC,1,"po=%p pid=%d path=\"%s\"", po, pid, path);
846
847 pathlen = strlen(path) + 1; /* #bytes for the path */
848 recordlen = offsetof(struct pmclog_procexec, pl_pathname) + pathlen;
849
850 PMCLOG_RESERVE(po, PROCEXEC, recordlen);
851 PMCLOG_EMIT32(pid);
852 PMCLOG_EMITADDR(startaddr);
853 PMCLOG_EMIT32(pmid);
848 PMCLOG_EMITSTRING(path,pathlen);
849 PMCLOG_DESPATCH(po);
850}
851
852/*
853 * Log a process exit event (and accumulated pmc value) to the log file.
854 */
855
856void
857pmclog_process_procexit(struct pmc *pm, struct pmc_process *pp)
858{
859 int ri;
860 struct pmc_owner *po;
861
854 PMCLOG_EMITSTRING(path,pathlen);
855 PMCLOG_DESPATCH(po);
856}
857
858/*
859 * Log a process exit event (and accumulated pmc value) to the log file.
860 */
861
862void
863pmclog_process_procexit(struct pmc *pm, struct pmc_process *pp)
864{
865 int ri;
866 struct pmc_owner *po;
867
862 KASSERT(pm->pm_flags & PMC_F_LOG_PROCEXIT,
863 ("[pmc,%d] log-process-exit called gratuitously", __LINE__));
864
865 ri = PMC_TO_ROWINDEX(pm);
866 PMCDBG(LOG,EXT,1,"pm=%p pid=%d v=%jx", pm, pp->pp_proc->p_pid,
867 pp->pp_pmcs[ri].pp_pmcval);
868
869 po = pm->pm_owner;
870
871 PMCLOG_RESERVE(po, PROCEXIT, sizeof(struct pmclog_procexit));
872 PMCLOG_EMIT32(pm->pm_id);

--- 106 unchanged lines hidden ---
868 ri = PMC_TO_ROWINDEX(pm);
869 PMCDBG(LOG,EXT,1,"pm=%p pid=%d v=%jx", pm, pp->pp_proc->p_pid,
870 pp->pp_pmcs[ri].pp_pmcval);
871
872 po = pm->pm_owner;
873
874 PMCLOG_RESERVE(po, PROCEXIT, sizeof(struct pmclog_procexit));
875 PMCLOG_EMIT32(pm->pm_id);

--- 106 unchanged lines hidden ---