summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_phys.c
diff options
context:
space:
mode:
authormdf <mdf@FreeBSD.org>2010-09-16 16:13:12 +0000
committermdf <mdf@FreeBSD.org>2010-09-16 16:13:12 +0000
commit5695ef46983ceb88b1862571c052f8da0fac0275 (patch)
treeafd1abc4a36abd5ca015ead87a457fe7f1968ed9 /sys/vm/vm_phys.c
parent39642e55302d3d222f5a118fb3a4c6eb91d7e5a0 (diff)
downloadFreeBSD-src-5695ef46983ceb88b1862571c052f8da0fac0275.zip
FreeBSD-src-5695ef46983ceb88b1862571c052f8da0fac0275.tar.gz
Re-add r212370 now that the LOR in powerpc64 has been resolved:
Add a drain function for struct sysctl_req, and use it for a variety of handlers, some of which had to do awkward things to get a large enough SBUF_FIXEDLEN buffer. Note that some sysctl handlers were explicitly outputting a trailing NUL byte. This behaviour was preserved, though it should not be necessary. Reviewed by: phk (original patch)
Diffstat (limited to 'sys/vm/vm_phys.c')
-rw-r--r--sys/vm/vm_phys.c27
1 files changed, 6 insertions, 21 deletions
diff --git a/sys/vm/vm_phys.c b/sys/vm/vm_phys.c
index e75c340..26e4981 100644
--- a/sys/vm/vm_phys.c
+++ b/sys/vm/vm_phys.c
@@ -123,12 +123,9 @@ sysctl_vm_phys_free(SYSCTL_HANDLER_ARGS)
{
struct sbuf sbuf;
struct vm_freelist *fl;
- char *cbuf;
- const int cbufsize = vm_nfreelists*(VM_NFREEORDER + 1)*81;
int error, flind, oind, pind;
- cbuf = malloc(cbufsize, M_TEMP, M_WAITOK | M_ZERO);
- sbuf_new(&sbuf, cbuf, cbufsize, SBUF_FIXEDLEN);
+ sbuf_new_for_sysctl(&sbuf, NULL, 128, req);
for (flind = 0; flind < vm_nfreelists; flind++) {
sbuf_printf(&sbuf, "\nFREE LIST %d:\n"
"\n ORDER (SIZE) | NUMBER"
@@ -149,10 +146,8 @@ sysctl_vm_phys_free(SYSCTL_HANDLER_ARGS)
sbuf_printf(&sbuf, "\n");
}
}
- sbuf_finish(&sbuf);
- error = SYSCTL_OUT(req, sbuf_data(&sbuf), sbuf_len(&sbuf));
+ error = sbuf_finish(&sbuf);
sbuf_delete(&sbuf);
- free(cbuf, M_TEMP);
return (error);
}
@@ -164,12 +159,9 @@ sysctl_vm_phys_segs(SYSCTL_HANDLER_ARGS)
{
struct sbuf sbuf;
struct vm_phys_seg *seg;
- char *cbuf;
- const int cbufsize = VM_PHYSSEG_MAX*(VM_NFREEORDER + 1)*81;
int error, segind;
- cbuf = malloc(cbufsize, M_TEMP, M_WAITOK | M_ZERO);
- sbuf_new(&sbuf, cbuf, cbufsize, SBUF_FIXEDLEN);
+ sbuf_new_for_sysctl(&sbuf, NULL, 128, req);
for (segind = 0; segind < vm_phys_nsegs; segind++) {
sbuf_printf(&sbuf, "\nSEGMENT %d:\n\n", segind);
seg = &vm_phys_segs[segind];
@@ -180,10 +172,8 @@ sysctl_vm_phys_segs(SYSCTL_HANDLER_ARGS)
sbuf_printf(&sbuf, "domain: %d\n", seg->domain);
sbuf_printf(&sbuf, "free list: %p\n", seg->free_queues);
}
- sbuf_finish(&sbuf);
- error = SYSCTL_OUT(req, sbuf_data(&sbuf), sbuf_len(&sbuf));
+ error = sbuf_finish(&sbuf);
sbuf_delete(&sbuf);
- free(cbuf, M_TEMP);
return (error);
}
@@ -195,23 +185,18 @@ static int
sysctl_vm_phys_lookup_lists(SYSCTL_HANDLER_ARGS)
{
struct sbuf sbuf;
- char *cbuf;
- const int cbufsize = (vm_nfreelists + 1) * VM_NDOMAIN * 81;
int domain, error, flind, ndomains;
ndomains = vm_nfreelists - VM_NFREELIST + 1;
- cbuf = malloc(cbufsize, M_TEMP, M_WAITOK | M_ZERO);
- sbuf_new(&sbuf, cbuf, cbufsize, SBUF_FIXEDLEN);
+ sbuf_new_for_sysctl(&sbuf, NULL, 128, req);
for (domain = 0; domain < ndomains; domain++) {
sbuf_printf(&sbuf, "\nDOMAIN %d:\n\n", domain);
for (flind = 0; flind < vm_nfreelists; flind++)
sbuf_printf(&sbuf, " [%d]:\t%p\n", flind,
vm_phys_lookup_lists[domain][flind]);
}
- sbuf_finish(&sbuf);
- error = SYSCTL_OUT(req, sbuf_data(&sbuf), sbuf_len(&sbuf));
+ error = sbuf_finish(&sbuf);
sbuf_delete(&sbuf);
- free(cbuf, M_TEMP);
return (error);
}
#endif
OpenPOWER on IntegriCloud