Use deviter(9) instead of accessing alldevs directly.
This commit is contained in:
parent
f73c380ff9
commit
a43418e649
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user