{
atomic_dec(&idev->frame_cnt);
- if (!(isdn_net_device_busy(idev))) {
- if (!skb_queue_empty(&idev->super_tx_queue)) {
- queue_task(&idev->tqueue, &tq_immediate);
- mark_bh(IMMEDIATE_BH);
- } else {
+ if (!isdn_net_device_busy(idev)) {
+ if (!skb_queue_empty(&idev->super_tx_queue))
+ tasklet_schedule(&idev->tlet);
+ else
isdn_net_dev_wake_queue(idev);
- }
}
}
// we can't grab the lock from irq context,
// so we just queue the packet
skb_queue_tail(&idev->super_tx_queue, skb);
- queue_task(&idev->tqueue, &tq_immediate);
- mark_bh(IMMEDIATE_BH);
+ tasklet_schedule(&idev->tlet);
return;
}
spin_unlock_bh(&idev->xmit_lock);
}
-/*
- * called from tq_immediate
- */
-static void isdn_net_softint(void *private)
+static void isdn_net_tasklet(unsigned long data)
{
- isdn_net_dev *idev = private;
+ isdn_net_dev *idev = (isdn_net_dev *) data;
struct sk_buff *skb;
spin_lock_bh(&idev->xmit_lock);
netdev->next = netdev;
netdev->local.netdev = netdev;
- netdev->tqueue.sync = 0;
- netdev->tqueue.routine = isdn_net_softint;
- netdev->tqueue.data = netdev;
+ tasklet_init(&netdev->tlet, isdn_net_tasklet, (unsigned long) netdev);
spin_lock_init(&netdev->xmit_lock);
netdev->isdn_slot = -1;
#endif
if (info->emu.mdmreg[REG_CPPP] & BIT_CPPP)
tty->flip.flag_buf_ptr[len - 1] = 0xff;
- queue_task(&tty->flip.tqueue, &tq_timer);
+ schedule_task(&tty->flip.tqueue);
kfree_skb(skb);
return 1;
}
tty->flip.flag_buf_ptr += r;
tty->flip.char_buf_ptr += r;
if (r)
- queue_task(&tty->flip.tqueue, &tq_timer);
+ schedule_task(&tty->flip.tqueue);
restore_flags(flags);
}
} else
} else {
restore_flags(flags);
- queue_task(&tty->flip.tqueue, &tq_timer);
+ schedule_task(&tty->flip.tqueue);
}
}
/* be transmitted asap */
atomic_t frame_cnt; /* number of frames currently */
/* queued in HL driver */
- struct tq_struct tqueue;
+ struct tasklet_struct tlet;
isdn_net_local *master; /* Ptr to Master device for slaves */
struct isdn_net_dev_s *slave; /* Ptr to Slave device for masters */