Module Name: src
Committed By: tls
Date: Sun Dec 2 05:46:40 UTC 2012
Modified Files:
src/sys/arch/hp300/dev [tls-maxphys]: rd.c
src/sys/arch/vax/mba [tls-maxphys]: hp.c
src/sys/arch/vax/vsa [tls-maxphys]: hdc9224.c
src/sys/dev [tls-maxphys]: ccd.c ccdvar.h fss.c
src/sys/dev/dkwedge [tls-maxphys]: dk.c
src/sys/dev/gpib [tls-maxphys]: rd.c
src/sys/kern [tls-maxphys]: subr_disk.c
Log Message:
Don't pass NULL struct dkdriver to disk_init. That's seriously bogus.
To generate a diff of this commit:
cvs rdiff -u -r1.92.6.1 -r1.92.6.2 src/sys/arch/hp300/dev/rd.c
cvs rdiff -u -r1.48 -r1.48.18.1 src/sys/arch/vax/mba/hp.c
cvs rdiff -u -r1.51 -r1.51.18.1 src/sys/arch/vax/vsa/hdc9224.c
cvs rdiff -u -r1.143 -r1.143.10.1 src/sys/dev/ccd.c
cvs rdiff -u -r1.32 -r1.32.14.1 src/sys/dev/ccdvar.h
cvs rdiff -u -r1.83 -r1.83.2.1 src/sys/dev/fss.c
cvs rdiff -u -r1.64.2.1 -r1.64.2.2 src/sys/dev/dkwedge/dk.c
cvs rdiff -u -r1.30.6.1 -r1.30.6.2 src/sys/dev/gpib/rd.c
cvs rdiff -u -r1.100.18.1 -r1.100.18.2 src/sys/kern/subr_disk.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/hp300/dev/rd.c
diff -u src/sys/arch/hp300/dev/rd.c:1.92.6.1 src/sys/arch/hp300/dev/rd.c:1.92.6.2
--- src/sys/arch/hp300/dev/rd.c:1.92.6.1 Tue Nov 20 03:01:21 2012
+++ src/sys/arch/hp300/dev/rd.c Sun Dec 2 05:46:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: rd.c,v 1.92.6.1 2012/11/20 03:01:21 tls Exp $ */
+/* $NetBSD: rd.c,v 1.92.6.2 2012/12/02 05:46:39 tls Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.92.6.1 2012/11/20 03:01:21 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.92.6.2 2012/12/02 05:46:39 tls Exp $");
#include "opt_useleds.h"
@@ -290,6 +290,19 @@ const struct cdevsw rd_cdevsw = {
nostop, notty, nopoll, nommap, nokqfilter, D_DISK
};
+static void
+rdminphys(struct buf *bp)
+{
+ struct rd_softc *sc = device_lookup_private(&rd_cd, rdunit(bp->b_dev));
+
+ long xmax;
+ xmax = sc->sc_dev->dv_maxphys;
+ if (bp->b_bcount > xmax)
+ bp->b_bcount = xmax;
+}
+
+const struct dkdriver rd_dkdriver = { rdstrategy, rdminphys };
+
static int
rdmatch(device_t parent, cfdata_t cf, void *aux)
{
@@ -334,7 +347,7 @@ rdattach(device_t parent, device_t self,
* Initialize and attach the disk structure.
*/
memset(&sc->sc_dkdev, 0, sizeof(sc->sc_dkdev));
- disk_init(&sc->sc_dkdev, device_xname(sc->sc_dev), NULL);
+ disk_init(&sc->sc_dkdev, device_xname(sc->sc_dev), &rd_dkdriver);
disk_attach(&sc->sc_dkdev);
sc->sc_slave = ha->ha_slave;
Index: src/sys/arch/vax/mba/hp.c
diff -u src/sys/arch/vax/mba/hp.c:1.48 src/sys/arch/vax/mba/hp.c:1.48.18.1
--- src/sys/arch/vax/mba/hp.c:1.48 Tue Dec 14 23:38:30 2010
+++ src/sys/arch/vax/mba/hp.c Sun Dec 2 05:46:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: hp.c,v 1.48 2010/12/14 23:38:30 matt Exp $ */
+/* $NetBSD: hp.c,v 1.48.18.1 2012/12/02 05:46:39 tls Exp $ */
/*
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hp.c,v 1.48 2010/12/14 23:38:30 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hp.c,v 1.48.18.1 2012/12/02 05:46:39 tls Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -118,6 +118,8 @@ const struct cdevsw hp_cdevsw = {
.d_flag = D_DISK
};
+const struct dkdriver hp_dkdriver = { hpstrategy, minphys };
+
#define HP_WCSR(reg, val) \
bus_space_write_4(sc->sc_iot, sc->sc_ioh, (reg), (val))
#define HP_RCSR(reg) \
@@ -174,7 +176,7 @@ hpattach(device_t parent, device_t self,
/*
* Init and attach the disk structure.
*/
- disk_init(&sc->sc_disk, device_xname(sc->sc_dev), NULL);
+ disk_init(&sc->sc_disk, device_xname(sc->sc_dev), &hp_dkdriver);
disk_attach(&sc->sc_disk);
/*
Index: src/sys/arch/vax/vsa/hdc9224.c
diff -u src/sys/arch/vax/vsa/hdc9224.c:1.51 src/sys/arch/vax/vsa/hdc9224.c:1.51.18.1
--- src/sys/arch/vax/vsa/hdc9224.c:1.51 Tue Dec 14 23:31:16 2010
+++ src/sys/arch/vax/vsa/hdc9224.c Sun Dec 2 05:46:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: hdc9224.c,v 1.51 2010/12/14 23:31:16 matt Exp $ */
+/* $NetBSD: hdc9224.c,v 1.51.18.1 2012/12/02 05:46:39 tls Exp $ */
/*
* Copyright (c) 1996 Ludd, University of Lule}, Sweden.
* All rights reserved.
@@ -51,7 +51,7 @@
#undef RDDEBUG
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hdc9224.c,v 1.51 2010/12/14 23:31:16 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hdc9224.c,v 1.51.18.1 2012/12/02 05:46:39 tls Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -228,6 +228,14 @@ static volatile int u;
#define HDC_WCMD(x) *(volatile char *)(sc->sc_regs + 4) = (x)
#define HDC_RSTAT *(volatile char *)(sc->sc_regs + 4)
+static void
+rdminphys(struct buf *bp)
+{
+ if (bp->b_bcount > rd_dmasize)
+ bp->b_bcount = rd_dmasize;
+}
+
+const struct dkdriver rd_dkdriver = { rdstrategy, rdminphys };
/*
* new-config's hdcmatch() is similiar to old-config's hdcprobe(),
* thus we probe for the existence of the controller and reset it.
@@ -301,7 +309,7 @@ hdcattach(device_t parent, device_t self
sc->sc_dmabase = (void *)va->va_dmaaddr;
sc->sc_dmasize = va->va_dmasize;
sc->sc_intbit = va->va_maskno;
- rd_dmasize = min(MAXPHYS, sc->sc_dmasize); /* Used in rd_minphys */
+ rd_dmasize = min(MAXPHYS, sc->sc_dmasize); /* Used in rdminphys */
sc->sc_vd.vd_go = hdc_qstart;
sc->sc_vd.vd_arg = sc;
@@ -365,7 +373,7 @@ rdattach(device_t parent, device_t self,
/*
* Initialize and attach the disk structure.
*/
- disk_init(&rd->sc_disk, device_xname(rd->sc_dev), NULL);
+ disk_init(&rd->sc_disk, device_xname(rd->sc_dev), &rd_dkdriver);
disk_attach(&rd->sc_disk);
/*
Index: src/sys/dev/ccd.c
diff -u src/sys/dev/ccd.c:1.143 src/sys/dev/ccd.c:1.143.10.1
--- src/sys/dev/ccd.c:1.143 Sun Nov 13 23:02:46 2011
+++ src/sys/dev/ccd.c Sun Dec 2 05:46:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: ccd.c,v 1.143 2011/11/13 23:02:46 christos Exp $ */
+/* $NetBSD: ccd.c,v 1.143.10.1 2012/12/02 05:46:39 tls Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc.
@@ -88,7 +88,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.143 2011/11/13 23:02:46 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.143.10.1 2012/12/02 05:46:39 tls Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -210,6 +210,23 @@ struct ccd_softc *ccd_softc;
const int ccd_softc_elemsize = sizeof(struct ccd_softc);
int numccd = 0;
+static void
+ccdminphys(struct buf *bp)
+{
+ struct ccd_softc *cs;
+ long xmax;
+ int unit = ccdunit(bp->b_dev);
+
+ cs = &ccd_softc[unit];
+
+ xmax = cs->sc_maxphys;
+
+ if (bp->b_bcount > xmax)
+ bp->b_bcount = xmax;
+}
+
+const struct dkdriver ccd_dkdriver = { ccdstrategy, ccdminphys };
+
/*
* Called by main() during pseudo-device attachment. All we need
* to do is allocate enough space for devices to be configured later.
@@ -246,7 +263,7 @@ ccdattach(int num)
cs->sc_iolock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
cv_init(&cs->sc_stop, "ccdstop");
cv_init(&cs->sc_push, "ccdthr");
- disk_init(&cs->sc_dkdev, cs->sc_xname, NULL); /* XXX */
+ disk_init(&cs->sc_dkdev, cs->sc_xname, &ccd_dkdriver);
}
}
@@ -274,6 +291,7 @@ ccdinit(struct ccd_softc *cs, char **cpa
tmppath = kmem_alloc(MAXPATHLEN, KM_SLEEP);
cs->sc_size = 0;
+ cs->sc_maxphys = MACHINE_MAXPHYS;
/*
* Verify that each component piece exists and record
@@ -284,6 +302,7 @@ ccdinit(struct ccd_softc *cs, char **cpa
for (ix = 0, path_alloced = 0; ix < cs->sc_nccdisks; ix++) {
ci = &cs->sc_cinfo[ix];
ci->ci_vp = vpp[ix];
+ struct disk *diskp;
/*
* Copy in the pathname of the component.
@@ -321,6 +340,11 @@ ccdinit(struct ccd_softc *cs, char **cpa
goto out;
}
ci->ci_dev = va.va_rdev;
+ if ((diskp = disk_find_blk(ci->ci_dev)) == NULL) {
+ panic("no disk for device %d %d", major(ci->ci_dev),
+ DISKUNIT(ci->ci_dev));
+ }
+ cs->sc_maxphys = MIN(cs->sc_maxphys, disk_maxphys(diskp));
/*
* Get partition information for the component.
Index: src/sys/dev/ccdvar.h
diff -u src/sys/dev/ccdvar.h:1.32 src/sys/dev/ccdvar.h:1.32.14.1
--- src/sys/dev/ccdvar.h:1.32 Tue Feb 8 20:20:26 2011
+++ src/sys/dev/ccdvar.h Sun Dec 2 05:46:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: ccdvar.h,v 1.32 2011/02/08 20:20:26 rmind Exp $ */
+/* $NetBSD: ccdvar.h,v 1.32.14.1 2012/12/02 05:46:39 tls Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc.
@@ -176,6 +176,7 @@ struct ccd_softc {
struct lwp *sc_thread; /* for deferred I/O */
kcondvar_t sc_push; /* for deferred I/O */
bool sc_zap; /* for deferred I/O */
+ size_t sc_maxphys; /* Max I/O size */
#endif
};
Index: src/sys/dev/fss.c
diff -u src/sys/dev/fss.c:1.83 src/sys/dev/fss.c:1.83.2.1
--- src/sys/dev/fss.c:1.83 Sat Jul 28 16:14:17 2012
+++ src/sys/dev/fss.c Sun Dec 2 05:46:39 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: fss.c,v 1.83 2012/07/28 16:14:17 hannken Exp $ */
+/* $NetBSD: fss.c,v 1.83.2.1 2012/12/02 05:46:39 tls Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.83 2012/07/28 16:14:17 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.83.2.1 2012/12/02 05:46:39 tls Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -117,6 +117,19 @@ CFATTACH_DECL_NEW(fss, sizeof(struct fss
fss_match, fss_attach, fss_detach, NULL);
extern struct cfdriver fss_cd;
+static void
+fss_minphys(struct buf *bp)
+{
+ struct fss_softc *fc = device_lookup_private(&fss_cd, minor(bp->b_dev));
+
+ long xmax;
+ xmax = fc->sc_mount->mnt_maxphys;
+ if (bp->b_bcount > xmax)
+ bp->b_bcount = xmax;
+}
+
+const struct dkdriver fss_dkdriver = { fss_strategy, fss_minphys };
+
void
fssattach(int num)
{
@@ -146,7 +159,7 @@ fss_attach(device_t parent, device_t sel
bufq_alloc(&sc->sc_bufq, "fcfs", 0);
sc->sc_dkdev = malloc(sizeof(*sc->sc_dkdev), M_DEVBUF, M_WAITOK);
sc->sc_dkdev->dk_info = NULL;
- disk_init(sc->sc_dkdev, device_xname(self), NULL);
+ disk_init(sc->sc_dkdev, device_xname(self), &fss_dkdriver);
if (!pmf_device_register(self, NULL, NULL))
aprint_error_dev(self, "couldn't establish power handler\n");
Index: src/sys/dev/dkwedge/dk.c
diff -u src/sys/dev/dkwedge/dk.c:1.64.2.1 src/sys/dev/dkwedge/dk.c:1.64.2.2
--- src/sys/dev/dkwedge/dk.c:1.64.2.1 Tue Nov 20 03:02:00 2012
+++ src/sys/dev/dkwedge/dk.c Sun Dec 2 05:46:40 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: dk.c,v 1.64.2.1 2012/11/20 03:02:00 tls Exp $ */
+/* $NetBSD: dk.c,v 1.64.2.2 2012/12/02 05:46:40 tls Exp $ */
/*-
* Copyright (c) 2004, 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.64.2.1 2012/11/20 03:02:00 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.64.2.2 2012/12/02 05:46:40 tls Exp $");
#ifdef _KERNEL_OPT
#include "opt_dkwedge.h"
@@ -118,6 +118,8 @@ const struct cdevsw dk_cdevsw = {
nostop, notty, nopoll, nommap, nokqfilter, D_DISK
};
+const struct dkdriver dk_dkdriver = { dkstrategy, dkminphys };
+
static struct dkwedge_softc **dkwedges;
static u_int ndkwedges;
static krwlock_t dkwedges_lock;
@@ -432,7 +434,7 @@ dkwedge_add(struct dkwedge_info *dkw)
* of state to RUNNING atomic.
*/
- disk_init(&sc->sc_dk, device_xname(sc->sc_dev), NULL);
+ disk_init(&sc->sc_dk, device_xname(sc->sc_dev), &dk_dkdriver);
disk_blocksize(&sc->sc_dk, DEV_BSIZE << pdk->dk_blkshift);
dkgetproperties(&sc->sc_dk, dkw);
disk_attach(&sc->sc_dk);
Index: src/sys/dev/gpib/rd.c
diff -u src/sys/dev/gpib/rd.c:1.30.6.1 src/sys/dev/gpib/rd.c:1.30.6.2
--- src/sys/dev/gpib/rd.c:1.30.6.1 Tue Nov 20 03:02:00 2012
+++ src/sys/dev/gpib/rd.c Sun Dec 2 05:46:40 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: rd.c,v 1.30.6.1 2012/11/20 03:02:00 tls Exp $ */
+/* $NetBSD: rd.c,v 1.30.6.2 2012/12/02 05:46:40 tls Exp $ */
/*-
* Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.30.6.1 2012/11/20 03:02:00 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.30.6.2 2012/12/02 05:46:40 tls Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -265,6 +265,19 @@ const struct cdevsw rd_cdevsw = {
extern struct cfdriver rd_cd;
+static void
+rdminphys(struct buf *bp)
+{
+ struct rd_softc *sc = device_lookup_private(&rd_cd, RDUNIT(bp->b_dev));
+
+ long xmax;
+ xmax = rd->sc_dev->dv_maxphys;
+ if (bp->b_bcount > xmax)
+ bp->b_bcount = xmax;
+}
+
+const struct dkdriver rd_dkdriver = { rdstrategy, rdminphys };
+
int
rdlookup(int id, int slave, int punit)
{
@@ -390,7 +403,7 @@ rdattach(device_t parent, device_t self,
* Initialize and attach the disk structure.
*/
memset(&sc->sc_dk, 0, sizeof(sc->sc_dk));
- disk_init(&sc->sc_dk, device_xname(sc->sc_dev), NULL);
+ disk_init(&sc->sc_dk, device_xname(sc->sc_dev), rd_dkdriver);
disk_attach(&sc->sc_dk);
callout_init(&sc->sc_restart_ch, 0);
Index: src/sys/kern/subr_disk.c
diff -u src/sys/kern/subr_disk.c:1.100.18.1 src/sys/kern/subr_disk.c:1.100.18.2
--- src/sys/kern/subr_disk.c:1.100.18.1 Wed Sep 12 06:15:34 2012
+++ src/sys/kern/subr_disk.c Sun Dec 2 05:46:40 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_disk.c,v 1.100.18.1 2012/09/12 06:15:34 tls Exp $ */
+/* $NetBSD: subr_disk.c,v 1.100.18.2 2012/12/02 05:46:40 tls Exp $ */
/*-
* Copyright (c) 1996, 1997, 1999, 2000, 2009 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.100.18.1 2012/09/12 06:15:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.100.18.2 2012/12/02 05:46:40 tls Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -218,6 +218,9 @@ int disk_maxphys(const struct disk *cons
void
disk_init(struct disk *diskp, const char *name, const struct dkdriver *driver)
{
+ KASSERT(diskp != NULL);
+ KASSERT(name != NULL);
+ KASSERT(driver != NULL);
/*
* Initialize the wedge-related locks and other fields.