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:
parent
3eac2f5900
commit
a5fc8eddaa
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user