Softnet_data

Softnet_data的初始化:
每个CPU的softnet_data是在net_dev_init中初始化的,代码如下:
 1 "/net/core/dev.c" "static int __init net_dev_init(void)"
 2 for_each_possible_cpu(i) {
 3 struct softnet_data *queue; 
 5 queue = &per_cpu(softnet_data, i);
 6 skb_queue_head_init(&queue->input_pkt_queue);
 7 queue->completion_queue = NULL;
 8 INIT_LIST_HEAD(&queue->poll_list);
 9 
10 queue->backlog.poll = process_backlog;
11 queue->backlog.weight = weight_p;
12 queue->backlog.gro_list = NULL;
13 queue->backlog.gro_count = 0;
14 }
15 
16 "include/linux/netdevice.h"
17 struct softnet_data
18 {
19         struct Qdisc            *output_queue;
20         struct sk_buff_head     input_pkt_queue;
21         struct list_head        poll_list;
22         struct sk_buff          *completion_queue;
23 
24         struct napi_struct      backlog;
25 };
26 
27 struct napi_struct {
28         /* The poll_list must only be managed by the entity which
29          * changes the state of the NAPI_STATE_SCHED bit.  This means
30          * whoever atomically sets that bit can add this napi_struct
31          * to the per-cpu poll_list, and whoever clears that bit
32          * can remove from the list right before clearing the bit.
33          */
34         struct list_head        poll_list;
35 
36         unsigned long           state;
37         int                     weight;
38         int                     (*poll)(struct napi_struct *, int);
39 #ifdef CONFIG_NETPOLL
40         spinlock_t              poll_lock;
41         int                     poll_owner;
42 #endif
43 
44         unsigned int            gro_count;
45 
46         struct net_device       *dev;
47         struct list_head        dev_list;
48         struct sk_buff          *gro_list;
49         struct sk_buff          *skb;
50 };

 

posted @ 2013-08-02 11:10  laughingLau  阅读(1047)  评论(0编辑  收藏  举报