- 论坛徽章:
- 6
|
netif_rx(struct sk_buff *skb)------> napi_schedule(&queue->backlog); --->list_add_tail(&n->poll_list, &__get_cpu_var(softnet_data).poll_list);
我不明白的是,quque->backlog 或者说 n->poll_list 在调用list_add_tail之前是从哪里来的? 回复 22# kgatheko
queue->backlog是在网络初始化net_dev_init函数中,静态初始化的。- for_each_possible_cpu(i) {
- struct softnet_data *queue;
- queue = &per_cpu(softnet_data, i);
- skb_queue_head_init(&queue->input_pkt_queue);
- queue->completion_queue = NULL;
- INIT_LIST_HEAD(&queue->poll_list);
- queue->backlog.poll = process_backlog;
- queue->backlog.weight = weight_p;
- }
复制代码 |
|