summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-03-29 11:15:54 +0000
committerphk <phk@FreeBSD.org>2005-03-29 11:15:54 +0000
commit9a44fd008d14f1e085c0e4f6794545f57bd6add8 (patch)
treef6fee916c72092db5daddbcdfda87e32c191287c /sys/kern
parent9e31cd39931afa615aa9ff3f91635a0f22e38651 (diff)
downloadFreeBSD-src-9a44fd008d14f1e085c0e4f6794545f57bd6add8.zip
FreeBSD-src-9a44fd008d14f1e085c0e4f6794545f57bd6add8.tar.gz
Remove the global cdev hash and use the cdevsw list instead.
Don't remove the now unused element from cdev yet, wait until we have a better reason to bump the version. There is now no longer any upper limit on how many device drivers a FreeBSD kernel can have.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_conf.c31
1 files changed, 2 insertions, 29 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index da9b554..3852c1c 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -47,7 +47,6 @@ __FBSDID("$FreeBSD$");
static MALLOC_DEFINE(M_DEVT, "cdev", "cdev storage");
/* Built at compile time from sys/conf/majors */
-extern unsigned char reserved_majors[256];
static struct mtx devmtx;
static void freedev(struct cdev *dev);
@@ -179,7 +178,6 @@ static struct cdevsw dead_cdevsw = {
.d_mmap = dead_mmap,
.d_strategy = dead_strategy,
.d_name = "dead",
- .d_maj = 255,
.d_dump = dead_dump,
.d_kqfilter = dead_kqfilter
};
@@ -276,7 +274,7 @@ newdev(struct cdevsw *csw, int y, struct cdev *si)
dev_t udev;
mtx_assert(&devmtx, MA_OWNED);
- udev = (csw->d_maj << 8) | y;
+ udev = y;
LIST_FOREACH(si2, &csw->d_devs, si_list) {
if (si2->si_drv0 == udev) {
freedev(si);
@@ -308,32 +306,9 @@ umajor(dev_t dev)
}
static void
-find_major(struct cdevsw *devsw)
-{
- int i;
-
- if (devsw->d_maj != 0) {
- printf("NOTICE: Ignoring d_maj hint from driver \"%s\", %s",
- devsw->d_name, "driver should be updated/fixed\n");
- devsw->d_maj = 0;
- }
- for (i = NUMCDEVSW - 1; i > 0; i--)
- if (reserved_majors[i] != i)
- break;
- KASSERT(i > 0, ("Out of major numbers (%s)", devsw->d_name));
- devsw->d_maj = i;
- reserved_majors[i] = i;
- devsw->d_flags |= D_ALLOCMAJ;
-}
-
-static void
fini_cdevsw(struct cdevsw *devsw)
{
- if (devsw->d_flags & D_ALLOCMAJ) {
- reserved_majors[devsw->d_maj] = 0;
- devsw->d_maj = 0;
- devsw->d_flags &= ~D_ALLOCMAJ;
- }
+
devsw->d_flags &= ~D_INIT;
}
@@ -382,8 +357,6 @@ prep_cdevsw(struct cdevsw *devsw)
devsw->d_flags |= D_INIT;
- if (!(devsw->d_flags & D_ALLOCMAJ))
- find_major(devsw);
dev_unlock();
}
OpenPOWER on IntegriCloud