diff options
author | ed <ed@FreeBSD.org> | 2009-05-11 18:52:46 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2009-05-11 18:52:46 +0000 |
commit | a5fc8eddaa79c5a69aaf8badb9c4fd1a82fb11c2 (patch) | |
tree | 2442b7bf3363009cefac2412000d570c50d51c59 /sys/dev/snp | |
parent | 3eac2f5900ac1e8162325e74eea1709b699c682e (diff) | |
download | FreeBSD-src-a5fc8eddaa79c5a69aaf8badb9c4fd1a82fb11c2.zip FreeBSD-src-a5fc8eddaa79c5a69aaf8badb9c4fd1a82fb11c2.tar.gz |
Add macros around the sx operations in snp(4).
As an experiment, I changed snp(4) to use a mutex instead of an sx lock.
We can't enable this right now, because Syscons still picks up Giant.
It's nice to already have the framework there.
Diffstat (limited to 'sys/dev/snp')
-rw-r--r-- | sys/dev/snp/snp.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/sys/dev/snp/snp.c b/sys/dev/snp/snp.c index 4a48037..52c5a02 100644 --- a/sys/dev/snp/snp.c +++ b/sys/dev/snp/snp.c @@ -43,11 +43,22 @@ __FBSDID("$FreeBSD$"); #include <sys/uio.h> static struct cdev *snp_dev; +static MALLOC_DEFINE(M_SNP, "snp", "tty snoop device"); + /* XXX: should be mtx, but TTY can be locked by Giant. */ +#if 0 +static struct mtx snp_register_lock; +MTX_SYSINIT(snp_register_lock, &snp_register_lock, + "tty snoop registration", MTX_DEF); +#define SNP_LOCK() mtx_lock(&snp_register_lock) +#define SNP_UNLOCK() mtx_unlock(&snp_register_lock) +#else static struct sx snp_register_lock; SX_SYSINIT(snp_register_lock, &snp_register_lock, "tty snoop registration"); -static MALLOC_DEFINE(M_SNP, "snp", "tty snoop device"); +#define SNP_LOCK() sx_xlock(&snp_register_lock) +#define SNP_UNLOCK() sx_xunlock(&snp_register_lock) +#endif /* * There is no need to have a big input buffer. In most typical setups, @@ -241,14 +252,14 @@ snp_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags, switch (cmd) { case SNPSTTY: /* Bind TTY to snoop instance. */ - sx_xlock(&snp_register_lock); + SNP_LOCK(); if (ss->snp_tty != NULL) { - sx_xunlock(&snp_register_lock); + SNP_UNLOCK(); return (EBUSY); } error = ttyhook_register(&ss->snp_tty, td->td_proc, *(int *)data, &snp_hook, ss); - sx_xunlock(&snp_register_lock); + SNP_UNLOCK(); if (error != 0) return (error); |