Module Name: src Committed By: pgoyette Date: Sun Mar 18 12:07:00 UTC 2018
Modified Files: src/sys/compat/common [pgoyette-compat]: compat_60_mod.c compat_mod.c tty_60.c src/sys/kern [pgoyette-compat]: tty.c src/sys/sys [pgoyette-compat]: tty.h Log Message: Initial pass at getting the tty stuff properly modularized. Subject to review and revision. To generate a diff of this commit: cvs rdiff -u -r1.1.2.7 -r1.1.2.8 src/sys/compat/common/compat_60_mod.c cvs rdiff -u -r1.24.14.15 -r1.24.14.16 src/sys/compat/common/compat_mod.c cvs rdiff -u -r1.4.16.1 -r1.4.16.2 src/sys/compat/common/tty_60.c cvs rdiff -u -r1.275 -r1.275.2.1 src/sys/kern/tty.c cvs rdiff -u -r1.94 -r1.94.2.1 src/sys/sys/tty.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/common/compat_60_mod.c diff -u src/sys/compat/common/compat_60_mod.c:1.1.2.7 src/sys/compat/common/compat_60_mod.c:1.1.2.8 --- src/sys/compat/common/compat_60_mod.c:1.1.2.7 Sun Mar 18 09:00:55 2018 +++ src/sys/compat/common/compat_60_mod.c Sun Mar 18 12:06:59 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_60_mod.c,v 1.1.2.7 2018/03/18 09:00:55 pgoyette Exp $ */ +/* $NetBSD: compat_60_mod.c,v 1.1.2.8 2018/03/18 12:06:59 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_60_mod.c,v 1.1.2.7 2018/03/18 09:00:55 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_60_mod.c,v 1.1.2.8 2018/03/18 12:06:59 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -71,9 +71,18 @@ compat_60_init(void) return 0; } + error = kern_tty_60_init(); + if (error != 0) { + kern_sa_60_fini(); + kern_time_60_fini(); + return 0; + } + #ifdef CPU_UCODE error = kern_cpu_60_init(); if (error != 0) { + kern_tty_60_fini(); + kern_sa_60_fini(); kern_time_60_fini(); return 0; } @@ -93,8 +102,17 @@ compat_60_fini(void) return error; #endif + error = kern_tty_60_fini(); + if (error != 0) { +#ifdef CPU_UCODE + kern_cpu_60_init(); +#endif + return error; + } + error = kern_sa_60_fini(); if (error != 0) { + kern_tty_60_init(); #ifdef CPU_UCODE kern_cpu_60_init(); #endif @@ -103,6 +121,7 @@ compat_60_fini(void) error = kern_time_60_fini(); if (error != 0) { + kern_tty_60_init(); kern_sa_60_init(); #ifdef CPU_UCODE kern_cpu_60_init(); @@ -110,7 +129,6 @@ compat_60_fini(void) return error; } - return error; } Index: src/sys/compat/common/compat_mod.c diff -u src/sys/compat/common/compat_mod.c:1.24.14.15 src/sys/compat/common/compat_mod.c:1.24.14.16 --- src/sys/compat/common/compat_mod.c:1.24.14.15 Sun Mar 18 02:05:21 2018 +++ src/sys/compat/common/compat_mod.c Sun Mar 18 12:06:59 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_mod.c,v 1.24.14.15 2018/03/18 02:05:21 pgoyette Exp $ */ +/* $NetBSD: compat_mod.c,v 1.24.14.16 2018/03/18 12:06:59 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.15 2018/03/18 02:05:21 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.16 2018/03/18 12:06:59 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -92,7 +92,6 @@ static const char * const compat_include MODULE_WITH_ALIASES(MODULE_CLASS_EXEC, compat, NULL, &compat_includes); -int ttcompat(struct tty *, u_long, void *, int, struct lwp *); #ifdef _MODULE #ifdef COMPAT_16 @@ -255,11 +254,21 @@ compat_modcmd(modcmd_t cmd, void *arg) if (error != 0) { return error; } +#ifdef NOTYET /* XXX */ #ifdef COMPAT_43 +/* XXX + * XXX This would mean that compat_43 and compat_60 are mutually + * XXX exclusive. Rather we should save the original vector + * XXX value, and retore it if we unload. Note that compat_43 + * XXX should "require" compat_60 to provide a definitive order + * XXX of initialization (ie, compat_60 first, then compat_43). + * XXX KASSERT(ttcompatvec == NULL); ttcompatvec = ttcompat; if_43_init(); + * XXX */ #endif +#endif /* XXX NOTYET */ #ifdef COMPAT_40 if_40_init(); #endif @@ -333,6 +342,7 @@ compat_modcmd(modcmd_t cmd, void *arg) if (error != 0) { return error; } +#ifdef NOTYET /* XXX */ #ifdef COMPAT_43 /* Unlink ttcompatvec. */ if (rw_tryenter(&ttcompat_lock, RW_WRITER)) { @@ -344,6 +354,7 @@ compat_modcmd(modcmd_t cmd, void *arg) return EBUSY; } #endif +#endif /* NOTYET XXX */ #ifdef COMPAT_16 #if defined(COMPAT_SIGCONTEXT) /* Index: src/sys/compat/common/tty_60.c diff -u src/sys/compat/common/tty_60.c:1.4.16.1 src/sys/compat/common/tty_60.c:1.4.16.2 --- src/sys/compat/common/tty_60.c:1.4.16.1 Thu Mar 8 08:55:52 2018 +++ src/sys/compat/common/tty_60.c Sun Mar 18 12:06:59 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: tty_60.c,v 1.4.16.1 2018/03/08 08:55:52 pgoyette Exp $ */ +/* $NetBSD: tty_60.c,v 1.4.16.2 2018/03/18 12:06:59 pgoyette Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1.4.16.1 2018/03/08 08:55:52 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1.4.16.2 2018/03/18 12:06:59 pgoyette Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -43,6 +43,8 @@ __KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1 #include <sys/systm.h> #include <sys/tty.h> + +#include <compat/common/compat_mod.h> #include <compat/sys/ttycom.h> /* convert struct ptmget to struct compat_60_ptmget */ @@ -114,3 +116,21 @@ compat_60_ptmioctl(dev_t dev, u_long cmd return EPASSTHROUGH; } } + +int +kern_tty_60_init(void) +{ + + vec_compat_ttioctl_60 = compat_60_ttioctl; +/* vec_compat_ptmioctl_60 = compat_60_ptmioctl; XXX NOT-YET */ + return 0; +} + +int +kern_tty_60_fini(void) +{ + vec_compat_ttioctl_60 = NULL; +/* vec_compat_ptmioctl_60 = NULL; XXX NOT-YET */ + + return 0; +} Index: src/sys/kern/tty.c diff -u src/sys/kern/tty.c:1.275 src/sys/kern/tty.c:1.275.2.1 --- src/sys/kern/tty.c:1.275 Wed Oct 25 08:12:39 2017 +++ src/sys/kern/tty.c Sun Mar 18 12:06:59 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: tty.c,v 1.275 2017/10/25 08:12:39 maya Exp $ */ +/* $NetBSD: tty.c,v 1.275.2.1 2018/03/18 12:06:59 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.275 2017/10/25 08:12:39 maya Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.275.2.1 2018/03/18 12:06:59 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -209,7 +209,7 @@ struct ttylist_head ttylist = TAILQ_HEAD int tty_count; kmutex_t tty_lock; krwlock_t ttcompat_lock; -int (*ttcompatvec)(struct tty *, u_long, void *, int, struct lwp *); +int (*vec_compat_ttioctl_60)(struct tty *, u_long, void *, int, struct lwp *); uint64_t tk_cancc; uint64_t tk_nin; @@ -1408,24 +1408,19 @@ ttioctl(struct tty *tp, u_long cmd, void default: break; } -#ifdef COMPAT_60 - error = compat_60_ttioctl(tp, cmd, data, flag, l); - if (error != EPASSTHROUGH) - return error; -#endif /* COMPAT_60 */ /* We may have to load the compat module for this. */ for (;;) { rw_enter(&ttcompat_lock, RW_READER); - if (ttcompatvec != NULL) { + if (vec_compat_ttioctl_60 != NULL) { break; } rw_exit(&ttcompat_lock); - (void)module_autoload("compat", MODULE_CLASS_ANY); - if (ttcompatvec == NULL) { + (void)module_autoload("compat", MODULE_CLASS_EXEC); + if (vec_compat_ttioctl_60 == NULL) { return EPASSTHROUGH; } } - error = (*ttcompatvec)(tp, cmd, data, flag, l); + error = (*vec_compat_ttioctl_60)(tp, cmd, data, flag, l); rw_exit(&ttcompat_lock); return error; } Index: src/sys/sys/tty.h diff -u src/sys/sys/tty.h:1.94 src/sys/sys/tty.h:1.94.2.1 --- src/sys/sys/tty.h:1.94 Tue Oct 31 10:45:19 2017 +++ src/sys/sys/tty.h Sun Mar 18 12:07:00 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: tty.h,v 1.94 2017/10/31 10:45:19 martin Exp $ */ +/* $NetBSD: tty.h,v 1.94.2.1 2018/03/18 12:07:00 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -313,7 +313,8 @@ bool ttypull(struct tty *); int clalloc(struct clist *, int, int); void clfree(struct clist *); -extern int (*ttcompatvec)(struct tty *, u_long, void *, int, struct lwp *); +extern int (*vec_compat_ttioctl_60)(struct tty *, u_long, void *, int, + struct lwp *); unsigned char tty_getctrlchar(struct tty *, unsigned /*which*/); void tty_setctrlchar(struct tty *, unsigned /*which*/, unsigned char /*val*/);