diff options
-rw-r--r-- | sys/kern/kern_conf.c | 2 | ||||
-rw-r--r-- | sys/kern/tty_cons.c | 19 |
2 files changed, 9 insertions, 12 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 4606fd6..2f06fa6 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -295,6 +295,8 @@ make_dev(struct cdevsw *devsw, int minor, uid_t uid, gid_t gid, int perms, const devsw->d_maj = i; reserved_majors[i] = i; } else { + if (devsw->d_maj == 256) /* XXX: tty_cons.c is magic */ + devsw->d_maj = 0; KASSERT(devsw->d_maj >= 0 && devsw->d_maj < 256, ("Invalid major (%d) in make_dev", devsw->d_maj)); if (reserved_majors[devsw->d_maj] != devsw->d_maj) { diff --git a/sys/kern/tty_cons.c b/sys/kern/tty_cons.c index cd5c84f..89bed41 100644 --- a/sys/kern/tty_cons.c +++ b/sys/kern/tty_cons.c @@ -69,7 +69,6 @@ static d_ioctl_t cnioctl; static d_poll_t cnpoll; static d_kqfilter_t cnkqfilter; -#define CDEV_MAJOR 0 static struct cdevsw cn_cdevsw = { .d_open = cnopen, .d_close = cnclose, @@ -78,7 +77,12 @@ static struct cdevsw cn_cdevsw = { .d_ioctl = cnioctl, .d_poll = cnpoll, .d_name = "console", - .d_maj = CDEV_MAJOR, + .d_maj = 256, + /* + * XXX: We really want major #0, but zero here means + * XXX: allocate a major number automatically. + * XXX: kern_conf.c knows what to do when it sees 256. + */ .d_flags = D_TTY, .d_kqfilter = cnkqfilter, }; @@ -171,6 +175,7 @@ cninit(void) * Make the best console the preferred console. */ cnselect(best_cn); + make_dev(&cn_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "console"); } void @@ -582,13 +587,3 @@ cndbctl(int on) if (on) refcount++; } - -static void -cn_drvinit(void *unused) -{ - - make_dev(&cn_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, - "console"); -} - -SYSINIT(cndev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,cn_drvinit,NULL) |