本文共 1109 字,大约阅读时间需要 3 分钟。
唤醒任务队列处理消息
static DECLARE_DELAYED_WORK(linkwatch_work, linkwatch_event);=>void linkwatch_event(struct work_struct *dummy) rtnl_lock(); __linkwatch_run_queue(time_after(linkwatch_nextevent, jiffies)); =>void __linkwatch_run_queue(int urgent_only) list_splice_init(&lweventlist, &wrk); while (!list_empty(&wrk)) dev = list_first_entry(&wrk, struct net_device, link_watch_list); list_del_init(&dev->link_watch_list); if (urgent_only && !linkwatch_urgent_event(dev)) { list_add_tail(&dev->link_watch_list, &lweventlist); continue; } linkwatch_do_dev(dev); if (!list_empty(&lweventlist)) linkwatch_schedule_work(0); rtnl_unlock();
状态变化添加消息
void netif_carrier_on(struct net_device *dev) linkwatch_fire_event(dev); =>void linkwatch_fire_event(struct net_device *dev) bool urgent = linkwatch_urgent_event(dev); linkwatch_add_event(dev); =>void linkwatch_add_event(struct net_device *dev) if (list_empty(&dev->link_watch_list)) list_add_tail(&dev->link_watch_list, &lweventlist); dev_hold(dev); linkwatch_schedule_work(urgent); if (netif_running(dev)) __netdev_watchdog_up(dev);
转载地址:http://dvlji.baihongyu.com/