linux kernel 工程师
全部博文(99)
发布时间:2014-02-17 15:41:04
// 如果长时间发送不出去,则报警// netdevice->watchdog_timer的初始化void dev_init_scheduler(struct net_device *dev){ dev->qdisc = &noop_qdisc; netdev_for_each_tx_queue(dev, dev_init_scheduler_queue, &noop_qdisc); if (dev_ingress_queue(dev)) dev_init_scheduler_qu.........【阅读全文】
发布时间:2014-02-14 10:40:48
dev_kfree_skb_any是一个释放skb的封装函数,它根据是否在irq环境下,决定直接释放skb还是等softirq去释放skbvoid dev_kfree_skb_irq(struct sk_buff *skb){ if (atomic_dec_and_test(&skb->users)) { struct softnet_data *sd; unsigned long flags; local_irq_save(.........【阅读全文】
发布时间:2014-02-14 10:36:11
工作的环境应当是进程的上下文 _dev_xmit_skb函数主要做两件事情: (1) 如果qdisc为空的,试图直接发送数据包(2)如果qdisc不空,将数据包加入qdisc,并运行qdisc 当设备进入调度队列准备传输时,qdisc_run函数就会选出下一个要传输的帧,而该函数会间接的调用相关联的队列规则dequeue函数,从对了中取出.........【阅读全文】
发布时间:2014-02-14 10:27:37
static void net_tx_action(struct softirq_action *h){ struct softnet_data *sd = &__get_cpu_var(softnet_data); //1. 释放completion_queue中的skb if (sd->completion_queue) { struct sk_buff *clist; local_irq_disable(); clist = sd->completion_.........【阅读全文】
发布时间:2014-02-14 10:01:18
register_netdevice会初始化netdev的Tx调度discipline, 缺省使用noop_qdiscregister_netdevice --->dev_init_schedulervoid dev_init_scheduler(struct net_device *dev){ dev->qdisc = &noop_qdisc; netdev_for_each_tx_queue(dev, dev_init_scheduler_queue, &noop_qdisc); if (dev_.........【阅读全文】