b44: the poll handler b44_poll must not enable IRQ unconditionally
[linux-2.6-microblaze.git] / drivers / net / ppp_async.c
index 1fd319b..6de8399 100644 (file)
@@ -132,15 +132,13 @@ static DEFINE_RWLOCK(disc_data_lock);
 
 static struct asyncppp *ap_get(struct tty_struct *tty)
 {
-       unsigned long flags;
        struct asyncppp *ap;
 
-       read_lock_irqsave(&disc_data_lock, flags);
+       read_lock(&disc_data_lock);
        ap = tty->disc_data;
        if (ap != NULL)
                atomic_inc(&ap->refcnt);
-       read_unlock_irqrestore(&disc_data_lock, flags);
-
+       read_unlock(&disc_data_lock);
        return ap;
 }
 
@@ -217,13 +215,12 @@ ppp_asynctty_open(struct tty_struct *tty)
 static void
 ppp_asynctty_close(struct tty_struct *tty)
 {
-       unsigned long flags;
        struct asyncppp *ap;
 
-       write_lock_irqsave(&disc_data_lock, flags);
+       write_lock_irq(&disc_data_lock);
        ap = tty->disc_data;
        tty->disc_data = NULL;
-       write_unlock_irqrestore(&disc_data_lock, flags);
+       write_unlock_irq(&disc_data_lock);
        if (!ap)
                return;
 
@@ -359,6 +356,7 @@ ppp_asynctty_receive(struct tty_struct *tty, const unsigned char *buf,
        if (!skb_queue_empty(&ap->rqueue))
                tasklet_schedule(&ap->tsk);
        ap_put(ap);
+       tty_unthrottle(tty);
 }
 
 static void