summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_conf.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-02-27 22:57:32 +0000
committerphk <phk@FreeBSD.org>2005-02-27 22:57:32 +0000
commita8b71d95fab6042a43dfe6aa45b43537a7eb00ba (patch)
tree41fc4e0b89ddc6445ab11e911cea83a7bf2942c2 /sys/kern/kern_conf.c
parent2c12f56ebe6f4639339053dd84f3a81eb567f1a6 (diff)
downloadFreeBSD-src-a8b71d95fab6042a43dfe6aa45b43537a7eb00ba.zip
FreeBSD-src-a8b71d95fab6042a43dfe6aa45b43537a7eb00ba.tar.gz
Also handle d_maj hints from cloning drivers correctly.
Diffstat (limited to 'sys/kern/kern_conf.c')
-rw-r--r--sys/kern/kern_conf.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index 07213b5..f89892a 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -361,6 +361,11 @@ find_major(struct cdevsw *devsw)
{
int i;
+ if (devsw->d_maj != MAJOR_AUTO) {
+ printf("NOTICE: Ignoring d_maj hint from driver \"%s\", %s",
+ devsw->d_name, "driver should be updated/fixed\n");
+ devsw->d_maj = MAJOR_AUTO;
+ }
for (i = NUMCDEVSW - 1; i > 0; i--)
if (reserved_majors[i] != i)
break;
@@ -426,12 +431,8 @@ prep_cdevsw(struct cdevsw *devsw)
devsw->d_flags |= D_INIT;
- if (devsw->d_maj != MAJOR_AUTO) {
- printf("NOTICE: Ignoring d_maj hint from driver \"%s\", %s",
- devsw->d_name, "driver should be updated/fixed\n");
- devsw->d_maj = MAJOR_AUTO;
- }
- find_major(devsw);
+ if (!(devsw->d_flags & D_ALLOCMAJ))
+ find_major(devsw);
dev_unlock();
}
@@ -704,8 +705,8 @@ clone_create(struct clonedevs **cdp, struct cdevsw *csw, int *up, struct cdev **
KASSERT(*up <= CLONE_UNITMASK,
("Too high unit (0x%x) in clone_create", *up));
- if (csw->d_maj == MAJOR_AUTO)
- find_major(csw);
+ if (!(csw->d_flags & D_INIT))
+ prep_cdevsw(csw);
/*
* Search the list for a lot of things in one go:
OpenPOWER on IntegriCloud