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.
This commit is contained in:
Ed Schouten 2009-05-11 18:52:46 +00:00
parent 70839889c6
commit 7fb6f68587
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=191999

View File

@ -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);