net/irda/ircomm_tty.c: Use flip buffers to deliver data
[deliverable/linux.git] / net / irda / ircomm / ircomm_tty.c
index a39cca8331dfdf16c0d8cea14682e93472a75ce1..b3cc8b3989a9cf17d032150d201e8ab90f3bd2c7 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/seq_file.h>
 #include <linux/termios.h>
 #include <linux/tty.h>
+#include <linux/tty_flip.h>
 #include <linux/interrupt.h>
 #include <linux/device.h>              /* for MODULE_ALIAS_CHARDEV_MAJOR */
 
@@ -1132,7 +1133,6 @@ static int ircomm_tty_data_indication(void *instance, void *sap,
                                      struct sk_buff *skb)
 {
        struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance;
-       struct tty_ldisc *ld;
 
        IRDA_DEBUG(2, "%s()\n", __func__ );
 
@@ -1161,15 +1161,11 @@ static int ircomm_tty_data_indication(void *instance, void *sap,
        }
 
        /*
-        * Just give it over to the line discipline. There is no need to
-        * involve the flip buffers, since we are not running in an interrupt
-        * handler
+        * Use flip buffer functions since the code may be called from interrupt
+        * context
         */
-
-       ld = tty_ldisc_ref(self->tty);
-       if (ld)
-               ld->ops->receive_buf(self->tty, skb->data, NULL, skb->len);
-       tty_ldisc_deref(ld);
+       tty_insert_flip_string(self->tty, skb->data, skb->len);
+       tty_flip_buffer_push(self->tty);
 
        /* No need to kfree_skb - see ircomm_ttp_data_indication() */
 
This page took 0.02558 seconds and 5 git commands to generate.