Use deviter(9) instead of accessing alldevs directly.

This commit is contained in:
dyoung 2009-11-06 23:10:22 +00:00
parent f73c380ff9
commit a43418e649

View File

@ -1,4 +1,4 @@
/* $NetBSD: x86_autoconf.c,v 1.45 2009/09/21 13:23:43 macallan Exp $ */
/* $NetBSD: x86_autoconf.c,v 1.46 2009/11/06 23:10:22 dyoung Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: x86_autoconf.c,v 1.45 2009/09/21 13:23:43 macallan Exp $");
__KERNEL_RCSID(0, "$NetBSD: x86_autoconf.c,v 1.46 2009/11/06 23:10:22 dyoung Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -152,6 +152,7 @@ matchbiosdisks(void)
struct btinfo_biosgeom *big;
struct bi_biosgeom_entry *be;
device_t dv;
deviter_t di;
int i, ck, error, m, n;
struct vnode *tv;
char mbr[DEV_BSIZE];
@ -163,10 +164,12 @@ matchbiosdisks(void)
numbig = big ? big->num : 0;
/* First, count all native disks. */
TAILQ_FOREACH(dv, &alldevs, dv_list) {
for (dv = deviter_first(&di, DEVITER_F_ROOT_FIRST); dv != NULL;
dv = deviter_next(&di)) {
if (is_valid_disk(dv))
x86_ndisks++;
}
deviter_release(&di);
dklist_size = sizeof(struct disklist) + (x86_ndisks - 1) *
sizeof(struct nativedisk_info);
@ -196,7 +199,8 @@ matchbiosdisks(void)
/* XXX Code duplication from findroot(). */
n = -1;
TAILQ_FOREACH(dv, &alldevs, dv_list) {
for (dv = deviter_first(&di, DEVITER_F_ROOT_FIRST); dv != NULL;
dv = deviter_next(&di)) {
if (device_class(dv) != DV_DISK)
continue;
#ifdef GEOM_DEBUG
@ -251,6 +255,7 @@ matchbiosdisks(void)
vput(tv);
}
}
deviter_release(&di);
}
/*
@ -364,6 +369,7 @@ findroot(void)
struct btinfo_bootwedge *biw;
struct btinfo_biosgeom *big;
device_t dv;
deviter_t di;
if (booted_device)
return;
@ -380,7 +386,9 @@ findroot(void)
}
if ((biv = lookup_bootinfo(BTINFO_ROOTDEVICE)) != NULL) {
TAILQ_FOREACH(dv, &alldevs, dv_list) {
for (dv = deviter_first(&di, DEVITER_F_ROOT_FIRST);
dv != NULL;
dv = deviter_next(&di)) {
cfdata_t cd;
size_t len;
@ -393,9 +401,12 @@ findroot(void)
if (strncmp(cd->cf_name, biv->devname, len) == 0 &&
biv->devname[len] - '0' == cd->cf_unit) {
handle_wedges(dv, biv->devname[len + 1] - 'a');
return;
break;
}
}
deviter_release(&di);
if (dv != NULL)
return;
}
if ((biw = lookup_bootinfo(BTINFO_BOOTWEDGE)) != NULL) {
@ -406,7 +417,9 @@ findroot(void)
* because lower devices numbers are more likely to be the
* boot device.
*/
TAILQ_FOREACH(dv, &alldevs, dv_list) {
for (dv = deviter_first(&di, DEVITER_F_ROOT_FIRST);
dv != NULL;
dv = deviter_next(&di)) {
if (device_class(dv) != DV_DISK)
continue;
@ -433,6 +446,7 @@ findroot(void)
}
dkwedge_set_bootwedge(dv, biw->startblk, biw->nblks);
}
deviter_release(&di);
if (booted_wedge)
return;
@ -446,7 +460,9 @@ findroot(void)
* because lower device numbers are more likely to be the
* boot device.
*/
TAILQ_FOREACH(dv, &alldevs, dv_list) {
for (dv = deviter_first(&di, DEVITER_F_ROOT_FIRST);
dv != NULL;
dv = deviter_next(&di)) {
if (device_class(dv) != DV_DISK)
continue;
@ -487,6 +503,7 @@ findroot(void)
}
handle_wedges(dv, bid->partition);
}
deviter_release(&di);
if (booted_device)
return;
@ -509,7 +526,9 @@ findroot(void)
* recognized as a bootable CD-ROM drive by the BIOS.
* Assume the first unit is the one.
*/
TAILQ_FOREACH(dv, &alldevs, dv_list) {
for (dv = deviter_first(&di, DEVITER_F_ROOT_FIRST);
dv != NULL;
dv = deviter_next(&di)) {
if (device_class(dv) == DV_DISK &&
device_is_a(dv, "cd")) {
booted_device = dv;
@ -517,6 +536,7 @@ findroot(void)
break;
}
}
deviter_release(&di);
}
}
}