|
@@ -77,8 +77,6 @@ struct ackqueue_entry {
|
|
|
};
|
|
|
|
|
|
struct capiminor {
|
|
|
- struct kref kref;
|
|
|
-
|
|
|
unsigned int minor;
|
|
|
|
|
|
struct capi20_appl *ap;
|
|
@@ -190,7 +188,20 @@ static void capiminor_del_all_ack(struct capiminor *mp)
|
|
|
|
|
|
/* -------- struct capiminor ---------------------------------------- */
|
|
|
|
|
|
-static const struct tty_port_operations capiminor_port_ops; /* we have none */
|
|
|
+static void capiminor_destroy(struct tty_port *port)
|
|
|
+{
|
|
|
+ struct capiminor *mp = container_of(port, struct capiminor, port);
|
|
|
+
|
|
|
+ kfree_skb(mp->outskb);
|
|
|
+ skb_queue_purge(&mp->inqueue);
|
|
|
+ skb_queue_purge(&mp->outqueue);
|
|
|
+ capiminor_del_all_ack(mp);
|
|
|
+ kfree(mp);
|
|
|
+}
|
|
|
+
|
|
|
+static const struct tty_port_operations capiminor_port_ops = {
|
|
|
+ .destruct = capiminor_destroy,
|
|
|
+};
|
|
|
|
|
|
static struct capiminor *capiminor_alloc(struct capi20_appl *ap, u32 ncci)
|
|
|
{
|
|
@@ -204,8 +215,6 @@ static struct capiminor *capiminor_alloc(struct capi20_appl *ap, u32 ncci)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
- kref_init(&mp->kref);
|
|
|
-
|
|
|
mp->ap = ap;
|
|
|
mp->ncci = ncci;
|
|
|
INIT_LIST_HEAD(&mp->ackqueue);
|
|
@@ -247,21 +256,10 @@ err_out2:
|
|
|
spin_unlock(&capiminors_lock);
|
|
|
|
|
|
err_out1:
|
|
|
- kfree(mp);
|
|
|
+ tty_port_put(&mp->port);
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-static void capiminor_destroy(struct kref *kref)
|
|
|
-{
|
|
|
- struct capiminor *mp = container_of(kref, struct capiminor, kref);
|
|
|
-
|
|
|
- kfree_skb(mp->outskb);
|
|
|
- skb_queue_purge(&mp->inqueue);
|
|
|
- skb_queue_purge(&mp->outqueue);
|
|
|
- capiminor_del_all_ack(mp);
|
|
|
- kfree(mp);
|
|
|
-}
|
|
|
-
|
|
|
static struct capiminor *capiminor_get(unsigned int minor)
|
|
|
{
|
|
|
struct capiminor *mp;
|
|
@@ -269,7 +267,7 @@ static struct capiminor *capiminor_get(unsigned int minor)
|
|
|
spin_lock(&capiminors_lock);
|
|
|
mp = capiminors[minor];
|
|
|
if (mp)
|
|
|
- kref_get(&mp->kref);
|
|
|
+ tty_port_get(&mp->port);
|
|
|
spin_unlock(&capiminors_lock);
|
|
|
|
|
|
return mp;
|
|
@@ -277,7 +275,7 @@ static struct capiminor *capiminor_get(unsigned int minor)
|
|
|
|
|
|
static inline void capiminor_put(struct capiminor *mp)
|
|
|
{
|
|
|
- kref_put(&mp->kref, capiminor_destroy);
|
|
|
+ tty_port_put(&mp->port);
|
|
|
}
|
|
|
|
|
|
static void capiminor_free(struct capiminor *mp)
|