summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_reserv.c
diff options
context:
space:
mode:
authormdf <mdf@FreeBSD.org>2010-09-13 18:48:23 +0000
committermdf <mdf@FreeBSD.org>2010-09-13 18:48:23 +0000
commit3ed6eac561ccce2958e668867ea38fd005bc635b (patch)
treeb0bd953f5f99c28abddea5f8c7bb39d837607940 /sys/vm/vm_reserv.c
parent9a10f7c4328c6763a33844ed9635ef3c2a7f1e84 (diff)
downloadFreeBSD-src-3ed6eac561ccce2958e668867ea38fd005bc635b.zip
FreeBSD-src-3ed6eac561ccce2958e668867ea38fd005bc635b.tar.gz
Revert r212370, as it causes a LOR on powerpc. powerpc does a few
unexpected things in copyout(9) and so wiring the user buffer is not sufficient to perform a copyout(9) while holding a random mutex. Requested by: nwhitehorn
Diffstat (limited to 'sys/vm/vm_reserv.c')
-rw-r--r--sys/vm/vm_reserv.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/vm/vm_reserv.c b/sys/vm/vm_reserv.c
index aa8e80f..d9e908f 100644
--- a/sys/vm/vm_reserv.c
+++ b/sys/vm/vm_reserv.c
@@ -180,9 +180,12 @@ sysctl_vm_reserv_partpopq(SYSCTL_HANDLER_ARGS)
{
struct sbuf sbuf;
vm_reserv_t rv;
+ char *cbuf;
+ const int cbufsize = (VM_NRESERVLEVEL + 1) * 81;
int counter, error, level, unused_pages;
- sbuf_new_for_sysctl(&sbuf, NULL, 128, req);
+ cbuf = malloc(cbufsize, M_TEMP, M_WAITOK | M_ZERO);
+ sbuf_new(&sbuf, cbuf, cbufsize, SBUF_FIXEDLEN);
sbuf_printf(&sbuf, "\nLEVEL SIZE NUMBER\n\n");
for (level = -1; level <= VM_NRESERVLEVEL - 2; level++) {
counter = 0;
@@ -196,8 +199,10 @@ sysctl_vm_reserv_partpopq(SYSCTL_HANDLER_ARGS)
sbuf_printf(&sbuf, "%5.5d: %6.6dK, %6.6d\n", level,
unused_pages * (PAGE_SIZE / 1024), counter);
}
- error = sbuf_finish(&sbuf);
+ sbuf_finish(&sbuf);
+ error = SYSCTL_OUT(req, sbuf_data(&sbuf), sbuf_len(&sbuf));
sbuf_delete(&sbuf);
+ free(cbuf, M_TEMP);
return (error);
}
OpenPOWER on IntegriCloud