diff options
Diffstat (limited to 'sys')
33 files changed, 334 insertions, 821 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 8963c34..77cfdb9 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 21d653b..35003e8 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 <sys/param.h> #include <sys/systm.h> /* isn't it a joy */ #include <sys/kernel.h> /* to have three of these */ +#include <sys/sysctl.h> #include <sys/proc.h> #include <sys/conf.h> #include <sys/file.h> @@ -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 d1b37ef..b83cc49 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 <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> +#include <sys/sysctl.h> #include <sys/conf.h> #include <sys/malloc.h> #include <sys/devconf.h> @@ -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 b762846..7d79d89 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 f862203..4601645 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) -{ - 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) +fd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - 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 50337e5..a14c96f 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 <sys/malloc.h> #include <sys/errno.h> #include <sys/kernel.h> +#include <sys/sysctl.h> #include <sys/proc.h> /* declaration of wakeup(), used by vm.h */ #include <sys/devconf.h> @@ -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 d1b37ef..b83cc49 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 <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> +#include <sys/sysctl.h> #include <sys/conf.h> #include <sys/malloc.h> #include <sys/devconf.h> @@ -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 b762846..7d79d89 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 8963c34..77cfdb9 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 c1c822c..d4a30c9 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 <i386/isa/isa_device.h> -#include <i386/eisa/eisaconf.h> -#include <pci/pcireg.h> -#include <pci/pcivar.h> -#include <scsi/scsi_all.h> -#include <scsi/scsiconf.h> -*/ - #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 f862203..4601645 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) -{ - 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) +fd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - 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 a56a84f..8d116d5 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 21d653b..35003e8 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 <sys/param.h> #include <sys/systm.h> /* isn't it a joy */ #include <sys/kernel.h> /* to have three of these */ +#include <sys/sysctl.h> #include <sys/proc.h> #include <sys/conf.h> #include <sys/file.h> @@ -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 3ce0385..1fb22d9 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 72e705e..868e3be 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 680cfeb..9416bc7 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 f862203..4601645 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) -{ - 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) +fd_externalize(struct kern_devconf *kdc, struct sysctl_req *req) { - 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 bcdf87e..b737042 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)); - - default: - for(kdc = dc_list; kdc; kdc = kdc->kdc_next) { - if(kdc->kdc_number == name[0]) - break; - } - - if(!kdc) - return ENXIO; + if (name[0] == DEVCONF_NUMBER) + return sysctl_handle_int(oidp, 0, dc_lastnum, req); - if(!oldp) { - *oldlenp = sizeof(struct devconf) - 1; - - *oldlenp += kdc->kdc_datalen; - return 0; - } + for(kdc = dc_list; kdc; kdc = kdc->kdc_next) { + if(kdc->kdc_number == name[0]) + break; + } - len = *oldlenp; - make_devconf(kdc, &dc); - *oldlenp = (sizeof dc) - 1 + dc.dc_datalen; + if(!kdc) + return ENXIO; - if(len < *oldlenp) { - return ENOMEM; - } + make_devconf(kdc, &dc); - rv = copyout(&dc, oldp, (sizeof dc) - 1); - if(rv) - return rv; + rv = SYSCTL_OUT(req, &dc, (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(kdc->kdc_externalize) + rv = kdc->kdc_externalize(kdc, req); + if(rv) + return rv; - if(!newp) - return 0; + if(!req->newptr) + return 0; - if(!kdc->kdc_internalize) - return EOPNOTSUPP; + if(!kdc->kdc_internalize) + return EOPNOTSUPP; - rv = kdc->kdc_internalize(p, kdc, - &((struct devconf *)newp)->dc_data, - newlen - ((sizeof dc) - 1)); - return rv; - } + 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 27b55a7..5c3332b 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 <sys/conf.h> #include <sys/sysctl.h> +/* + * 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) @@ -398,23 +473,10 @@ sysctl_new_user(struct sysctl_req *req, void *p, int l) } /* - * 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;i<namelen;i++) - printf("%d ", name[i]); - printf("= %d\n", error); - } -#endif - if (error) - return (error); - if (retval) - *retval = oldlen; - return (error); -} - -/* - * Attributes stored in the kernel. - */ -int securelevel = -1; - -/* - * kernel related system variables. - */ -static int -kern_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; -{ - - /* all sysctl names at this level are terminal */ - if (namelen != 1 && !(name[0] == KERN_PROC || name[0] == KERN_PROF - || name[0] == KERN_NTP_PLL)) - return (ENOTDIR); /* overloaded */ - - switch (name[0]) { - - case KERN_VNODE: - return (sysctl_vnode(oldp, oldlenp)); -#ifdef GPROF - case KERN_PROF: - return (sysctl_doprof(name + 1, namelen - 1, oldp, oldlenp, - newp, newlen)); -#endif - default: - return (EOPNOTSUPP); - } - /* NOTREACHED */ -} - -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, ""); -/* - * 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 e0eabbd..4b395aa 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 <sys/param.h> @@ -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 9c4490d..e9f1678 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) { - vfs_unbusy(mp); - *sizep = bp - where; - return (ENOMEM); - } - if ((error = copyout(&vp, bp, VPTRSZ)) || - (error = copyout(vp, bp + VPTRSZ, VNODESZ))) { + if ((error = SYSCTL_OUT(req, &vp, VPTRSZ)) || + (error = SYSCTL_OUT(req, vp, 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 5c98182..efbb5e4 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; -{ - int i; - int error; - int buflen = *oldlenp; - caddr_t where = oldp, start = oldp; - - 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); - } +static int +sysctl_fs_vfsconf SYSCTL_HANDLER_ARGS +{ + int i, error; - 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 9c4490d..e9f1678 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) { - vfs_unbusy(mp); - *sizep = bp - where; - return (ENOMEM); - } - if ((error = copyout(&vp, bp, VPTRSZ)) || - (error = copyout(vp, bp + VPTRSZ, VNODESZ))) { + if ((error = SYSCTL_OUT(req, &vp, VPTRSZ)) || + (error = SYSCTL_OUT(req, vp, 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 50337e5..a14c96f 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 <sys/malloc.h> #include <sys/errno.h> #include <sys/kernel.h> +#include <sys/sysctl.h> #include <sys/proc.h> /* declaration of wakeup(), used by vm.h */ #include <sys/devconf.h> @@ -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 c3fb6ff..f4f31d9 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 a7c36d9..12045d9 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 <sys/types.h> @@ -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 e17bfbf..60a8836 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 c364eab..2c510aa 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 <sys/types.h> @@ -24,6 +24,7 @@ #include <sys/systm.h> #include <sys/stat.h> #include <sys/malloc.h> +#include <sys/sysctl.h> #include <sys/devconf.h> #include <sys/conf.h> @@ -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 74e59c1..a88c80b 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 d8994aa..501aff5 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 a4cbdb6..c872545 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 d468c332..76e309d 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 170a68e..bdb2606 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 <sys/cdefs.h> |