该函数通过加载队列和端口来初始化一个DPDK网络设备线程。下面是代码的逐步解释:
定义函数
pmd_load_queues_and_ports,参数为指向dp_netdev_pmd_thread类型的指针pmd和指向polled_queue类型指针的指针ppoll_list。定义结构体指针
poll_list并将其初始化为*ppoll_list(即该函数的输入参数)。定义结构体指针
poll和整型变量i。上锁
pmd->port_mutex,以确保在操作端口时不会发生冲突。调用
xrealloc函数对poll_list进行重新分配内存的操作,使其大小等于pmd->poll_list中元素数量的大小乘以sizeof *poll_list。返回值为重新分配后的poll_list。初始化变量
i为0。使用宏
HMAP_FOR_EACH遍历pmd->poll_list中的每个元素(poll),使用node作为迭代器。对于每个
poll,将其相关信息赋值给poll_list数组的第i个元素:poll_list[i].rxq为poll->rxq,poll_list[i].port_no为poll->rxq->port->port_no,poll_list[i].emc_enabled为poll->rxq->port->emc_enabled,poll_list[i].rxq_enabled为netdev_rxq_enabled(poll->rxq->rx),poll_list[i].change_seq为netdev_get_change_seq(poll->rxq->port->netdev)。调用函数
pmd_load_cached_ports(pmd),该函数将缓存的端口添加到pmd->port_list中。解锁
pmd->port_mutex。将
poll_list赋值给*ppoll_list,即将更新后的队列列表返回给调用者。返回队列数目
i。




