Esempio n. 1
0
/*
 * Read an array of N counters in kernel memory into array of N uint64_t's.
 */
int
kread_counters(u_long addr, void *buf, size_t size)
{
	uint64_t *c;
	u_long *counters;
	size_t i, n;

	if (kvmd_init() < 0)
		return (-1);

	if (size % sizeof(uint64_t) != 0) {
		xo_warnx("kread_counters: invalid counter set size");
		return (-1);
	}

	n = size / sizeof(uint64_t);
	if ((counters = malloc(n * sizeof(u_long))) == NULL)
		xo_err(-1, "malloc");
	if (kread(addr, counters, n * sizeof(u_long)) < 0) {
		free(counters);
		return (-1);
	}

	c = buf;
	for (i = 0; i < n; i++)
		c[i] = kvm_counter_u64_fetch(kvmd, counters[i]);

	free(counters);
	return (0);
}
Esempio n. 2
0
/*
 * Read single counter(9).
 */
uint64_t
kread_counter(u_long addr)
{

	if (kvmd_init() < 0)
		return (-1);

	return (kvm_counter_u64_fetch(kvmd, addr));
}
Esempio n. 3
0
/*
 * Read an array of N counters in kernel memory into array of N uint64_t's.
 */
int
kread_counters(u_long *addr, uint64_t *rval, size_t count)
{

	if (kvmd_init() < 0)
		return (-1);

	for (u_int i = 0; i < count; i++, addr++, rval++)
		*rval = kvm_counter_u64_fetch(kvmd, *addr);

	return (0);
}
Esempio n. 4
0
/*
 * Read an array of N counters in kernel memory into array of N uint64_t's.
 */
int
kread_counters(u_long addr, void *buf, size_t size)
{
	uint64_t *c = buf;

	if (kvmd_init() < 0)
		return (-1);

	if (kread(addr, buf, size) < 0)
		return (-1);

	while (size != 0) {
		*c = kvm_counter_u64_fetch(kvmd, *c);
		size -= sizeof(*c);
		c++;
	}
	return (0);
}