?????е?dev_tint()????????豸?????л???????е????????????dev_queue_xmit()??????????????


/*
 * This routine is called when an device driver (i.e. an
 * interface) is ready to transmit a packet.
 */
//?ú???????:?????豸???????У??????е??????????dev_queue_xmit()????????????
void dev_tint(struct device *dev)
{
 int i;
 struct sk_buff *skb;
 unsigned long flags;
 
 save_flags(flags);
 /*
  * Work the queues in priority order
  */
 
 for(i = 0;i < DEV_NUMBUFFS; i++)
 {
  /*
   * Pull packets from the queue
   */
  

  cli();
  while((skb=skb_dequeue(&dev->buffs[i]))!=NULL)
  {
   /*
    * Stop anyone freeing the buffer while we retransmit it
    */
   skb_device_lock(skb);
   restore_flags(flags);
   /*
    * Feed them to the output stage and if it fails
    * indicate they re-queue at the front.
    */
   dev_queue_xmit(skb??dev??-i - 1);//?????????????????????dev_queue_xmit()?????????<0?????pri=-pri-1=-(-i-1)-1=i??
             //???????????????????????where???????(dev_queue_xmit())??
   /*
    * If we can take no more then stop here.
    */
   if (dev->tbusy)
    return;
   cli();
  }
 }
 restore_flags(flags);
}

???????????????????????????????????????????????У??ο?????????????豸??????????????????????????????

????????????http://blog.csdn.net/yming0221/article/details/7555870