Module Name: src
Committed By: christos
Date: Mon Jan 28 15:46:49 UTC 2019
Modified Files:
src/sys/compat/common: compat_43_mod.c compat_mod.h tty_43.c tty_60.c
src/sys/compat/sys: ttycom.h
src/sys/kern: compat_stub.c tty.c
src/sys/sys: compat_stub.h
Log Message:
- provide a hook for the 43 tty ioctls
- make the 60 tty ioctl hook look the same
- fix the tty code to call both hooks and remove unused lock
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/compat/common/compat_43_mod.c \
src/sys/compat/common/compat_mod.h
cvs rdiff -u -r1.31 -r1.32 src/sys/compat/common/tty_43.c
cvs rdiff -u -r1.5 -r1.6 src/sys/compat/common/tty_60.c
cvs rdiff -u -r1.3 -r1.4 src/sys/compat/sys/ttycom.h
cvs rdiff -u -r1.2 -r1.3 src/sys/kern/compat_stub.c
cvs rdiff -u -r1.278 -r1.279 src/sys/kern/tty.c
cvs rdiff -u -r1.2 -r1.3 src/sys/sys/compat_stub.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_43_mod.c
diff -u src/sys/compat/common/compat_43_mod.c:1.2 src/sys/compat/common/compat_43_mod.c:1.3
--- src/sys/compat/common/compat_43_mod.c:1.2 Sat Jan 26 21:08:39 2019
+++ src/sys/compat/common/compat_43_mod.c Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_43_mod.c,v 1.2 2019/01/27 02:08:39 pgoyette Exp $ */
+/* $NetBSD: compat_43_mod.c,v 1.3 2019/01/28 15:46:49 christos Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_43_mod.c,v 1.2 2019/01/27 02:08:39 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_43_mod.c,v 1.3 2019/01/28 15:46:49 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -67,7 +67,7 @@ compat_43_init(void)
if (error != 0)
goto out6;
- error = tty_43_init();
+ error = kern_tty_43_init();
if (error != 0)
goto out5;
@@ -96,7 +96,7 @@ compat_43_init(void)
out3:
uipc_syscalls_43_fini();
out4:
- tty_43_fini();
+ kern_tty_43_fini();
out5:
kern_sig_43_fini();
out6:
@@ -130,7 +130,7 @@ compat_43_fini(void)
if (error != 0)
goto out6;
- error = tty_43_fini();
+ error = kern_tty_43_fini();
if (error != 0)
goto out5;
@@ -159,7 +159,7 @@ compat_43_fini(void)
out3:
kern_sig_43_init();
out4:
- tty_43_init();
+ kern_tty_43_init();
out5:
uipc_syscalls_43_init();
out6:
Index: src/sys/compat/common/compat_mod.h
diff -u src/sys/compat/common/compat_mod.h:1.2 src/sys/compat/common/compat_mod.h:1.3
--- src/sys/compat/common/compat_mod.h:1.2 Sat Jan 26 21:08:39 2019
+++ src/sys/compat/common/compat_mod.h Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_mod.h,v 1.2 2019/01/27 02:08:39 pgoyette Exp $ */
+/* $NetBSD: compat_mod.h,v 1.3 2019/01/28 15:46:49 christos Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -176,8 +176,8 @@ int kern_resource_43_init(void);
int kern_resource_43_fini(void);
int kern_sig_43_init(void);
int kern_sig_43_fini(void);
-int tty_43_init(void);
-int tty_43_fini(void);
+int kern_tty_43_init(void);
+int kern_tty_43_fini(void);
int uipc_syscalls_43_init(void);
int uipc_syscalls_43_fini(void);
int vfs_syscalls_43_init(void);
Index: src/sys/compat/common/tty_43.c
diff -u src/sys/compat/common/tty_43.c:1.31 src/sys/compat/common/tty_43.c:1.32
--- src/sys/compat/common/tty_43.c:1.31 Sat Jan 26 21:08:39 2019
+++ src/sys/compat/common/tty_43.c Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: tty_43.c,v 1.31 2019/01/27 02:08:39 pgoyette Exp $ */
+/* $NetBSD: tty_43.c,v 1.32 2019/01/28 15:46:49 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty_43.c,v 1.31 2019/01/27 02:08:39 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty_43.c,v 1.32 2019/01/28 15:46:49 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -78,9 +78,12 @@ __KERNEL_RCSID(0, "$NetBSD: tty_43.c,v 1
#include <sys/file.h>
#include <sys/kernel.h>
#include <sys/syslog.h>
+#include <sys/compat_stub.h>
+#include <sys/module_hook.h>
#include <sys/ioctl_compat.h>
#include <compat/common/compat_mod.h>
+#include <compat/sys/ttycom.h>
int ttydebug = 0;
@@ -114,11 +117,11 @@ static const int compatspcodes[] = {
static int ttcompatgetflags(struct tty *);
static void ttcompatsetflags(struct tty *, struct termios *);
static void ttcompatsetlflags(struct tty *, struct termios *);
-int ttcompat(struct tty *, u_long, void *, int, struct lwp *);
/*ARGSUSED*/
int
-ttcompat(struct tty *tp, u_long com, void *data, int flag, struct lwp *l)
+compat_43_ttioctl(struct tty *tp, u_long com, void *data, int flag,
+ struct lwp *l)
{
switch (com) {
@@ -513,15 +516,15 @@ ttcompatsetlflags(struct tty *tp, struct
}
int
-tty_43_init(void)
+kern_tty_43_init(void)
{
-
+ MODULE_SET_HOOK(compat_43_ttioctl_hook, "tty_43", compat_43_ttioctl);
return 0;
}
int
-tty_43_fini(void)
+kern_tty_43_fini(void)
{
-
+ MODULE_UNSET_HOOK(compat_43_ttioctl_hook);
return 0;
}
Index: src/sys/compat/common/tty_60.c
diff -u src/sys/compat/common/tty_60.c:1.5 src/sys/compat/common/tty_60.c:1.6
--- src/sys/compat/common/tty_60.c:1.5 Sat Jan 26 21:08:39 2019
+++ src/sys/compat/common/tty_60.c Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: tty_60.c,v 1.5 2019/01/27 02:08:39 pgoyette Exp $ */
+/* $NetBSD: tty_60.c,v 1.6 2019/01/28 15:46:49 christos 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.5 2019/01/27 02:08:39 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1.6 2019/01/28 15:46:49 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -93,21 +93,22 @@ compat_60_ptmget_ioctl(dev_t dev, u_long
* COMPAT_60 versions of ttioctl and ptmioctl.
*/
int
-compat_60_ttioctl(dev_t dev, u_long cmd, void *data, int flag,
+compat_60_ttioctl(struct tty *tp, u_long cmd, void *data, int flag,
struct lwp *l)
{
switch (cmd) {
case COMPAT_60_TIOCPTMGET:
case COMPAT_60_TIOCPTSNAME:
- return compat_60_ptmget_ioctl(dev, cmd, data, flag, l);
+ return compat_60_ptmget_ioctl(tp->t_dev, cmd, data, flag, l);
default:
return EPASSTHROUGH;
}
}
int
-compat_60_ptmioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
+compat_60_ptmioctl(dev_t dev, u_long cmd, void *data, int flag,
+ struct lwp *l)
{
switch (cmd) {
Index: src/sys/compat/sys/ttycom.h
diff -u src/sys/compat/sys/ttycom.h:1.3 src/sys/compat/sys/ttycom.h:1.4
--- src/sys/compat/sys/ttycom.h:1.3 Sat Jan 26 21:08:41 2019
+++ src/sys/compat/sys/ttycom.h Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ttycom.h,v 1.3 2019/01/27 02:08:41 pgoyette Exp $ */
+/* $NetBSD: ttycom.h,v 1.4 2019/01/28 15:46:49 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -40,6 +40,8 @@
#include <sys/types.h>
#include <sys/ioctl.h>
+struct tty;
+
#ifdef COMPAT_60
/*
@@ -57,10 +59,16 @@ struct compat_60_ptmget {
#define COMPAT_60_TIOCPTSNAME _IOR('t', 72, struct compat_60_ptmget)
#ifdef _KERNEL
-int compat_60_ttioctl(dev_t, u_long, void *, int, struct lwp *);
+int compat_60_ttioctl(struct tty *, u_long, void *, int, struct lwp *);
int compat_60_ptmioctl(dev_t, u_long, void *, int, struct lwp *);
#endif
#endif /* COMPAT_60 */
+#ifdef COMPAT_43
+#ifdef _KERNEL
+int compat_43_ttioctl(struct tty *, u_long, void *, int, struct lwp *);
+#endif
+#endif
+
#endif /* !_COMPAT_SYS_TTYCOM_H_ */
Index: src/sys/kern/compat_stub.c
diff -u src/sys/kern/compat_stub.c:1.2 src/sys/kern/compat_stub.c:1.3
--- src/sys/kern/compat_stub.c:1.2 Sat Jan 26 21:08:43 2019
+++ src/sys/kern/compat_stub.c Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.c,v 1.2 2019/01/27 02:08:43 pgoyette Exp $ */
+/* $NetBSD: compat_stub.c,v 1.3 2019/01/28 15:46:49 christos Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -166,13 +166,18 @@ struct if_43_ifioctl_hook_t if_43_ifioct
*/
struct if43_20_hook_t if43_20_hook;
+/*
+ * tty 43 ioctl compatibility
+ */
+struct compat_43_ttioctl_hook_t compat_43_ttioctl_hook;
+
/*
- * upic_syscalls_40 compatability
+ * uipc_syscalls_40 compatability
*/
struct uipc_syscalls_40_hook_t uipc_syscalls_40_hook;
/*
- * upic_syscalls_50 compatability
+ * uipc_syscalls_50 compatability
*/
struct uipc_syscalls_50_hook_t uipc_syscalls_50_hook;
Index: src/sys/kern/tty.c
diff -u src/sys/kern/tty.c:1.278 src/sys/kern/tty.c:1.279
--- src/sys/kern/tty.c:1.278 Sat Jan 26 21:08:43 2019
+++ src/sys/kern/tty.c Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: tty.c,v 1.278 2019/01/27 02:08:43 pgoyette Exp $ */
+/* $NetBSD: tty.c,v 1.279 2019/01/28 15:46:49 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.278 2019/01/27 02:08:43 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.279 2019/01/28 15:46:49 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -209,7 +209,6 @@ static void *tty_sigsih;
struct ttylist_head ttylist = TAILQ_HEAD_INITIALIZER(ttylist);
int tty_count;
kmutex_t tty_lock;
-krwlock_t ttcompat_lock;
struct ptm_pty *ptm = NULL;
@@ -1410,25 +1409,18 @@ ttioctl(struct tty *tp, u_long cmd, void
default:
break;
}
+
/* We may have to load the compat_60 module for this. */
- for (;;) {
- rw_enter(&ttcompat_lock, RW_READER);
- MODULE_CALL_HOOK(compat_60_ttioctl_hook,
- (tp->t_dev, cmd, data, flag, l), enosys(), error);
- if (error != ENOSYS) {
- break;
- }
- rw_exit(&ttcompat_lock);
- (void)module_autoload("compat_60", MODULE_CLASS_EXEC);
- rw_enter(&ttcompat_lock, RW_READER);
- MODULE_CALL_HOOK(compat_60_ttioctl_hook,
- (tp->t_dev, cmd, data, flag, l), enosys(), error);
- if (error == ENOSYS) {
- rw_exit(&ttcompat_lock);
- return EPASSTHROUGH;
- }
- }
- rw_exit(&ttcompat_lock);
+ (void)module_autoload("compat_60", MODULE_CLASS_EXEC);
+ MODULE_CALL_HOOK(compat_60_ttioctl_hook,
+ (tp, cmd, data, flag, l), enosys(), error);
+ if (error != EPASSTHROUGH)
+ return error;
+
+ /* We may have to load the compat_43 module for this. */
+ (void)module_autoload("compat_43", MODULE_CLASS_EXEC);
+ MODULE_CALL_HOOK(compat_43_ttioctl_hook,
+ (tp, cmd, data, flag, l), enosys(), error);
return error;
}
return (0);
@@ -2928,7 +2920,6 @@ tty_init(void)
{
mutex_init(&tty_lock, MUTEX_DEFAULT, IPL_VM);
- rw_init(&ttcompat_lock);
tty_sigsih = softint_establish(SOFTINT_CLOCK, ttysigintr, NULL);
KASSERT(tty_sigsih != NULL);
Index: src/sys/sys/compat_stub.h
diff -u src/sys/sys/compat_stub.h:1.2 src/sys/sys/compat_stub.h:1.3
--- src/sys/sys/compat_stub.h:1.2 Sat Jan 26 21:08:50 2019
+++ src/sys/sys/compat_stub.h Mon Jan 28 10:46:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_stub.h,v 1.2 2019/01/27 02:08:50 pgoyette Exp $ */
+/* $NetBSD: compat_stub.h,v 1.3 2019/01/28 15:46:49 christos Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -202,6 +202,14 @@ MODULE_HOOK(if_43_ifioctl_hook, int,
MODULE_HOOK(if43_20_hook, int, (u_long));
/*
+ * tty 43 ioctl compatibility
+ */
+struct tty;
+
+MODULE_HOOK(compat_43_ttioctl_hook, int,
+ (struct tty *, u_long, void *, int, struct lwp *));
+
+/*
* uipc_syscalls_40 compatability
*/
@@ -285,7 +293,7 @@ MODULE_HOOK(rnd_ioctl_50_32_hook, int, (
* Hooks for compat_60 ttioctl and ptmioctl
*/
MODULE_HOOK(compat_60_ttioctl_hook, int,
- (dev_t, u_long, void *, int, struct lwp *));
+ (struct tty *, u_long, void *, int, struct lwp *));
MODULE_HOOK(compat_60_ptmioctl_hook, int,
(dev_t, u_long, void *, int, struct lwp *));