Как получить подробную информацию о rte_pci_device из rte_device в dpdk 18.08 - PullRequest
0 голосов
/ 05 января 2019

Я хочу сравнить информацию об обнаруженном устройстве (dev_info типа struct rte_eth_dev_info dev_info), связанную с каждым портом, с настроенными адресами устройства pci (типа struct rte_pci_addr pciaddr).

 for (port = 0; port < nb_sys_ports; port++) {
       rte_eth_dev_info_get(port, &dev_info);                                                         
 }  

Но в struct struct rte_eth_dev_info поле rte_pci_device * pci_dev было заменено полем struct rte_device * device. Итак, как мне получить подробную информацию о rte_pci_device из rte_device.

1 Ответ

0 голосов
/ 05 января 2019

DPDK теперь поддерживает шины не-PCI, так что это немного сложнее. Но все же примеров мало. Вот фрагмент из Ethtool :

struct rte_pci_device *pci_dev;

rte_eth_dev_info_get(port_id, &dev_info);

if (dev_info.device)
    bus = rte_bus_find_by_device(dev_info.device);
if (bus && !strcmp(bus->name, "pci")) {
    pci_dev = RTE_DEV_TO_PCI(dev_info.device);
    snprintf(drvinfo->bus_info, sizeof(drvinfo->bus_info),
        "%04x:%02x:%02x.%x",
        pci_dev->addr.domain, pci_dev->addr.bus,
        pci_dev->addr.devid, pci_dev->addr.function);
}

По сути, мы получаем шину порта DPDK. Если это PCI, можно безопасно использовать макрос RTE_DEV_TO_PCI(). Макрос возвращает указатель на struct rte_pci_device, который имеет адрес PCI.

...