|
@@ -45,7 +45,6 @@ MODULE_DESCRIPTION("CAPI4Linux: Userspace /dev/capi20 interface");
|
|
|
MODULE_AUTHOR("Carsten Paeth");
|
|
|
MODULE_LICENSE("GPL");
|
|
|
|
|
|
-#undef _DEBUG_REFCOUNT /* alloc/free and open/close debug */
|
|
|
#undef _DEBUG_TTYFUNCS /* call to tty_driver */
|
|
|
#undef _DEBUG_DATAFLOW /* data flow */
|
|
|
|
|
@@ -97,7 +96,6 @@ struct capiminor {
|
|
|
int ttyinstop;
|
|
|
int ttyoutstop;
|
|
|
struct sk_buff *ttyskb;
|
|
|
- atomic_t ttyopencount;
|
|
|
|
|
|
struct sk_buff_head inqueue;
|
|
|
int inbytes;
|
|
@@ -230,7 +228,6 @@ static struct capiminor *capiminor_alloc(struct capi20_appl *ap, u32 ncci)
|
|
|
mp->ap = ap;
|
|
|
mp->ncci = ncci;
|
|
|
mp->msgid = 0;
|
|
|
- atomic_set(&mp->ttyopencount,0);
|
|
|
INIT_LIST_HEAD(&mp->ackqueue);
|
|
|
spin_lock_init(&mp->ackqlock);
|
|
|
|
|
@@ -350,8 +347,17 @@ static void capincci_free_minor(struct capincci *np)
|
|
|
static inline unsigned int capincci_minor_opencount(struct capincci *np)
|
|
|
{
|
|
|
struct capiminor *mp = np->minorp;
|
|
|
+ unsigned int count = 0;
|
|
|
+ struct tty_struct *tty;
|
|
|
|
|
|
- return mp ? atomic_read(&mp->ttyopencount) : 0;
|
|
|
+ if (mp) {
|
|
|
+ tty = tty_port_tty_get(&mp->port);
|
|
|
+ if (tty) {
|
|
|
+ count = tty->count;
|
|
|
+ tty_kref_put(tty);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
}
|
|
|
|
|
|
#else /* !CONFIG_ISDN_CAPI_MIDDLEWARE */
|
|
@@ -1054,10 +1060,6 @@ static int capinc_tty_open(struct tty_struct *tty, struct file *filp)
|
|
|
return err;
|
|
|
|
|
|
spin_lock_irqsave(&workaround_lock, flags);
|
|
|
- atomic_inc(&mp->ttyopencount);
|
|
|
-#ifdef _DEBUG_REFCOUNT
|
|
|
- printk(KERN_DEBUG "capinc_tty_open ocount=%d\n", atomic_read(&mp->ttyopencount));
|
|
|
-#endif
|
|
|
handle_minor_recv(mp);
|
|
|
spin_unlock_irqrestore(&workaround_lock, flags);
|
|
|
return 0;
|
|
@@ -1067,18 +1069,6 @@ static void capinc_tty_close(struct tty_struct *tty, struct file *filp)
|
|
|
{
|
|
|
struct capiminor *mp = tty->driver_data;
|
|
|
|
|
|
- if (atomic_dec_and_test(&mp->ttyopencount)) {
|
|
|
-#ifdef _DEBUG_REFCOUNT
|
|
|
- printk(KERN_DEBUG "capinc_tty_close lastclose\n");
|
|
|
-#endif
|
|
|
- }
|
|
|
-#ifdef _DEBUG_REFCOUNT
|
|
|
- printk(KERN_DEBUG "capinc_tty_close ocount=%d\n", atomic_read(&mp->ttyopencount));
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifdef _DEBUG_REFCOUNT
|
|
|
- printk(KERN_DEBUG "capinc_tty_close\n");
|
|
|
-#endif
|
|
|
tty_port_close(&mp->port, tty, filp);
|
|
|
}
|
|
|
|