summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_autoconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/subr_autoconf.c')
-rw-r--r--sys/kern/subr_autoconf.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/kern/subr_autoconf.c b/sys/kern/subr_autoconf.c
index af17988..7281339 100644
--- a/sys/kern/subr_autoconf.c
+++ b/sys/kern/subr_autoconf.c
@@ -39,7 +39,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)subr_autoconf.c 8.1 (Berkeley) 6/10/93
+ * @(#)subr_autoconf.c 8.3 (Berkeley) 5/17/94
*
* from: $Header: subr_autoconf.c,v 1.12 93/02/01 19:31:48 torek Exp $ (LBL)
*/
@@ -47,6 +47,7 @@
#include <sys/param.h>
#include <sys/device.h>
#include <sys/malloc.h>
+#include <libkern/libkern.h>
/*
* Autoconfiguration subroutines.
@@ -283,15 +284,16 @@ config_attach(parent, cf, aux, print)
void **nsp;
if (old == 0) {
- nsp = malloc(MINALLOCSIZE, M_DEVBUF, M_WAITOK); /*XXX*/
- bzero(nsp, MINALLOCSIZE);
- cd->cd_ndevs = MINALLOCSIZE / sizeof(void *);
+ new = max(MINALLOCSIZE / sizeof(void *),
+ dev->dv_unit + 1);
+ newbytes = new * sizeof(void *);
+ nsp = malloc(newbytes, M_DEVBUF, M_WAITOK); /*XXX*/
+ bzero(nsp, newbytes);
} else {
new = cd->cd_ndevs;
do {
new *= 2;
} while (new <= dev->dv_unit);
- cd->cd_ndevs = new;
oldbytes = old * sizeof(void *);
newbytes = new * sizeof(void *);
nsp = malloc(newbytes, M_DEVBUF, M_WAITOK); /*XXX*/
@@ -299,6 +301,7 @@ config_attach(parent, cf, aux, print)
bzero(&nsp[old], newbytes - oldbytes);
free(cd->cd_devs, M_DEVBUF);
}
+ cd->cd_ndevs = new;
cd->cd_devs = nsp;
}
if (cd->cd_devs[dev->dv_unit])
OpenPOWER on IntegriCloud