Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/hwpmc/hwpmc_logging.c
Show All 35 Lines | |||||
* Logging code for hwpmc(4) | * Logging code for hwpmc(4) | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/capsicum.h> | #include <sys/capsicum.h> | ||||
#include <sys/domainset.h> | |||||
#include <sys/file.h> | #include <sys/file.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/kthread.h> | #include <sys/kthread.h> | ||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/module.h> | #include <sys/module.h> | ||||
#include <sys/mutex.h> | #include <sys/mutex.h> | ||||
#include <sys/pmc.h> | #include <sys/pmc.h> | ||||
#include <sys/pmckern.h> | #include <sys/pmckern.h> | ||||
▲ Show 20 Lines • Show All 1,174 Lines • ▼ Show 20 Lines | |||||
* Initialization. | * Initialization. | ||||
* | * | ||||
* Create a pool of log buffers and initialize mutexes. | * Create a pool of log buffers and initialize mutexes. | ||||
*/ | */ | ||||
void | void | ||||
pmclog_initialize() | pmclog_initialize() | ||||
{ | { | ||||
int domain; | |||||
struct pmclog_buffer *plb; | struct pmclog_buffer *plb; | ||||
int domain, ncpus, total; | |||||
if (pmclog_buffer_size <= 0 || pmclog_buffer_size > 16*1024) { | if (pmclog_buffer_size <= 0 || pmclog_buffer_size > 16*1024) { | ||||
(void) printf("hwpmc: tunable logbuffersize=%d must be " | (void) printf("hwpmc: tunable logbuffersize=%d must be " | ||||
"greater than zero and less than or equal to 16MB.\n", | "greater than zero and less than or equal to 16MB.\n", | ||||
pmclog_buffer_size); | pmclog_buffer_size); | ||||
pmclog_buffer_size = PMC_LOG_BUFFER_SIZE; | pmclog_buffer_size = PMC_LOG_BUFFER_SIZE; | ||||
} | } | ||||
if (pmc_nlogbuffers_pcpu <= 0) { | if (pmc_nlogbuffers_pcpu <= 0) { | ||||
(void) printf("hwpmc: tunable nlogbuffers=%d must be greater " | (void) printf("hwpmc: tunable nlogbuffers=%d must be greater " | ||||
"than zero.\n", pmc_nlogbuffers_pcpu); | "than zero.\n", pmc_nlogbuffers_pcpu); | ||||
pmc_nlogbuffers_pcpu = PMC_NLOGBUFFERS_PCPU; | pmc_nlogbuffers_pcpu = PMC_NLOGBUFFERS_PCPU; | ||||
} | } | ||||
if (pmc_nlogbuffers_pcpu*pmclog_buffer_size > 32*1024) { | if (pmc_nlogbuffers_pcpu*pmclog_buffer_size > 32*1024) { | ||||
(void) printf("hwpmc: memory allocated pcpu must be less than 32MB (is %dK).\n", | (void) printf("hwpmc: memory allocated pcpu must be less than 32MB (is %dK).\n", | ||||
pmc_nlogbuffers_pcpu*pmclog_buffer_size); | pmc_nlogbuffers_pcpu*pmclog_buffer_size); | ||||
pmc_nlogbuffers_pcpu = PMC_NLOGBUFFERS_PCPU; | pmc_nlogbuffers_pcpu = PMC_NLOGBUFFERS_PCPU; | ||||
pmclog_buffer_size = PMC_LOG_BUFFER_SIZE; | pmclog_buffer_size = PMC_LOG_BUFFER_SIZE; | ||||
} | } | ||||
for (domain = 0; domain < vm_ndomains; domain++) { | for (domain = 0; domain < vm_ndomains; domain++) { | ||||
int ncpus = pmc_dom_hdrs[domain]->pdbh_ncpus; | ncpus = pmc_dom_hdrs[domain]->pdbh_ncpus; | ||||
int total = ncpus*pmc_nlogbuffers_pcpu; | total = ncpus * pmc_nlogbuffers_pcpu; | ||||
plb = malloc_domain(sizeof(struct pmclog_buffer)*total, M_PMC, domain, M_WAITOK|M_ZERO); | plb = malloc_domainset(sizeof(struct pmclog_buffer) * total, | ||||
M_PMC, DOMAINSET_PREF(domain), M_WAITOK | M_ZERO); | |||||
pmc_dom_hdrs[domain]->pdbh_plbs = plb; | pmc_dom_hdrs[domain]->pdbh_plbs = plb; | ||||
for (int i = 0; i < total; i++, plb++) { | for (; total > 0; total--, plb++) { | ||||
void *buf; | void *buf; | ||||
buf = malloc_domain(1024 * pmclog_buffer_size, M_PMC, domain, | buf = malloc_domainset(1024 * pmclog_buffer_size, M_PMC, | ||||
M_WAITOK|M_ZERO); | DOMAINSET_PREF(domain), M_WAITOK | M_ZERO); | ||||
PMCLOG_INIT_BUFFER_DESCRIPTOR(plb, buf, domain); | PMCLOG_INIT_BUFFER_DESCRIPTOR(plb, buf, domain); | ||||
pmc_plb_rele_unlocked(plb); | pmc_plb_rele_unlocked(plb); | ||||
} | } | ||||
} | } | ||||
mtx_init(&pmc_kthread_mtx, "pmc-kthread", "pmc-sleep", MTX_DEF); | mtx_init(&pmc_kthread_mtx, "pmc-kthread", "pmc-sleep", MTX_DEF); | ||||
} | } | ||||
/* | /* | ||||
Show All 21 Lines |