Revert "dahdi_dynamic_eth: Move tx packet flushing to process context."
dahdi_dynamic now always calls the flush function in softirq context so packet flushing no longer needs to be pushed off to process context since interrupts are enabled. Signed-off-by: Shaun Ruffell <sruffell@digium.com> Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
This commit is contained in:
parent
f44b252472
commit
ef065a5e2a
@ -185,44 +185,16 @@ static void ztdeth_transmit(struct dahdi_dynamic *dyn, u8 *msg, size_t msglen)
|
|||||||
spin_unlock_irqrestore(&zlock, flags);
|
spin_unlock_irqrestore(&zlock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* dahdi_dynamic_flush_work_fn - Flush all pending transactions.
|
|
||||||
*
|
|
||||||
* This function is run in a work queue since we can't guarantee interrupts
|
|
||||||
* will be enabled when we're called, and dev_queue_xmit() requires that
|
|
||||||
* interrupts be enabled.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
|
|
||||||
static void dahdi_dynamic_flush_work_fn(void *data)
|
|
||||||
#else
|
|
||||||
static void dahdi_dynamic_flush_work_fn(struct work_struct *work)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
struct sk_buff *skb;
|
|
||||||
/* Handle all transmissions now */
|
|
||||||
while ((skb = skb_dequeue(&skbs))) {
|
|
||||||
dev_queue_xmit(skb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
|
|
||||||
static DECLARE_WORK(dahdi_dynamic_eth_flush_work,
|
|
||||||
dahdi_dynamic_flush_work_fn, NULL);
|
|
||||||
#else
|
|
||||||
static DECLARE_WORK(dahdi_dynamic_eth_flush_work,
|
|
||||||
dahdi_dynamic_flush_work_fn);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ztdeth_flush - Flush all pending transactions.
|
* ztdeth_flush - Flush all pending transactions.
|
||||||
*
|
*
|
||||||
* This function is called in interrupt context while processing the master
|
* This function is always called in softirq context.
|
||||||
* span.
|
|
||||||
*/
|
*/
|
||||||
static int ztdeth_flush(void)
|
static int ztdeth_flush(void)
|
||||||
{
|
{
|
||||||
schedule_work(&dahdi_dynamic_eth_flush_work);
|
struct sk_buff *skb;
|
||||||
|
while ((skb = skb_dequeue(&skbs)))
|
||||||
|
dev_queue_xmit(skb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,11 +418,6 @@ static int __init ztdeth_init(void)
|
|||||||
|
|
||||||
static void __exit ztdeth_exit(void)
|
static void __exit ztdeth_exit(void)
|
||||||
{
|
{
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22)
|
|
||||||
flush_scheduled_work();
|
|
||||||
#else
|
|
||||||
cancel_work_sync(&dahdi_dynamic_eth_flush_work);
|
|
||||||
#endif
|
|
||||||
dahdi_dynamic_unregister_driver(&ztd_eth);
|
dahdi_dynamic_unregister_driver(&ztd_eth);
|
||||||
unregister_netdevice_notifier(&ztdeth_nblock);
|
unregister_netdevice_notifier(&ztdeth_nblock);
|
||||||
dev_remove_pack(&ztdeth_ptype);
|
dev_remove_pack(&ztdeth_ptype);
|
||||||
|
Loading…
Reference in New Issue
Block a user