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 --- |