aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/machdep.c11
-rw-r--r--sys/amd64/isa/isa.c31
-rw-r--r--sys/dev/eisa/eisaconf.c22
-rw-r--r--sys/dev/eisa/eisaconf.h7
-rw-r--r--sys/dev/fdc/fdc.c17
-rw-r--r--sys/dev/pci/pci.c19
-rw-r--r--sys/i386/eisa/eisaconf.c22
-rw-r--r--sys/i386/eisa/eisaconf.h7
-rw-r--r--sys/i386/i386/machdep.c11
-rw-r--r--sys/i386/include/devconf.h16
-rw-r--r--sys/i386/isa/fd.c17
-rw-r--r--sys/i386/isa/ft.c10
-rw-r--r--sys/i386/isa/isa.c31
-rw-r--r--sys/i386/isa/isa_device.h9
-rw-r--r--sys/i386/isa/wcd.c7
-rw-r--r--sys/i386/isa/wd.c9
-rw-r--r--sys/isa/fd.c17
-rw-r--r--sys/kern/kern_devconf.c76
-rw-r--r--sys/kern/kern_sysctl.c473
-rw-r--r--sys/kern/subr_prof.c32
-rw-r--r--sys/kern/vfs_export.c60
-rw-r--r--sys/kern/vfs_init.c72
-rw-r--r--sys/kern/vfs_subr.c60
-rw-r--r--sys/pci/pci.c19
-rw-r--r--sys/scsi/cd.c8
-rw-r--r--sys/scsi/ch.c8
-rw-r--r--sys/scsi/od.c8
-rw-r--r--sys/scsi/scsiconf.c20
-rw-r--r--sys/scsi/scsiconf.h4
-rw-r--r--sys/scsi/sd.c8
-rw-r--r--sys/scsi/st.c8
-rw-r--r--sys/sys/devconf.h9
-rw-r--r--sys/sys/sysctl.h27
33 files changed, 334 insertions, 821 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index 8963c3462632..77cfdb93a627 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 21d653ba083b..35003e89ef6c 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 d1b37efe114d..b83cc493d45a 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 b76284681311..7d79d89dfdc7 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 f8622035de72..4601645463ac 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 50337e5c41e3..a14c96f6e93f 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 d1b37efe114d..b83cc493d45a 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 b76284681311..7d79d89dfdc7 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 8963c3462632..77cfdb93a627 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 c1c822cf257d..d4a30c9df348 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 f8622035de72..4601645463ac 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 a56a84f432f7..8d116d5d70a9 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 21d653ba083b..35003e89ef6c 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 3ce038583782..1fb22d9f6fe4 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 72e705e1323a..868e3be9db30 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 680cfebd7047..9416bc774cc2 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 f8622035de72..4601645463ac 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 bcdf87e23ad4..b7370421b981 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 27b55a75dd93..5c3332b545d3 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 e0eabbd7f55f..4b395aa1af7a 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 9c4490d70b32..e9f167841b19 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 5c98182eed82..efbb5e473f56 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 9c4490d70b32..e9f167841b19 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 50337e5c41e3..a14c96f6e93f 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 c3fb6ffaebe5..f4f31d9f9b85 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 a7c36d9efa5a..12045d96123e 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 e17bfbf94033..60a8836ddcfc 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 c364eab760f5..2c510aa1cd36 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 74e59c1cf451..a88c80ba2686 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 d8994aa12c60..501aff5105d6 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 a4cbdb68cc89..c872545b3ba9 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 d468c33223a8..76e309d4c754 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 170a68e44f54..bdb2606dabbb 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>