Chinaunix首页 | 论坛 | 博客
  • 博客访问: 420803
  • 博文数量: 99
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 1012
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-20 16:30
个人简介

linux kernel 工程师

文章分类

全部博文(99)

文章存档

2018年(5)

2017年(12)

2016年(27)

2015年(10)

2014年(43)

2012年(2)

我的朋友

分类: LINUX

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_queue(dev, dev_ingress_queue(dev), &noop_qdisc);

 setup_timer(&dev->watchdog_timer, dev_watchdog, (unsigned long)dev);  //设置定时器
}

void dev_activate(struct net_device *dev)
{
...
 if (need_watchdog) {
  dev->trans_start = jiffies;
  dev_watchdog_up(dev);   // watchdog开始工作
 }
....
}

// 定时器回调函数
static void dev_watchdog(unsigned long arg)
{
 struct net_device *dev = (struct net_device *)arg;

 netif_tx_lock(dev)
  if (!qdisc_tx_is_noop(dev)) {
  if (netif_device_present(dev) &&
      netif_running(dev) &&
      netif_carrier_ok(dev)) {
   int some_queue_timedout = 0;
   unsigned int i;
   unsigned long trans_start;

   for (i = 0; i < dev->num_tx_queues; i++) {
    struct netdev_queue *txq;

    txq = netdev_get_tx_queue(dev, i);
    /*
     * old device drivers set dev->trans_start
     */
    trans_start = txq->trans_start ? : dev->trans_start; // 相当于trans_start = txq->trans_start ? txq->trans_start : dev->trans_start
     if (netif_xmit_stopped(txq) &&
        time_after(jiffies, (trans_start +
        dev->watchdog_timeo))) {
     some_queue_timedout = 1;
     txq->trans_timeout++;
     break;
    }
   }

   if (some_queue_timedout) {
    WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
           dev->name, netdev_drivername(dev), i);
    dev->netdev_ops->ndo_tx_timeout(dev);
   }
   if (!mod_timer(&dev->watchdog_timer,
           round_jiffies(jiffies +
           dev->watchdog_timeo)))
    dev_hold(dev);
  }
 }
 netif_tx_unlock(dev);

 dev_put(dev);
}

阅读(2621) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~