diff options
Diffstat (limited to 'drivers/tty/n_gsm.c')
| -rw-r--r-- | drivers/tty/n_gsm.c | 11 | 
1 files changed, 5 insertions, 6 deletions
| diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 1e8e8ce55959..dcc0430a49c8 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -134,7 +134,6 @@ struct gsm_dlci {  #define DLCI_OPENING		1	/* Sending SABM not seen UA */  #define DLCI_OPEN		2	/* SABM/UA complete */  #define DLCI_CLOSING		3	/* Sending DISC not seen UA/DM */ -	struct kref ref;		/* freed from port or mux close */  	struct mutex mutex;  	/* Link layer */ @@ -1635,7 +1634,6 @@ static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)  	if (dlci == NULL)  		return NULL;  	spin_lock_init(&dlci->lock); -	kref_init(&dlci->ref);  	mutex_init(&dlci->mutex);  	dlci->fifo = &dlci->_fifo;  	if (kfifo_alloc(&dlci->_fifo, 4096, GFP_KERNEL) < 0) { @@ -1669,9 +1667,9 @@ static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)   *   *	Can sleep.   */ -static void gsm_dlci_free(struct kref *ref) +static void gsm_dlci_free(struct tty_port *port)  { -	struct gsm_dlci *dlci = container_of(ref, struct gsm_dlci, ref); +	struct gsm_dlci *dlci = container_of(port, struct gsm_dlci, port);  	del_timer_sync(&dlci->t1);  	dlci->gsm->dlci[dlci->addr] = NULL; @@ -1683,12 +1681,12 @@ static void gsm_dlci_free(struct kref *ref)  static inline void dlci_get(struct gsm_dlci *dlci)  { -	kref_get(&dlci->ref); +	tty_port_get(&dlci->port);  }  static inline void dlci_put(struct gsm_dlci *dlci)  { -	kref_put(&dlci->ref, gsm_dlci_free); +	tty_port_put(&dlci->port);  }  /** @@ -2874,6 +2872,7 @@ static void gsm_dtr_rts(struct tty_port *port, int onoff)  static const struct tty_port_operations gsm_port_ops = {  	.carrier_raised = gsm_carrier_raised,  	.dtr_rts = gsm_dtr_rts, +	.destruct = gsm_dlci_free,  };  static int gsmtty_install(struct tty_driver *driver, struct tty_struct *tty) |