From 4b2af45f4ba1f8d8d5a56c4b18f29da6d08146e9 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Mon, 20 Nov 1995 12:42:39 +0000 Subject: [PATCH] Mega commit for sysctl. Convert the remaining sysctl stuff to the new way of doing things. the devconf stuff is the reason for the large number of files. Cleaned up some compiler warnings while I were there. --- sys/amd64/amd64/machdep.c | 11 +- sys/amd64/isa/isa.c | 31 +-- sys/dev/eisa/eisaconf.c | 22 +- sys/dev/eisa/eisaconf.h | 7 +- sys/dev/fdc/fdc.c | 17 +- sys/dev/pci/pci.c | 19 +- sys/i386/eisa/eisaconf.c | 22 +- sys/i386/eisa/eisaconf.h | 7 +- sys/i386/i386/machdep.c | 11 +- sys/i386/include/devconf.h | 16 +- sys/i386/isa/fd.c | 17 +- sys/i386/isa/ft.c | 10 +- sys/i386/isa/isa.c | 31 +-- sys/i386/isa/isa_device.h | 9 +- sys/i386/isa/wcd.c | 7 +- sys/i386/isa/wd.c | 9 +- sys/isa/fd.c | 17 +- sys/kern/kern_devconf.c | 88 +++---- sys/kern/kern_sysctl.c | 473 +++++++++---------------------------- sys/kern/subr_prof.c | 32 ++- sys/kern/vfs_export.c | 60 ++--- sys/kern/vfs_init.c | 72 ++---- sys/kern/vfs_subr.c | 60 ++--- sys/pci/pci.c | 19 +- sys/scsi/cd.c | 8 +- sys/scsi/ch.c | 8 +- sys/scsi/od.c | 8 +- sys/scsi/scsiconf.c | 20 +- sys/scsi/scsiconf.h | 4 +- sys/scsi/sd.c | 8 +- sys/scsi/st.c | 8 +- sys/sys/devconf.h | 9 +- sys/sys/sysctl.h | 27 +-- 33 files changed, 340 insertions(+), 827 deletions(-) diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 8963c346263..77cfdb93a62 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.150 1995/11/12 19:51:22 phk Exp $ + * $Id: machdep.c,v 1.151 1995/11/14 09:52:25 phk Exp $ */ #include "npx.h" @@ -1821,12 +1821,7 @@ bad: } int -disk_externalize(int drive, void *userp, size_t *maxlen) +disk_externalize(int drive, struct sysctl_req *req) { - if(*maxlen < sizeof drive) { - return ENOMEM; - } - - *maxlen -= sizeof drive; - return copyout(&drive, userp, sizeof drive); + return SYSCTL_OUT(req, &drive, sizeof drive); } diff --git a/sys/amd64/isa/isa.c b/sys/amd64/isa/isa.c index 21d653ba083..35003e89ef6 100644 --- a/sys/amd64/isa/isa.c +++ b/sys/amd64/isa/isa.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)isa.c 7.2 (Berkeley) 5/13/91 - * $Id: isa.c,v 1.54 1995/10/31 21:03:57 peter Exp $ + * $Id: isa.c,v 1.55 1995/11/05 04:45:15 gibbs Exp $ */ /* @@ -50,6 +50,7 @@ #include #include /* isn't it a joy */ #include /* to have three of these */ +#include #include #include #include @@ -508,14 +509,9 @@ config_isadev_c(isdp, mp, reconfig) * hw.devconf interface. */ int -isa_externalize(struct isa_device *id, void *userp, size_t *maxlen) +isa_externalize(struct isa_device *id, struct sysctl_req *req) { - if(*maxlen < sizeof *id) { - return ENOMEM; - } - - *maxlen -= sizeof *id; - return copyout(id, userp, sizeof *id); + return (SYSCTL_OUT(req, id, sizeof *id)); } /* @@ -524,20 +520,14 @@ isa_externalize(struct isa_device *id, void *userp, size_t *maxlen) * what the `internalize' routine is supposed to do. */ int -isa_internalize(struct isa_device *id, void **userpp, size_t *len) +isa_internalize(struct isa_device *id, struct sysctl_req *req) { struct isa_device myid; - char *userp = *userpp; int rv; - if(*len < sizeof *id) { - return EINVAL; - } - - rv = copyin(userp, &myid, sizeof myid); - if(rv) return rv; - *userpp = userp + sizeof myid; - *len -= sizeof myid; + rv = SYSCTL_IN(req, &myid, sizeof *id); + if(rv) + return rv; rv = EOPNOTSUPP; /* code would go here to validate the configuration request */ @@ -546,10 +536,9 @@ isa_internalize(struct isa_device *id, void **userpp, size_t *len) } int -isa_generic_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t l) +isa_generic_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return isa_externalize(kdc->kdc_isa, userp, &l); + return isa_externalize(kdc->kdc_isa, req); } /* diff --git a/sys/dev/eisa/eisaconf.c b/sys/dev/eisa/eisaconf.c index d1b37efe114..b83cc493d45 100644 --- a/sys/dev/eisa/eisaconf.c +++ b/sys/dev/eisa/eisaconf.c @@ -18,11 +18,12 @@ * 4. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: eisaconf.c,v 1.6 1995/11/09 22:43:25 gibbs Exp $ + * $Id: eisaconf.c,v 1.7 1995/11/10 01:32:12 gibbs Exp $ */ #include #include #include +#include #include #include #include @@ -464,25 +465,14 @@ eisa_registerdev(e_dev, driver, kdc_template) * hw.devconf interface. */ int -eisa_externalize(e_dev, userp, maxlen) - struct eisa_device *e_dev; - void *userp; - size_t *maxlen; +eisa_externalize(struct eisa_device *e_dev, struct sysctl_req *req) { - if (*maxlen < sizeof *e_dev) { - return ENOMEM; - } - *maxlen -= sizeof *e_dev; - return (copyout(e_dev, userp, sizeof *e_dev)); + return (SYSCTL_OUT(req, e_dev, sizeof *e_dev)); } int -eisa_generic_externalize(p, kdc, userp, l) - struct proc *p; - struct kern_devconf *kdc; - void *userp; - size_t l; +eisa_generic_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return eisa_externalize(kdc->kdc_eisa, userp, &l); + return eisa_externalize(kdc->kdc_eisa, req); } diff --git a/sys/dev/eisa/eisaconf.h b/sys/dev/eisa/eisaconf.h index b7628468131..7d79d89dfdc 100644 --- a/sys/dev/eisa/eisaconf.h +++ b/sys/dev/eisa/eisaconf.h @@ -18,7 +18,7 @@ * 4. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: eisaconf.h,v 1.3 1995/11/05 04:42:50 gibbs Exp $ + * $Id: eisaconf.h,v 1.4 1995/11/06 05:21:01 gibbs Exp $ */ #ifndef _I386_EISA_EISACONF_H_ @@ -85,9 +85,10 @@ int eisa_reg_iospace __P((struct eisa_device *, u_long, int)); int eisa_registerdev __P((struct eisa_device *, struct eisa_driver *, struct kern_devconf *)); -extern int eisa_externalize __P((struct eisa_device *, void *, size_t *)); +struct sysctl_req; +int eisa_externalize (struct eisa_device *, struct sysctl_req*); -extern int eisa_generic_externalize __P((struct proc *,struct kern_devconf *, void *, size_t)); +int eisa_generic_externalize (struct kern_devconf *, struct sysctl_req *); extern struct kern_devconf kdc_eisa0; #define EISA_EXTERNALLEN (sizeof(struct eisa_device)) diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c index f8622035de7..4601645463a 100644 --- a/sys/dev/fdc/fdc.c +++ b/sys/dev/fdc/fdc.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.69 1995/11/04 17:07:17 bde Exp $ + * $Id: fd.c,v 1.70 1995/11/18 07:48:11 bde Exp $ * */ @@ -89,8 +89,7 @@ static int fd_goaway(struct kern_devconf *, int); static int fdc_goaway(struct kern_devconf *, int); -static int -fd_externalize(struct proc *, struct kern_devconf *, void *, size_t); +static int fd_externalize(struct kern_devconf *, struct sysctl_req *); /* * Templates for the kern_devconf structures used when we attach. @@ -344,17 +343,9 @@ struct isa_device *fdcdevs[NFDC]; * Provide hw.devconf information. */ static int -fd_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t len) +fd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return disk_externalize(fd_data[kdc->kdc_unit].fdsu, userp, &len); -} - -static int -fdc_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t len) -{ - return isa_externalize(fdcdevs[kdc->kdc_unit], userp, &len); + return disk_externalize(fd_data[kdc->kdc_unit].fdsu, req); } static int diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 50337e5c41e..a14c96f6e93 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -1,6 +1,6 @@ /************************************************************************** ** -** $Id: pci.c,v 1.31 1995/09/14 23:24:29 se Exp $ +** $Id: pci.c,v 1.32 1995/10/02 13:43:11 davidg Exp $ ** ** General subroutines for the PCI bus. ** pci_configure () @@ -51,6 +51,7 @@ #include #include #include +#include #include /* declaration of wakeup(), used by vm.h */ #include @@ -109,11 +110,9 @@ struct pcicb { u_long pcicb_p_memlimit; }; -static int -pci_externalize (struct proc *, struct kern_devconf *, void *, size_t); +static int pci_externalize (struct kern_devconf *, struct sysctl_req *); -static int -pci_internalize (struct proc *, struct kern_devconf *, void *, size_t); +static int pci_internalize (struct kern_devconf *, struct sysctl_req *); static void not_supported (pcici_t tag, u_long type); @@ -1091,17 +1090,13 @@ int pci_map_mem (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa) */ static int -pci_externalize (struct proc *p, struct kern_devconf *kdcp, void *u, size_t l) +pci_externalize (struct kern_devconf *kdcp, struct sysctl_req *req) { struct pci_externalize_buffer buffer; struct pci_info * pip = kdcp->kdc_parentdata; pcici_t tag; int i; - if (l < sizeof buffer) { - return ENOMEM; - }; - tag = pcibus->pb_tag (pip->pi_bus, pip->pi_device, 0); buffer.peb_pci_info = *pip; @@ -1110,12 +1105,12 @@ pci_externalize (struct proc *p, struct kern_devconf *kdcp, void *u, size_t l) buffer.peb_config[i] = pcibus->pb_read (tag, i*4); }; - return copyout(&buffer, u, sizeof buffer); + return SYSCTL_OUT(req, &buffer, sizeof buffer); } static int -pci_internalize (struct proc *p, struct kern_devconf *kdcp, void *u, size_t s) +pci_internalize (struct kern_devconf *kdcp, struct sysctl_req *re) { return EOPNOTSUPP; } diff --git a/sys/i386/eisa/eisaconf.c b/sys/i386/eisa/eisaconf.c index d1b37efe114..b83cc493d45 100644 --- a/sys/i386/eisa/eisaconf.c +++ b/sys/i386/eisa/eisaconf.c @@ -18,11 +18,12 @@ * 4. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: eisaconf.c,v 1.6 1995/11/09 22:43:25 gibbs Exp $ + * $Id: eisaconf.c,v 1.7 1995/11/10 01:32:12 gibbs Exp $ */ #include #include #include +#include #include #include #include @@ -464,25 +465,14 @@ eisa_registerdev(e_dev, driver, kdc_template) * hw.devconf interface. */ int -eisa_externalize(e_dev, userp, maxlen) - struct eisa_device *e_dev; - void *userp; - size_t *maxlen; +eisa_externalize(struct eisa_device *e_dev, struct sysctl_req *req) { - if (*maxlen < sizeof *e_dev) { - return ENOMEM; - } - *maxlen -= sizeof *e_dev; - return (copyout(e_dev, userp, sizeof *e_dev)); + return (SYSCTL_OUT(req, e_dev, sizeof *e_dev)); } int -eisa_generic_externalize(p, kdc, userp, l) - struct proc *p; - struct kern_devconf *kdc; - void *userp; - size_t l; +eisa_generic_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return eisa_externalize(kdc->kdc_eisa, userp, &l); + return eisa_externalize(kdc->kdc_eisa, req); } diff --git a/sys/i386/eisa/eisaconf.h b/sys/i386/eisa/eisaconf.h index b7628468131..7d79d89dfdc 100644 --- a/sys/i386/eisa/eisaconf.h +++ b/sys/i386/eisa/eisaconf.h @@ -18,7 +18,7 @@ * 4. Modifications may be freely made to this file if the above conditions * are met. * - * $Id: eisaconf.h,v 1.3 1995/11/05 04:42:50 gibbs Exp $ + * $Id: eisaconf.h,v 1.4 1995/11/06 05:21:01 gibbs Exp $ */ #ifndef _I386_EISA_EISACONF_H_ @@ -85,9 +85,10 @@ int eisa_reg_iospace __P((struct eisa_device *, u_long, int)); int eisa_registerdev __P((struct eisa_device *, struct eisa_driver *, struct kern_devconf *)); -extern int eisa_externalize __P((struct eisa_device *, void *, size_t *)); +struct sysctl_req; +int eisa_externalize (struct eisa_device *, struct sysctl_req*); -extern int eisa_generic_externalize __P((struct proc *,struct kern_devconf *, void *, size_t)); +int eisa_generic_externalize (struct kern_devconf *, struct sysctl_req *); extern struct kern_devconf kdc_eisa0; #define EISA_EXTERNALLEN (sizeof(struct eisa_device)) diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index 8963c346263..77cfdb93a62 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.150 1995/11/12 19:51:22 phk Exp $ + * $Id: machdep.c,v 1.151 1995/11/14 09:52:25 phk Exp $ */ #include "npx.h" @@ -1821,12 +1821,7 @@ bad: } int -disk_externalize(int drive, void *userp, size_t *maxlen) +disk_externalize(int drive, struct sysctl_req *req) { - if(*maxlen < sizeof drive) { - return ENOMEM; - } - - *maxlen -= sizeof drive; - return copyout(&drive, userp, sizeof drive); + return SYSCTL_OUT(req, &drive, sizeof drive); } diff --git a/sys/i386/include/devconf.h b/sys/i386/include/devconf.h index c1c822cf257..d4a30c9df34 100644 --- a/sys/i386/include/devconf.h +++ b/sys/i386/include/devconf.h @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: devconf.h,v 1.10 1995/11/05 04:43:22 gibbs Exp $ + * $Id: devconf.h,v 1.11 1995/11/14 20:52:14 phk Exp $ */ /* * devconf.h - machine-dependent device configuration table @@ -67,23 +67,13 @@ struct machdep_devconf { #define kdc_eisa kdc_parentdata #define kdc_scsi kdc_parentdata - - -/* XXX Don't do this, compile time increases too much -#include -#include -#include -#include -#include -#include -*/ - #define CPU_EXTERNALLEN (0) #define DISK_EXTERNALLEN (sizeof(int)) #define BUS_EXTERNALLEN (0) #ifdef KERNEL /* XXX move this */ -extern int disk_externalize(int, void *, size_t *); +struct sysctl_req; +extern int disk_externalize(int, struct sysctl_req *); #endif #endif /* _MACHINE_DEVCONF_H_ */ diff --git a/sys/i386/isa/fd.c b/sys/i386/isa/fd.c index f8622035de7..4601645463a 100644 --- a/sys/i386/isa/fd.c +++ b/sys/i386/isa/fd.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.69 1995/11/04 17:07:17 bde Exp $ + * $Id: fd.c,v 1.70 1995/11/18 07:48:11 bde Exp $ * */ @@ -89,8 +89,7 @@ static int fd_goaway(struct kern_devconf *, int); static int fdc_goaway(struct kern_devconf *, int); -static int -fd_externalize(struct proc *, struct kern_devconf *, void *, size_t); +static int fd_externalize(struct kern_devconf *, struct sysctl_req *); /* * Templates for the kern_devconf structures used when we attach. @@ -344,17 +343,9 @@ struct isa_device *fdcdevs[NFDC]; * Provide hw.devconf information. */ static int -fd_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t len) +fd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return disk_externalize(fd_data[kdc->kdc_unit].fdsu, userp, &len); -} - -static int -fdc_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t len) -{ - return isa_externalize(fdcdevs[kdc->kdc_unit], userp, &len); + return disk_externalize(fd_data[kdc->kdc_unit].fdsu, req); } static int diff --git a/sys/i386/isa/ft.c b/sys/i386/isa/ft.c index a56a84f432f..8d116d5d70a 100644 --- a/sys/i386/isa/ft.c +++ b/sys/i386/isa/ft.c @@ -17,7 +17,7 @@ * POSSIBILITY OF SUCH DAMAGE. * * ft.c - QIC-40/80 floppy tape driver - * $Id: ft.c,v 1.21 1995/05/06 19:34:28 joerg Exp $ + * $Id: ft.c,v 1.22 1995/05/30 08:01:41 rgrimes Exp $ * * 01/19/95 ++sg * Cleaned up recalibrate/seek code at attach time for FreeBSD 2.x. @@ -401,8 +401,7 @@ segio_free(ft_p ft, SegReq *sp) DPRT(("segio_free: nfree=%d ndone=%d nreq=%d\n", ft->nfreelist, ft->ndoneq, ft->nsegq)); } -static int ft_externalize(struct proc *, struct kern_devconf *, void *, - size_t); +static int ft_externalize(struct kern_devconf *, struct sysctl_req *); extern struct kern_devconf kdc_fdc[]; static struct kern_devconf kdc_ft[NFT] = { { @@ -430,10 +429,9 @@ ft_registerdev(int ctlr, int unit) static int -ft_externalize(struct proc *p, struct kern_devconf *kdc, void *userp, - size_t len) +ft_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return disk_externalize(ft_data[kdc->kdc_unit].ftsu, userp, &len); + return disk_externalize(ft_data[kdc->kdc_unit].ftsu, req); } /* diff --git a/sys/i386/isa/isa.c b/sys/i386/isa/isa.c index 21d653ba083..35003e89ef6 100644 --- a/sys/i386/isa/isa.c +++ b/sys/i386/isa/isa.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)isa.c 7.2 (Berkeley) 5/13/91 - * $Id: isa.c,v 1.54 1995/10/31 21:03:57 peter Exp $ + * $Id: isa.c,v 1.55 1995/11/05 04:45:15 gibbs Exp $ */ /* @@ -50,6 +50,7 @@ #include #include /* isn't it a joy */ #include /* to have three of these */ +#include #include #include #include @@ -508,14 +509,9 @@ config_isadev_c(isdp, mp, reconfig) * hw.devconf interface. */ int -isa_externalize(struct isa_device *id, void *userp, size_t *maxlen) +isa_externalize(struct isa_device *id, struct sysctl_req *req) { - if(*maxlen < sizeof *id) { - return ENOMEM; - } - - *maxlen -= sizeof *id; - return copyout(id, userp, sizeof *id); + return (SYSCTL_OUT(req, id, sizeof *id)); } /* @@ -524,20 +520,14 @@ isa_externalize(struct isa_device *id, void *userp, size_t *maxlen) * what the `internalize' routine is supposed to do. */ int -isa_internalize(struct isa_device *id, void **userpp, size_t *len) +isa_internalize(struct isa_device *id, struct sysctl_req *req) { struct isa_device myid; - char *userp = *userpp; int rv; - if(*len < sizeof *id) { - return EINVAL; - } - - rv = copyin(userp, &myid, sizeof myid); - if(rv) return rv; - *userpp = userp + sizeof myid; - *len -= sizeof myid; + rv = SYSCTL_IN(req, &myid, sizeof *id); + if(rv) + return rv; rv = EOPNOTSUPP; /* code would go here to validate the configuration request */ @@ -546,10 +536,9 @@ isa_internalize(struct isa_device *id, void **userpp, size_t *len) } int -isa_generic_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t l) +isa_generic_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return isa_externalize(kdc->kdc_isa, userp, &l); + return isa_externalize(kdc->kdc_isa, req); } /* diff --git a/sys/i386/isa/isa_device.h b/sys/i386/isa/isa_device.h index 3ce03858378..1fb22d9f6fe 100644 --- a/sys/i386/isa/isa_device.h +++ b/sys/i386/isa/isa_device.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)isa_device.h 7.1 (Berkeley) 5/9/91 - * $Id: isa_device.h,v 1.24 1995/09/10 21:35:10 bde Exp $ + * $Id: isa_device.h,v 1.25 1995/11/05 04:45:16 gibbs Exp $ */ #ifndef _I386_ISA_ISA_DEVICE_H_ @@ -156,11 +156,12 @@ int register_intr __P((int intr, int device_id, u_int flags, int unregister_intr __P((int intr, inthand2_t *handler)); int update_intr_masks __P((void)); -extern int isa_externalize(struct isa_device *, void *, size_t *); -extern int isa_internalize(struct isa_device *, void **, size_t *); +struct sysctl_req; +extern int isa_externalize(struct isa_device *, struct sysctl_req *); +extern int isa_internalize(struct isa_device *, struct sysctl_req *); struct kern_devconf; -extern int isa_generic_externalize(struct proc *, struct kern_devconf *, void *, size_t); +extern int isa_generic_externalize(struct kern_devconf *, struct sysctl_req *); extern struct kern_devconf kdc_isa0; #endif /* KERNEL */ diff --git a/sys/i386/isa/wcd.c b/sys/i386/isa/wcd.c index 72e705e1323..868e3be9db3 100644 --- a/sys/i386/isa/wcd.c +++ b/sys/i386/isa/wcd.c @@ -209,7 +209,7 @@ static int wcd_read_toc (struct wcd *t); static int wcd_request_wait (struct wcd *t, u_char cmd, u_char a1, u_char a2, u_char a3, u_char a4, u_char a5, u_char a6, u_char a7, u_char a8, u_char a9, char *addr, int count); -static int wcd_externalize (struct proc*, struct kern_devconf*, void*, size_t); +static int wcd_externalize (struct kern_devconf*, struct sysctl_req *); static int wcd_goaway (struct kern_devconf *kdc, int force); static void wcd_describe (struct wcd *t); static int wcd_open(dev_t dev, int rawflag); @@ -236,10 +236,9 @@ static void wcd_dump (int lun, char *label, void *data, int len) printf ("\n"); } -static int wcd_externalize (struct proc *p, struct kern_devconf *kdc, - void *userp, size_t len) +static int wcd_externalize (struct kern_devconf *kdc, struct sysctl_req *req) { - return disk_externalize (wcdtab[kdc->kdc_unit]->unit, userp, &len); + return disk_externalize (wcdtab[kdc->kdc_unit]->unit, req); } static int wcd_goaway (struct kern_devconf *kdc, int force) diff --git a/sys/i386/isa/wd.c b/sys/i386/isa/wd.c index 680cfebd704..9416bc774cc 100644 --- a/sys/i386/isa/wd.c +++ b/sys/i386/isa/wd.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)wd.c 7.2 (Berkeley) 5/9/91 - * $Id: wd.c,v 1.89 1995/10/28 15:39:28 phk Exp $ + * $Id: wd.c,v 1.90 1995/10/29 17:34:17 bde Exp $ */ /* TODO: @@ -107,8 +107,7 @@ extern void wdstart(int ctrlr); static int wd_goaway(struct kern_devconf *, int); static int wdc_goaway(struct kern_devconf *, int); -static int wd_externalize(struct proc *, struct kern_devconf *, void *, size_t); -static int wdc_externalize(struct proc *, struct kern_devconf *, void *, size_t); +static int wd_externalize(struct kern_devconf *, struct sysctl_req *); /* * Templates for the kern_devconf structures used when we attach. @@ -274,9 +273,9 @@ static int wdwait(struct disk *du, u_char bits_wanted, int timeout); * Provide hw.devconf information. */ static int -wd_externalize(struct proc *p, struct kern_devconf *kdc, void *userp, size_t len) +wd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return disk_externalize(wddrives[kdc->kdc_unit]->dk_unit, userp, &len); + return disk_externalize(wddrives[kdc->kdc_unit]->dk_unit, req); } struct isa_driver wdcdriver = { diff --git a/sys/isa/fd.c b/sys/isa/fd.c index f8622035de7..4601645463a 100644 --- a/sys/isa/fd.c +++ b/sys/isa/fd.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.69 1995/11/04 17:07:17 bde Exp $ + * $Id: fd.c,v 1.70 1995/11/18 07:48:11 bde Exp $ * */ @@ -89,8 +89,7 @@ static int fd_goaway(struct kern_devconf *, int); static int fdc_goaway(struct kern_devconf *, int); -static int -fd_externalize(struct proc *, struct kern_devconf *, void *, size_t); +static int fd_externalize(struct kern_devconf *, struct sysctl_req *); /* * Templates for the kern_devconf structures used when we attach. @@ -344,17 +343,9 @@ struct isa_device *fdcdevs[NFDC]; * Provide hw.devconf information. */ static int -fd_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t len) +fd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return disk_externalize(fd_data[kdc->kdc_unit].fdsu, userp, &len); -} - -static int -fdc_externalize(struct proc *p, struct kern_devconf *kdc, - void *userp, size_t len) -{ - return isa_externalize(fdcdevs[kdc->kdc_unit], userp, &len); + return disk_externalize(fd_data[kdc->kdc_unit].fdsu, req); } static int diff --git a/sys/kern/kern_devconf.c b/sys/kern/kern_devconf.c index bcdf87e23ad..b7370421b98 100644 --- a/sys/kern/kern_devconf.c +++ b/sys/kern/kern_devconf.c @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: kern_devconf.c,v 1.9 1995/04/13 15:33:14 wollman Exp $ + * $Id: kern_devconf.c,v 1.10 1995/05/30 08:05:23 rgrimes Exp $ */ /* @@ -126,67 +126,49 @@ make_devconf(struct kern_devconf *kdc, struct devconf *dc) dc->dc_descr[(sizeof dc->dc_descr) - 1] = '\0'; } -int -dev_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, - void *newp, size_t newlen, struct proc *p) +static int +sysctl_hw_devconfig SYSCTL_HANDLER_ARGS { + int *name = (int *) arg1; + u_int namelen = arg2; struct kern_devconf *kdc; struct devconf dc; int rv; - size_t len; /* all sysctl names at this level are terminal */ if (namelen != 1) return ENOTDIR; - switch(name[0]) { - case DEVCONF_NUMBER: - return (sysctl_rdint(oldp, oldlenp, newp, dc_lastnum)); + if (name[0] == DEVCONF_NUMBER) + return sysctl_handle_int(oidp, 0, dc_lastnum, req); - default: - for(kdc = dc_list; kdc; kdc = kdc->kdc_next) { - if(kdc->kdc_number == name[0]) - break; - } - - if(!kdc) - return ENXIO; - - if(!oldp) { - *oldlenp = sizeof(struct devconf) - 1; - - *oldlenp += kdc->kdc_datalen; - return 0; - } - - len = *oldlenp; - make_devconf(kdc, &dc); - *oldlenp = (sizeof dc) - 1 + dc.dc_datalen; - - if(len < *oldlenp) { - return ENOMEM; - } - - rv = copyout(&dc, oldp, (sizeof dc) - 1); - if(rv) - return rv; - - if(kdc->kdc_externalize) - rv = kdc->kdc_externalize(p, kdc, - &((struct devconf *)oldp)->dc_data, - len - ((sizeof dc) - 1)); - if(rv) - return rv; - - if(!newp) - return 0; - - if(!kdc->kdc_internalize) - return EOPNOTSUPP; - - rv = kdc->kdc_internalize(p, kdc, - &((struct devconf *)newp)->dc_data, - newlen - ((sizeof dc) - 1)); - return rv; + for(kdc = dc_list; kdc; kdc = kdc->kdc_next) { + if(kdc->kdc_number == name[0]) + break; } + + if(!kdc) + return ENXIO; + + make_devconf(kdc, &dc); + + rv = SYSCTL_OUT(req, &dc, (sizeof dc) -1); + if(rv) + return rv; + + if(kdc->kdc_externalize) + rv = kdc->kdc_externalize(kdc, req); + if(rv) + return rv; + + if(!req->newptr) + return 0; + + if(!kdc->kdc_internalize) + return EOPNOTSUPP; + + rv = kdc->kdc_internalize(kdc, req); + return rv; } + +SYSCTL_NODE(_hw, HW_DEVCONF, devconfig, CTLFLAG_RW, sysctl_hw_devconfig,""); diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 27b55a75dd9..5c3332b545d 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94 - * $Id: kern_sysctl.c,v 1.50 1995/11/14 20:43:29 phk Exp $ + * $Id: kern_sysctl.c,v 1.51 1995/11/16 18:59:49 phk Exp $ */ /* @@ -50,6 +50,17 @@ #include #include +/* + * Locking and stats + */ +static struct sysctl_lock { + int sl_lock; + int sl_want; + int sl_locked; +} memlock; + +static int sysctl_root SYSCTL_HANDLER_ARGS; + extern struct linker_set sysctl_; /* BEGIN_MIB */ @@ -145,6 +156,66 @@ char hostname[MAXHOSTNAMELEN]; SYSCTL_STRING(_kern, KERN_HOSTNAME, hostname, CTLFLAG_RW, hostname, sizeof(hostname), ""); +int securelevel = -1; + +static int +sysctl_kern_securelvl SYSCTL_HANDLER_ARGS +{ + int error, level; + + level = securelevel; + error = sysctl_handle_int(oidp, &level, 0, req); + if (error || !req->newptr) + return (error); + if (level < securelevel && req->p->p_pid != 1) + return (EPERM); + securelevel = level; + return (error); +} + +SYSCTL_PROC(_kern, KERN_SECURELVL, securelevel, CTLTYPE_INT|CTLFLAG_RW, + 0, 0, sysctl_kern_securelvl, ""); + +static int +sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS +{ + int error; + dev_t ndumpdev; + + ndumpdev = dumpdev; + error = sysctl_handle_opaque(oidp, &ndumpdev, sizeof ndumpdev, req); + if (!error && ndumpdev != dumpdev) { + error = setdumpdev(ndumpdev); + } + return (error); +} + +SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, + 0, sizeof dumpdev, sysctl_kern_dumpdev, ""); + +static int +sysctl_hw_physmem SYSCTL_HANDLER_ARGS +{ + int error = sysctl_handle_int(oidp, 0, ctob(physmem), req); + return (error); +} + +SYSCTL_PROC(_hw, HW_PHYSMEM, physmem, CTLTYPE_INT|CTLFLAG_RD, + 0, 0, sysctl_hw_physmem, ""); + +static int +sysctl_hw_usermem SYSCTL_HANDLER_ARGS +{ + int error = sysctl_handle_int(oidp, 0, + ctob(physmem - cnt.v_wire_count), req); + return (error); +} + +SYSCTL_PROC(_hw, HW_USERMEM, usermem, CTLTYPE_INT|CTLFLAG_RD, + 0, 0, sysctl_hw_usermem, ""); + +/* END_MIB */ + static int sysctl_order_cmp(const void *a, const void *b) { @@ -370,6 +441,10 @@ sysctl_old_user(struct sysctl_req *req, void *p, int l) { int error = 0, i = 0; + if (req->lock == 1 && req->oldptr) { + vslock(req->oldptr, req->oldlen); + req->lock = 2; + } if (req->oldptr) { i = min(req->oldlen - req->oldidx, l); if (i > 0) @@ -397,24 +472,11 @@ sysctl_new_user(struct sysctl_req *req, void *p, int l) return (error); } -/* - * Locking and stats - */ -static struct sysctl_lock { - int sl_lock; - int sl_want; - int sl_locked; -} memlock; - - - /* * Traverse our tree, and find the right node, execute whatever it points * at, and return the resulting error code. - * We work entirely in kernel-space at this time. */ - int sysctl_root SYSCTL_HANDLER_ARGS { @@ -431,6 +493,8 @@ sysctl_root SYSCTL_HANDLER_ARGS while (j-- && indx < CTL_MAXNAME) { if (*oidpp && ((*oidpp)->oid_number == name[indx])) { indx++; + if ((*oidpp)->oid_kind & CTLFLAG_NOLOCK) + req->lock = 0; if (((*oidpp)->oid_kind & CTLTYPE) == CTLTYPE_NODE) { if ((*oidpp)->oid_handler) goto found; @@ -482,10 +546,7 @@ struct sysctl_args { #endif int -__sysctl(p, uap, retval) - struct proc *p; - register struct sysctl_args *uap; - int *retval; +__sysctl(struct proc *p, struct sysctl_args *uap, int *retval) { int error, i, j, name[CTL_MAXNAME]; @@ -509,8 +570,6 @@ __sysctl(p, uap, retval) return (error); } -static sysctlfn kern_sysctl; - /* * This is used from various compatibility syscalls too. That's why name * must be in kernel space. @@ -518,9 +577,7 @@ static sysctlfn kern_sysctl; int userland_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *oldlenp, int inkernel, void *new, size_t newlen, int *retval) { - int error = 0, dolock = 1, oldlen = 0; - u_int savelen = 0; - sysctlfn *fn; + int error = 0; struct sysctl_req req; bzero(&req, sizeof req); @@ -555,15 +612,30 @@ userland_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *old req.oldfunc = sysctl_old_user; req.newfunc = sysctl_new_user; + req.lock = 1; + + /* XXX this should probably be done in a general way */ + while (memlock.sl_lock) { + memlock.sl_want = 1; + (void) tsleep((caddr_t)&memlock, PRIBIO+1, "sysctl", 0); + memlock.sl_locked++; + } + memlock.sl_lock = 1; error = sysctl_root(0, name, namelen, &req); -/* + if (req.lock == 2) + vsunlock(req.oldptr, req.oldlen, B_WRITE); + + memlock.sl_lock = 0; + + if (memlock.sl_want) { + memlock.sl_want = 0; + wakeup((caddr_t)&memlock); + } + if (error && error != ENOMEM) return (error); -*/ - if (error == ENOENT) - goto oldstuff; if (retval) { if (req.oldptr && req.oldidx > req.oldlen) @@ -572,334 +644,6 @@ userland_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *old *retval = req.oldidx; } return (error); - -oldstuff: - oldlen = req.oldlen; - - switch (name[0]) { - case CTL_KERN: - fn = kern_sysctl; - if (name[1] != KERN_VNODE) /* XXX */ - dolock = 0; - break; - case CTL_HW: - fn = hw_sysctl; - break; - case CTL_FS: - fn = fs_sysctl; - break; - default: - return (EOPNOTSUPP); - } - if (old != NULL) { - if (!useracc(old, oldlen, B_WRITE)) - return (EFAULT); - while (memlock.sl_lock) { - memlock.sl_want = 1; - (void) tsleep((caddr_t)&memlock, PRIBIO+1, "sysctl", 0); - memlock.sl_locked++; - } - memlock.sl_lock = 1; - if (dolock) - vslock(old, oldlen); - savelen = oldlen; - } - - - error = (*fn)(name + 1, namelen - 1, old, &oldlen, - new, newlen, p); - - - if (old != NULL) { - if (dolock) - vsunlock(old, savelen, B_WRITE); - memlock.sl_lock = 0; - if (memlock.sl_want) { - memlock.sl_want = 0; - wakeup((caddr_t)&memlock); - } - } -#if 0 - if (error) { - printf("SYSCTL_ERROR: "); - for(i=0;inewptr) - return (error); - if (level < securelevel && req->p->p_pid != 1) - return (EPERM); - securelevel = level; - return (error); -} - -SYSCTL_PROC(_kern, KERN_SECURELVL, securelevel, CTLTYPE_INT|CTLFLAG_RW, - 0, 0, sysctl_kern_securelvl, ""); - -static int -sysctl_kern_dumpdev SYSCTL_HANDLER_ARGS -{ - int error; - dev_t ndumpdev; - - ndumpdev = dumpdev; - error = sysctl_handle_opaque(oidp, &ndumpdev, sizeof ndumpdev, req); - if (!error && ndumpdev != dumpdev) { - error = setdumpdev(ndumpdev); - } - return (error); -} - -SYSCTL_PROC(_kern, KERN_DUMPDEV, dumpdev, CTLTYPE_OPAQUE|CTLFLAG_RW, - 0, sizeof dumpdev, sysctl_kern_dumpdev, ""); -/* - * hardware related system variables. - */ -int -hw_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) - int *name; - u_int namelen; - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; - struct proc *p; -{ - /* almost all sysctl names at this level are terminal */ - if (namelen != 1 && name[0] != HW_DEVCONF) - return (ENOTDIR); /* overloaded */ - - switch (name[0]) { - case HW_PHYSMEM: - return (sysctl_rdint(oldp, oldlenp, newp, ctob(physmem))); - case HW_USERMEM: - return (sysctl_rdint(oldp, oldlenp, newp, - ctob(physmem - cnt.v_wire_count))); - case HW_DEVCONF: - return (dev_sysctl(name + 1, namelen - 1, oldp, oldlenp, - newp, newlen, p)); - default: - return (EOPNOTSUPP); - } - /* NOTREACHED */ -} - -/* - * Validate parameters and get old / set new parameters - * for an integer-valued sysctl function. - */ -int -sysctl_int(oldp, oldlenp, newp, newlen, valp) - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; - int *valp; -{ - int error = 0; - - if (oldp && *oldlenp < sizeof(int)) - return (ENOMEM); - if (newp && newlen != sizeof(int)) - return (EINVAL); - *oldlenp = sizeof(int); - if (oldp) - error = copyout(valp, oldp, sizeof(int)); - if (error == 0 && newp) - error = copyin(newp, valp, sizeof(int)); - return (error); -} - -/* - * As above, but read-only. - */ -int -sysctl_rdint(oldp, oldlenp, newp, val) - void *oldp; - size_t *oldlenp; - void *newp; - int val; -{ - int error = 0; - - if (oldp && *oldlenp < sizeof(int)) - return (ENOMEM); - if (newp) - return (EPERM); - *oldlenp = sizeof(int); - if (oldp) - error = copyout((caddr_t)&val, oldp, sizeof(int)); - return (error); -} - -/* - * Validate parameters and get old / set new parameters - * for a string-valued sysctl function. - */ -int -sysctl_string(oldp, oldlenp, newp, newlen, str, maxlen) - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; - char *str; - int maxlen; -{ - int len, error = 0, rval = 0; - - len = strlen(str) + 1; - if (oldp && *oldlenp < len) { - len = *oldlenp; - rval = ENOMEM; - } - if (newp && newlen >= maxlen) - return (EINVAL); - if (oldp) { - *oldlenp = len; - error = copyout(str, oldp, len); - if (error) - rval = error; - } - if ((error == 0 || error == ENOMEM) && newp) { - error = copyin(newp, str, newlen); - if (error) - rval = error; - str[newlen] = 0; - } - return (rval); -} - -/* - * As above, but read-only. - */ -int -sysctl_rdstring(oldp, oldlenp, newp, str) - void *oldp; - size_t *oldlenp; - void *newp; - char *str; -{ - int len, error = 0, rval = 0; - - len = strlen(str) + 1; - if (oldp && *oldlenp < len) { - len = *oldlenp; - rval = ENOMEM; - } - if (newp) - return (EPERM); - *oldlenp = len; - if (oldp) - error = copyout(str, oldp, len); - if (error) - rval = error; - return (rval); -} - -/* - * Validate parameters and get old / set new parameters - * for a structure oriented sysctl function. - */ -int -sysctl_struct(oldp, oldlenp, newp, newlen, sp, len) - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; - void *sp; - int len; -{ - int error = 0; - - if (oldp && *oldlenp < len) - return (ENOMEM); - if (newp && newlen > len) - return (EINVAL); - if (oldp) { - *oldlenp = len; - error = copyout(sp, oldp, len); - } - if (error == 0 && newp) - error = copyin(newp, sp, len); - return (error); -} - -/* - * Validate parameters and get old parameters - * for a structure oriented sysctl function. - */ -int -sysctl_rdstruct(oldp, oldlenp, newp, sp, len) - void *oldp; - size_t *oldlenp; - void *newp, *sp; - int len; -{ - int error = 0; - - if (oldp && *oldlenp < len) - return (ENOMEM); - if (newp) - return (EPERM); - *oldlenp = len; - if (oldp) - error = copyout(sp, oldp, len); - return (error); } #ifdef COMPAT_43 @@ -969,10 +713,7 @@ struct getkerninfo_args { #endif int -ogetkerninfo(p, uap, retval) - struct proc *p; - register struct getkerninfo_args *uap; - int *retval; +ogetkerninfo(struct proc *p, struct getkerninfo_args *uap, int *retval) { int error, name[6]; u_int size; @@ -987,14 +728,14 @@ ogetkerninfo(p, uap, retval) name[4] = uap->op & 0xff; name[5] = uap->arg; error = userland_sysctl(p, name, 6, uap->where, uap->size, - 0, 0, 0, 0); + 0, 0, 0, &size); break; case KINFO_VNODE: name[0] = CTL_KERN; name[1] = KERN_VNODE; error = userland_sysctl(p, name, 2, uap->where, uap->size, - 0, 0, 0, 0); + 0, 0, 0, &size); break; case KINFO_PROC: @@ -1003,35 +744,35 @@ ogetkerninfo(p, uap, retval) name[2] = uap->op & 0xff; name[3] = uap->arg; error = userland_sysctl(p, name, 4, uap->where, uap->size, - 0, 0, 0, 0); + 0, 0, 0, &size); break; case KINFO_FILE: name[0] = CTL_KERN; name[1] = KERN_FILE; error = userland_sysctl(p, name, 2, uap->where, uap->size, - 0, 0, 0, 0); + 0, 0, 0, &size); break; case KINFO_METER: name[0] = CTL_VM; name[1] = VM_METER; error = userland_sysctl(p, name, 2, uap->where, uap->size, - 0, 0, 0, 0); + 0, 0, 0, &size); break; case KINFO_LOADAVG: name[0] = CTL_VM; name[1] = VM_LOADAVG; error = userland_sysctl(p, name, 2, uap->where, uap->size, - 0, 0, 0, 0); + 0, 0, 0, &size); break; case KINFO_CLOCKRATE: name[0] = CTL_KERN; name[1] = KERN_CLOCKRATE; error = userland_sysctl(p, name, 2, uap->where, uap->size, - 0, 0, 0, 0); + 0, 0, 0, &size); break; case KINFO_BSDI_SYSINFO: { diff --git a/sys/kern/subr_prof.c b/sys/kern/subr_prof.c index e0eabbd7f55..4b395aa1af7 100644 --- a/sys/kern/subr_prof.c +++ b/sys/kern/subr_prof.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)subr_prof.c 8.3 (Berkeley) 9/23/93 - * $Id: subr_prof.c,v 1.9 1995/09/09 18:10:05 davidg Exp $ + * $Id: subr_prof.c,v 1.10 1995/11/12 06:43:04 bde Exp $ */ #include @@ -98,15 +98,11 @@ kmstartup(udata) /* * Return kernel profiling information. */ -int -sysctl_doprof(name, namelen, oldp, oldlenp, newp, newlen) - int *name; - u_int namelen; - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; +static int +sysctl_kern_prof SYSCTL_HANDLER_ARGS { + int *name = (int *) arg1; + u_int namelen = arg2; struct gmonparam *gp = &_gmonparam; int error; @@ -116,7 +112,7 @@ sysctl_doprof(name, namelen, oldp, oldlenp, newp, newlen) switch (name[0]) { case GPROF_STATE: - error = sysctl_int(oldp, oldlenp, newp, newlen, &gp->state); + error = sysctl_handle_int(oidp, &gp->state, 0, req); if (error) return (error); if (gp->state == GMON_PROF_OFF) @@ -125,21 +121,23 @@ sysctl_doprof(name, namelen, oldp, oldlenp, newp, newlen) startprofclock(&proc0); return (0); case GPROF_COUNT: - return (sysctl_struct(oldp, oldlenp, newp, newlen, - gp->kcount, gp->kcountsize)); + return (sysctl_handle_opaque(oidp, + gp->kcount, gp->kcountsize, req)); case GPROF_FROMS: - return (sysctl_struct(oldp, oldlenp, newp, newlen, - gp->froms, gp->fromssize)); + return (sysctl_handle_opaque(oidp, + gp->froms, gp->fromssize, req)); case GPROF_TOS: - return (sysctl_struct(oldp, oldlenp, newp, newlen, - gp->tos, gp->tossize)); + return (sysctl_handle_opaque(oidp, + gp->tos, gp->tossize, req)); case GPROF_GMONPARAM: - return (sysctl_rdstruct(oldp, oldlenp, newp, gp, sizeof *gp)); + return (sysctl_handle_opaque(oidp, gp, sizeof *gp, req)); default: return (EOPNOTSUPP); } /* NOTREACHED */ } + +SYSCTL_NODE(_kern, KERN_PROF, prof, CTLFLAG_RW, sysctl_kern_prof, ""); #endif /* GPROF */ /* diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c index 9c4490d70b3..e9f167841b1 100644 --- a/sys/kern/vfs_export.c +++ b/sys/kern/vfs_export.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_subr.c 8.13 (Berkeley) 4/18/94 - * $Id: vfs_subr.c,v 1.41 1995/11/14 09:19:12 phk Exp $ + * $Id: vfs_subr.c,v 1.42 1995/11/16 09:45:23 bde Exp $ */ /* @@ -175,8 +175,7 @@ vfs_unbusy(mp) } void -vfs_unmountroot(rootfs) - struct mount *rootfs; +vfs_unmountroot(struct mount *rootfs) { struct mount *mp = rootfs; int error; @@ -953,9 +952,7 @@ loop: * Disassociate the underlying file system from a vnode. */ void -vclean(vp, flags) - register struct vnode *vp; - int flags; +vclean(struct vnode *vp, int flags) { int active; @@ -1247,7 +1244,7 @@ vprint(label, vp) * Called when debugging the kernel. */ void -printlockedvnodes() +printlockedvnodes(void) { register struct mount *mp; register struct vnode *vp; @@ -1273,30 +1270,25 @@ int kinfo_vgetfailed; * Copyout address of vnode followed by vnode. */ /* ARGSUSED */ -int -sysctl_vnode(where, sizep) - char *where; - size_t *sizep; +static int +sysctl_vnode SYSCTL_HANDLER_ARGS { register struct mount *mp, *nmp; struct vnode *vp; - register char *bp = where, *savebp; - char *ewhere; int error; #define VPTRSZ sizeof (struct vnode *) #define VNODESZ sizeof (struct vnode) - if (where == NULL) { - *sizep = (numvnodes + KINFO_VNODESLOP) * (VPTRSZ + VNODESZ); - return (0); - } - ewhere = where + *sizep; + + req->lock = 0; + if (req->oldptr) /* Make an estimate */ + return (SYSCTL_OUT(req, 0, + (numvnodes + KINFO_VNODESLOP) * (VPTRSZ + VNODESZ))); for (mp = mountlist.cqh_first; mp != (void *)&mountlist; mp = nmp) { nmp = mp->mnt_list.cqe_next; if (vfs_busy(mp)) continue; - savebp = bp; again: for (vp = mp->mnt_vnodelist.lh_first; vp != NULL; @@ -1309,29 +1301,24 @@ again: if (vp->v_mount != mp) { if (kinfo_vdebug) printf("kinfo: vp changed\n"); - bp = savebp; goto again; } - if (bp + VPTRSZ + VNODESZ > ewhere) { + if ((error = SYSCTL_OUT(req, &vp, VPTRSZ)) || + (error = SYSCTL_OUT(req, vp, VNODESZ))) { vfs_unbusy(mp); - *sizep = bp - where; - return (ENOMEM); - } - if ((error = copyout(&vp, bp, VPTRSZ)) || - (error = copyout(vp, bp + VPTRSZ, VNODESZ))) { - vfs_unbusy(mp); - *sizep = bp - where; return (error); } - bp += VPTRSZ + VNODESZ; } vfs_unbusy(mp); } - *sizep = bp - where; return (0); } +SYSCTL_NODE(_kern, KERN_VNODE, vnode, CTLTYPE_OPAQUE|CTLFLAG_RD, + sysctl_vnode, ""); + + /* * Check to see if a filesystem is mounted on a block device. */ @@ -1360,10 +1347,8 @@ vfs_mountedon(vp) * Called by ufs_mount() to set up the lists of export addresses. */ static int -vfs_hang_addrlist(mp, nep, argp) - struct mount *mp; - struct netexport *nep; - struct export_args *argp; +vfs_hang_addrlist(struct mount *mp, struct netexport *nep, + struct export_args *argp) { register struct netcred *np; register struct radix_node_head *rnh; @@ -1433,9 +1418,7 @@ out: /* ARGSUSED */ static int -vfs_free_netcred(rn, w) - struct radix_node *rn; - void *w; +vfs_free_netcred(struct radix_node *rn, void *w) { register struct radix_node_head *rnh = (struct radix_node_head *) w; @@ -1448,8 +1431,7 @@ vfs_free_netcred(rn, w) * Free the net address hash lists that are hanging off the mount points. */ static void -vfs_free_addrlist(nep) - struct netexport *nep; +vfs_free_addrlist(struct netexport *nep) { register int i; register struct radix_node_head *rnh; diff --git a/sys/kern/vfs_init.c b/sys/kern/vfs_init.c index 5c98182eed8..efbb5e473f5 100644 --- a/sys/kern/vfs_init.c +++ b/sys/kern/vfs_init.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_init.c 8.3 (Berkeley) 1/4/94 - * $Id: vfs_init.c,v 1.12 1995/09/09 18:10:16 davidg Exp $ + * $Id: vfs_init.c,v 1.13 1995/11/09 08:13:51 bde Exp $ */ @@ -287,66 +287,26 @@ vfsinit(udata) /* * kernel related system variables. */ -int -fs_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) - int *name; - u_int namelen; - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; - struct proc *p; + +static int +sysctl_fs_vfsconf SYSCTL_HANDLER_ARGS { - int i; - int error; - int buflen = *oldlenp; - caddr_t where = oldp, start = oldp; + int i, error; - switch (name[0]) { - case FS_VFSCONF: - if (namelen != 1) return ENOTDIR; - - if (oldp == NULL) { - *oldlenp = (MOUNT_MAXTYPE+1) * sizeof(struct vfsconf); - return 0; - } - if (newp) { - return EINVAL; - } - - for(i = 0; i < MOUNT_MAXTYPE + 1; i++) { - if(buflen < sizeof *vfsconf[i]) { - *oldlenp = where - start; - return ENOMEM; - } - - error = copyout(vfsconf[i], where, sizeof *vfsconf[i]); - if(error) - return error; - where += sizeof *vfsconf[i]; - buflen -= sizeof *vfsconf[i]; - } - *oldlenp = where - start; - return 0; - - default: - if(namelen < 1) return EINVAL; - - i = name[0]; - - if(i <= MOUNT_MAXTYPE - && vfssw[i] - && vfssw[i]->vfs_sysctl) { - return vfssw[i]->vfs_sysctl(name + 1, namelen - 1, - oldp, oldlenp, - newp, newlen, p); - } - - return (EOPNOTSUPP); + if (req->newptr) + return EINVAL; + for(i = 0; i < MOUNT_MAXTYPE + 1; i++) { + error = SYSCTL_OUT(req, vfsconf[i], sizeof *vfsconf[i]); + if(error) + return error; } - /* NOTREACHED */ + return (error); + } +SYSCTL_PROC(_fs, FS_VFSCONF, vfsconf, CTLTYPE_OPAQUE|CTLFLAG_RD, + 0, 0, sysctl_fs_vfsconf, ""); + /* * This goop is here to support a loadable NFS module... grumble... */ diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index 9c4490d70b3..e9f167841b1 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_subr.c 8.13 (Berkeley) 4/18/94 - * $Id: vfs_subr.c,v 1.41 1995/11/14 09:19:12 phk Exp $ + * $Id: vfs_subr.c,v 1.42 1995/11/16 09:45:23 bde Exp $ */ /* @@ -175,8 +175,7 @@ vfs_unbusy(mp) } void -vfs_unmountroot(rootfs) - struct mount *rootfs; +vfs_unmountroot(struct mount *rootfs) { struct mount *mp = rootfs; int error; @@ -953,9 +952,7 @@ loop: * Disassociate the underlying file system from a vnode. */ void -vclean(vp, flags) - register struct vnode *vp; - int flags; +vclean(struct vnode *vp, int flags) { int active; @@ -1247,7 +1244,7 @@ vprint(label, vp) * Called when debugging the kernel. */ void -printlockedvnodes() +printlockedvnodes(void) { register struct mount *mp; register struct vnode *vp; @@ -1273,30 +1270,25 @@ int kinfo_vgetfailed; * Copyout address of vnode followed by vnode. */ /* ARGSUSED */ -int -sysctl_vnode(where, sizep) - char *where; - size_t *sizep; +static int +sysctl_vnode SYSCTL_HANDLER_ARGS { register struct mount *mp, *nmp; struct vnode *vp; - register char *bp = where, *savebp; - char *ewhere; int error; #define VPTRSZ sizeof (struct vnode *) #define VNODESZ sizeof (struct vnode) - if (where == NULL) { - *sizep = (numvnodes + KINFO_VNODESLOP) * (VPTRSZ + VNODESZ); - return (0); - } - ewhere = where + *sizep; + + req->lock = 0; + if (req->oldptr) /* Make an estimate */ + return (SYSCTL_OUT(req, 0, + (numvnodes + KINFO_VNODESLOP) * (VPTRSZ + VNODESZ))); for (mp = mountlist.cqh_first; mp != (void *)&mountlist; mp = nmp) { nmp = mp->mnt_list.cqe_next; if (vfs_busy(mp)) continue; - savebp = bp; again: for (vp = mp->mnt_vnodelist.lh_first; vp != NULL; @@ -1309,29 +1301,24 @@ again: if (vp->v_mount != mp) { if (kinfo_vdebug) printf("kinfo: vp changed\n"); - bp = savebp; goto again; } - if (bp + VPTRSZ + VNODESZ > ewhere) { + if ((error = SYSCTL_OUT(req, &vp, VPTRSZ)) || + (error = SYSCTL_OUT(req, vp, VNODESZ))) { vfs_unbusy(mp); - *sizep = bp - where; - return (ENOMEM); - } - if ((error = copyout(&vp, bp, VPTRSZ)) || - (error = copyout(vp, bp + VPTRSZ, VNODESZ))) { - vfs_unbusy(mp); - *sizep = bp - where; return (error); } - bp += VPTRSZ + VNODESZ; } vfs_unbusy(mp); } - *sizep = bp - where; return (0); } +SYSCTL_NODE(_kern, KERN_VNODE, vnode, CTLTYPE_OPAQUE|CTLFLAG_RD, + sysctl_vnode, ""); + + /* * Check to see if a filesystem is mounted on a block device. */ @@ -1360,10 +1347,8 @@ vfs_mountedon(vp) * Called by ufs_mount() to set up the lists of export addresses. */ static int -vfs_hang_addrlist(mp, nep, argp) - struct mount *mp; - struct netexport *nep; - struct export_args *argp; +vfs_hang_addrlist(struct mount *mp, struct netexport *nep, + struct export_args *argp) { register struct netcred *np; register struct radix_node_head *rnh; @@ -1433,9 +1418,7 @@ out: /* ARGSUSED */ static int -vfs_free_netcred(rn, w) - struct radix_node *rn; - void *w; +vfs_free_netcred(struct radix_node *rn, void *w) { register struct radix_node_head *rnh = (struct radix_node_head *) w; @@ -1448,8 +1431,7 @@ vfs_free_netcred(rn, w) * Free the net address hash lists that are hanging off the mount points. */ static void -vfs_free_addrlist(nep) - struct netexport *nep; +vfs_free_addrlist(struct netexport *nep) { register int i; register struct radix_node_head *rnh; diff --git a/sys/pci/pci.c b/sys/pci/pci.c index 50337e5c41e..a14c96f6e93 100644 --- a/sys/pci/pci.c +++ b/sys/pci/pci.c @@ -1,6 +1,6 @@ /************************************************************************** ** -** $Id: pci.c,v 1.31 1995/09/14 23:24:29 se Exp $ +** $Id: pci.c,v 1.32 1995/10/02 13:43:11 davidg Exp $ ** ** General subroutines for the PCI bus. ** pci_configure () @@ -51,6 +51,7 @@ #include #include #include +#include #include /* declaration of wakeup(), used by vm.h */ #include @@ -109,11 +110,9 @@ struct pcicb { u_long pcicb_p_memlimit; }; -static int -pci_externalize (struct proc *, struct kern_devconf *, void *, size_t); +static int pci_externalize (struct kern_devconf *, struct sysctl_req *); -static int -pci_internalize (struct proc *, struct kern_devconf *, void *, size_t); +static int pci_internalize (struct kern_devconf *, struct sysctl_req *); static void not_supported (pcici_t tag, u_long type); @@ -1091,17 +1090,13 @@ int pci_map_mem (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa) */ static int -pci_externalize (struct proc *p, struct kern_devconf *kdcp, void *u, size_t l) +pci_externalize (struct kern_devconf *kdcp, struct sysctl_req *req) { struct pci_externalize_buffer buffer; struct pci_info * pip = kdcp->kdc_parentdata; pcici_t tag; int i; - if (l < sizeof buffer) { - return ENOMEM; - }; - tag = pcibus->pb_tag (pip->pi_bus, pip->pi_device, 0); buffer.peb_pci_info = *pip; @@ -1110,12 +1105,12 @@ pci_externalize (struct proc *p, struct kern_devconf *kdcp, void *u, size_t l) buffer.peb_config[i] = pcibus->pb_read (tag, i*4); }; - return copyout(&buffer, u, sizeof buffer); + return SYSCTL_OUT(req, &buffer, sizeof buffer); } static int -pci_internalize (struct proc *p, struct kern_devconf *kdcp, void *u, size_t s) +pci_internalize (struct kern_devconf *kdcp, struct sysctl_req *re) { return EOPNOTSUPP; } diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c index c3fb6ffaebe..f4f31d9f9b8 100644 --- a/sys/scsi/cd.c +++ b/sys/scsi/cd.c @@ -14,7 +14,7 @@ * * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 * - * $Id: cd.c,v 1.43 1995/11/15 03:27:14 asami Exp $ + * $Id: cd.c,v 1.44 1995/11/19 22:22:18 dyson Exp $ */ #define SPLCD splbio @@ -128,11 +128,9 @@ static struct scsi_device cd_switch = #define CD_EJECT -2 static int -cd_externalize(struct proc *p, struct kern_devconf *kdc, void *userp, - size_t len) +cd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return scsi_externalize(SCSI_LINK(&cd_switch, kdc->kdc_unit), - userp, &len); + return scsi_externalize(SCSI_LINK(&cd_switch, kdc->kdc_unit), req); } static struct kern_devconf kdc_cd_template = { diff --git a/sys/scsi/ch.c b/sys/scsi/ch.c index a7c36d9efa5..12045d96123 100644 --- a/sys/scsi/ch.c +++ b/sys/scsi/ch.c @@ -2,7 +2,7 @@ * Written by grefen@????? * Based on scsi drivers by Julian Elischer (julian@tfs.com) * - * $Id: ch.c,v 1.20 1995/05/11 19:26:46 rgrimes Exp $ + * $Id: ch.c,v 1.21 1995/05/30 08:13:22 rgrimes Exp $ */ #include @@ -95,11 +95,9 @@ struct scsi_device ch_switch = #define CH_OPEN 0x01 static int -ch_externalize(struct proc *p, struct kern_devconf *kdc, void *userp, - size_t len) +ch_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return scsi_externalize(SCSI_LINK(&ch_switch, kdc->kdc_unit), - userp, &len); + return scsi_externalize(SCSI_LINK(&ch_switch, kdc->kdc_unit), req); } static struct kern_devconf kdc_ch_template = { diff --git a/sys/scsi/od.c b/sys/scsi/od.c index e17bfbf9403..60a8836ddcf 100644 --- a/sys/scsi/od.c +++ b/sys/scsi/od.c @@ -28,7 +28,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: od.c,v 1.1 1995/10/31 17:25:58 joerg Exp $ + * $Id: od.c,v 1.2 1995/11/19 22:22:21 dyson Exp $ */ /* @@ -136,11 +136,9 @@ struct scsi_device od_switch = static struct scsi_xfer sx; static int -od_externalize(struct proc *p, struct kern_devconf *kdc, void *userp, - size_t len) +od_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return scsi_externalize(SCSI_LINK(&od_switch, kdc->kdc_unit), - userp, &len); + return scsi_externalize(SCSI_LINK(&od_switch, kdc->kdc_unit), req); } static struct kern_devconf kdc_od_template = { diff --git a/sys/scsi/scsiconf.c b/sys/scsi/scsiconf.c index c364eab760f..2c510aa1cd3 100644 --- a/sys/scsi/scsiconf.c +++ b/sys/scsi/scsiconf.c @@ -16,7 +16,7 @@ * * New configuration setup: dufault@hda.com * - * $Id: scsiconf.c,v 1.35 1995/10/09 15:14:59 joerg Exp $ + * $Id: scsiconf.c,v 1.36 1995/10/31 17:21:00 joerg Exp $ */ #include @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -62,7 +63,6 @@ struct extend_array void **ps; }; -static errval scsi_attach_sctarg __P((void)); static void * extend_alloc(size_t s) @@ -602,7 +602,8 @@ scsi_bus_conf(sc_link_proto) "Scbus will be assigned dynamically.\n", sc_link_proto->adapter->name, sc_link_proto->adapter_unit, - sc_link_proto->adapter_bus); + sc_link_proto->adapter_bus, + sc_link_proto->adapter_bus ); break; } } @@ -683,6 +684,10 @@ scsi_configure_start(void) scsi_init(); } +#if NSCTARG > 0 +static errval scsi_attach_sctarg __P((void)); +#endif + void scsi_configure_finish(void) { @@ -1421,12 +1426,7 @@ scsi_selectdev(qualifier, type, remov, manu, model, rev) } int -scsi_externalize(struct scsi_link *sl, void *userp, size_t *lenp) +scsi_externalize(struct scsi_link *sl, struct sysctl_req *req) { - if(*lenp < sizeof *sl) - return ENOMEM; - - *lenp -= sizeof *sl; - - return copyout(sl, userp, sizeof *sl); + return SYSCTL_OUT(req, sl, sizeof *sl); } diff --git a/sys/scsi/scsiconf.h b/sys/scsi/scsiconf.h index 74e59c1cf45..a88c80ba268 100644 --- a/sys/scsi/scsiconf.h +++ b/sys/scsi/scsiconf.h @@ -14,7 +14,7 @@ * * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 * - * $Id: scsiconf.h,v 1.28 1995/08/23 23:03:34 gibbs Exp $ + * $Id: scsiconf.h,v 1.29 1995/10/21 23:13:07 phk Exp $ */ #ifndef SCSI_SCSICONF_H #define SCSI_SCSICONF_H 1 @@ -465,7 +465,7 @@ void sc_print_addr __P((struct scsi_link *)); void sc_print_start __P((struct scsi_link *)); void sc_print_finish __P((void)); -extern int scsi_externalize __P((struct scsi_link *, void *, size_t *)); +extern int scsi_externalize __P((struct scsi_link *, struct sysctl_req *)); void scsi_device_register __P((struct scsi_device *sd)); diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c index d8994aa12c6..501aff5105d 100644 --- a/sys/scsi/sd.c +++ b/sys/scsi/sd.c @@ -14,7 +14,7 @@ * * Ported to run under 386BSD by Julian Elischer (julian@dialix.oz.au) Sept 1992 * - * $Id: sd.c,v 1.70 1995/11/19 22:22:28 dyson Exp $ + * $Id: sd.c,v 1.71 1995/11/20 02:12:34 davidg Exp $ */ #define SPLSD splbio @@ -113,11 +113,9 @@ static struct scsi_device sd_switch = static struct scsi_xfer sx; static int -sd_externalize(struct proc *p, struct kern_devconf *kdc, void *userp, - size_t len) +sd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return scsi_externalize(SCSI_LINK(&sd_switch, kdc->kdc_unit), - userp, &len); + return scsi_externalize(SCSI_LINK(&sd_switch, kdc->kdc_unit), req); } static struct kern_devconf kdc_sd_template = { diff --git a/sys/scsi/st.c b/sys/scsi/st.c index a4cbdb68cc8..c872545b3ba 100644 --- a/sys/scsi/st.c +++ b/sys/scsi/st.c @@ -12,7 +12,7 @@ * on the understanding that TFS is not responsible for the correct * functioning of this software in any circumstances. * - * $Id: st.c,v 1.42 1995/11/04 13:25:23 bde Exp $ + * $Id: st.c,v 1.43 1995/11/19 22:22:32 dyson Exp $ */ /* @@ -285,11 +285,9 @@ static struct scsi_device st_switch = ST_FM_WRITTEN | ST_2FM_AT_EOD | ST_PER_ACTION) static int -st_externalize(struct proc *p, struct kern_devconf *kdc, void *userp, - size_t len) +st_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - return scsi_externalize(SCSI_LINK(&st_switch, kdc->kdc_unit), - userp, &len); + return scsi_externalize(SCSI_LINK(&st_switch, kdc->kdc_unit), req); } static struct kern_devconf kdc_st_template = { diff --git a/sys/sys/devconf.h b/sys/sys/devconf.h index d468c33223a..76e309d4c75 100644 --- a/sys/sys/devconf.h +++ b/sys/sys/devconf.h @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: devconf.h,v 1.5 1995/04/12 20:47:13 wollman Exp $ + * $Id: devconf.h,v 1.6 1995/04/13 20:37:51 wollman Exp $ */ /* @@ -99,14 +99,13 @@ struct kern_devconf; /* forward declaration */ * EXTERNALIZE: convert internal representation to external and copy out * into user space. */ -typedef int (*kdc_externalize_t)(struct proc *, struct kern_devconf *, void *, - size_t); +struct sysctl_req; +typedef int (*kdc_externalize_t)(struct kern_devconf *, struct sysctl_req *); /* * INTERNALIZE: copy in from user space, convert to internal representation, * validate, and set configuration. */ -typedef int (*kdc_internalize_t)(struct proc *, struct kern_devconf *, void *, - size_t); +typedef int (*kdc_internalize_t)(struct kern_devconf *, struct sysctl_req *); /* * GOAWAY: shut the device down, if possible, and prepare to exit. */ diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 170a68e44f5..bdb2606dabb 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)sysctl.h 8.1 (Berkeley) 6/2/93 - * $Id: sysctl.h,v 1.33 1995/11/14 09:42:10 phk Exp $ + * $Id: sysctl.h,v 1.34 1995/11/16 19:00:27 phk Exp $ */ #ifndef _SYS_SYSCTL_H_ @@ -86,6 +86,7 @@ struct ctlname { */ struct sysctl_req { struct proc *p; + int lock; void *oldptr; int oldlen; int oldidx; @@ -362,33 +363,11 @@ extern char ostype[]; int userland_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *oldlenp, int inkernel, void *new, size_t newlen, int *retval); /* - * Internal sysctl function calling convention: - * - * (*sysctlfn)(name, namelen, oldval, oldlenp, newval, newlen, p); - * - * The name parameter points at the next component of the name to be - * interpreted. The namelen parameter is the number of integers in - * the name. - */ -typedef int (sysctlfn) - __P((int *, u_int, void *, size_t *, void *, size_t, struct proc *)); - -sysctlfn dev_sysctl; -sysctlfn fs_sysctl; -sysctlfn hw_sysctl; - -int sysctl_int __P((void *, size_t *, void *, size_t, int *)); -int sysctl_rdint __P((void *, size_t *, void *, int)); -int sysctl_string __P((void *, size_t *, void *, size_t, char *, int)); -int sysctl_rdstring __P((void *, size_t *, void *, char *)); -int sysctl_rdstruct __P((void *, size_t *, void *, void *, int)); -int sysctl_struct __P((void *oldp, size_t *, void *, size_t, void *, int)); - int sysctl_clockrate __P((char *, size_t*)); -int sysctl_vnode __P((char *, size_t*)); int sysctl_file __P((char *, size_t*)); int sysctl_doproc __P((int *, u_int, char *, size_t*)); int sysctl_doprof __P((int *, u_int, void *, size_t *, void *, size_t)); +*/ #else /* !KERNEL */ #include