码迷,mamicode.com
首页 > 其他好文 > 详细

dev_queue_xmit()函数返回值问题

时间:2014-10-22 12:49:51      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   ar   使用   sp   div   art   

函数  dev_queue_xmit()用于直接使用sk_buf发包,此函数有返回值,但是并不能通过

此函数返回值为0来说明包已经发送出去且可以立刻释放sk_buff内存。因为网卡发包是一个异步的过程,

比如ixgbe网卡驱动发包过程可以查看此文。因此,解决办法是在skb_buff->uers

没有减少的情况下,将其存放于链表,稍后再释放内存。比如:

 

            dev_queue_xmit(send_skb);
            if (atomic_read(&(send_skb->users)) == 1){
                kmem_cache_free(skbuff_head_cache, send_skb);
            }
            else
            {
                struct free_slab *ptr = kmem_cache_alloc(skbuff_free_cache, GFP_ATOMIC & ~__GFP_DMA);
                ptr->free_mem = send_skb;
                spin_lock(&lock);
                list_add(&ptr->list, &head_free_slab);
                spin_unlock(&lock);
            }

 

dev_queue_xmit()函数返回值问题

标签:style   blog   http   color   ar   使用   sp   div   art   

原文地址:http://www.cnblogs.com/lxgeek/p/4042706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!