On Tue, Mar 27, 2018 at 06:40:52PM +0100, Ferruh Yigit wrote: > Public struct rte_eth_dev_info has a "struct rte_pci_device" field in it > although it is common for all ethdev in all buses. > > Replacing pci specific struct with generic device struct and updating > places that are using pci device in a way to get this information from > generic device. > > Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> > --- > Cc: Pablo de Lara <pablo.de.lara.gua...@intel.com> > > There is no deprecation notice sent for this update but in this release > ethdev info already updated and ABI already broken, it can be good > opportunity for this update. > --- > app/test-pmd/config.c | 11 ++++++++++- > app/test-pmd/testpmd.h | 24 ++++++++++++++++++------ > drivers/net/af_packet/rte_eth_af_packet.c | 1 + > drivers/net/ark/ark_ethdev.c | 4 +++- > drivers/net/avf/avf_ethdev.c | 2 +- > drivers/net/avp/avp_ethdev.c | 2 +- > drivers/net/bnx2x/bnx2x_ethdev.c | 2 +- > drivers/net/bnxt/bnxt_ethdev.c | 2 +- > drivers/net/cxgbe/cxgbe_ethdev.c | 2 +- > drivers/net/dpaa/dpaa_ethdev.c | 1 + > drivers/net/dpaa2/dpaa2_ethdev.c | 1 + > drivers/net/e1000/em_ethdev.c | 2 +- > drivers/net/e1000/igb_ethdev.c | 4 ++-- > drivers/net/ena/ena_ethdev.c | 2 +- > drivers/net/enic/enic_ethdev.c | 2 +- > drivers/net/fm10k/fm10k_ethdev.c | 2 +- > drivers/net/i40e/i40e_ethdev.c | 2 +- > drivers/net/i40e/i40e_ethdev_vf.c | 2 +- > drivers/net/ixgbe/ixgbe_ethdev.c | 4 ++-- > drivers/net/kni/rte_eth_kni.c | 2 +- > drivers/net/liquidio/lio_ethdev.c | 2 +- > drivers/net/mlx4/mlx4_ethdev.c | 2 +- > drivers/net/mlx5/mlx5_ethdev.c | 2 +- > drivers/net/mrvl/mrvl_ethdev.c | 2 ++ > drivers/net/nfp/nfp_net.c | 2 +- > drivers/net/null/rte_eth_null.c | 1 + > drivers/net/octeontx/octeontx_ethdev.c | 2 +- > drivers/net/pcap/rte_eth_pcap.c | 1 + > drivers/net/qede/qede_ethdev.c | 2 +- > drivers/net/ring/rte_eth_ring.c | 1 + > drivers/net/sfc/sfc_ethdev.c | 2 +- > drivers/net/szedata2/rte_eth_szedata2.c | 2 +- > drivers/net/tap/rte_eth_tap.c | 2 +- > drivers/net/thunderx/nicvf_ethdev.c | 2 +- > drivers/net/virtio/virtio_ethdev.c | 2 +- > drivers/net/vmxnet3/vmxnet3_ethdev.c | 2 +- > examples/ethtool/lib/rte_ethtool.c | 15 +++++++++------ > examples/ip_pipeline/init.c | 10 ++++++++-- > examples/kni/main.c | 10 +++++++--- > lib/librte_ether/rte_ethdev.h | 2 +- > test/test/test_kni.c | 28 ++++++++++++++++++++++------ > 41 files changed, 114 insertions(+), 54 deletions(-) >
[...] > diff --git a/drivers/net/mrvl/mrvl_ethdev.c b/drivers/net/mrvl/mrvl_ethdev.c > index c0483b912..d46c65255 100644 > --- a/drivers/net/mrvl/mrvl_ethdev.c > +++ b/drivers/net/mrvl/mrvl_ethdev.c > @@ -1314,6 +1314,8 @@ static void > mrvl_dev_infos_get(struct rte_eth_dev *dev __rte_unused, > struct rte_eth_dev_info *info) > { > + info->device = dev->device; Since dev is used perhaps __rte_unused can be dropped. Besides that, Acked-by: Tomasz Duszynski <t...@semihalf.com> > + > info->speed_capa = ETH_LINK_SPEED_10M | > ETH_LINK_SPEED_100M | > ETH_LINK_SPEED_1G | > diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c > index 8591c7de0..add00baf9 100644 > --- a/drivers/net/nfp/nfp_net.c > +++ b/drivers/net/nfp/nfp_net.c > @@ -1159,7 +1159,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct > rte_eth_dev_info *dev_info) > > hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > - dev_info->pci_dev = RTE_ETH_DEV_TO_PCI(dev); > + dev_info->device = dev->device; > dev_info->max_rx_queues = (uint16_t)hw->max_rx_queues; > dev_info->max_tx_queues = (uint16_t)hw->max_tx_queues; > dev_info->min_rx_bufsize = ETHER_MIN_MTU; > diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c > index 73fe8b04a..7506f77f6 100644 > --- a/drivers/net/null/rte_eth_null.c > +++ b/drivers/net/null/rte_eth_null.c > @@ -292,6 +292,7 @@ eth_dev_info(struct rte_eth_dev *dev, > return; > > internals = dev->data->dev_private; > + dev_info->device = dev->device; > dev_info->max_mac_addrs = 1; > dev_info->max_rx_pktlen = (uint32_t)-1; > dev_info->max_rx_queues = RTE_DIM(internals->rx_null_queues); > diff --git a/drivers/net/octeontx/octeontx_ethdev.c > b/drivers/net/octeontx/octeontx_ethdev.c > index 90dd249a6..edd4dd3ff 100644 > --- a/drivers/net/octeontx/octeontx_ethdev.c > +++ b/drivers/net/octeontx/octeontx_ethdev.c > @@ -611,7 +611,7 @@ octeontx_dev_info(struct rte_eth_dev *dev, > dev_info->max_rx_queues = 1; > dev_info->max_tx_queues = PKO_MAX_NUM_DQ; > dev_info->min_rx_bufsize = 0; > - dev_info->pci_dev = NULL; > + dev_info->device = NULL; > > dev_info->default_rxconf = (struct rte_eth_rxconf) { > .rx_free_thresh = 0, > diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c > index c1571e1fe..2e739a24e 100644 > --- a/drivers/net/pcap/rte_eth_pcap.c > +++ b/drivers/net/pcap/rte_eth_pcap.c > @@ -526,6 +526,7 @@ eth_dev_info(struct rte_eth_dev *dev, > { > struct pmd_internals *internals = dev->data->dev_private; > > + dev_info->device = dev->device; > dev_info->if_index = internals->if_index; > dev_info->max_mac_addrs = 1; > dev_info->max_rx_pktlen = (uint32_t) -1; > diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c > index a91f43683..59d604b78 100644 > --- a/drivers/net/qede/qede_ethdev.c > +++ b/drivers/net/qede/qede_ethdev.c > @@ -1515,7 +1515,7 @@ qede_dev_info_get(struct rte_eth_dev *eth_dev, > > PMD_INIT_FUNC_TRACE(edev); > > - dev_info->pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); > + dev_info->device = eth_dev->device; > dev_info->min_rx_bufsize = (uint32_t)QEDE_MIN_RX_BUFF_SIZE; > dev_info->max_rx_pktlen = (uint32_t)ETH_TX_MAX_NON_LSO_PKT_LEN; > dev_info->rx_desc_lim = qede_rx_desc_lim; > diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c > index df13c44be..14274fa36 100644 > --- a/drivers/net/ring/rte_eth_ring.c > +++ b/drivers/net/ring/rte_eth_ring.c > @@ -153,6 +153,7 @@ eth_dev_info(struct rte_eth_dev *dev, > struct rte_eth_dev_info *dev_info) > { > struct pmd_internals *internals = dev->data->dev_private; > + dev_info->device = dev->device; > dev_info->max_mac_addrs = 1; > dev_info->max_rx_pktlen = (uint32_t)-1; > dev_info->max_rx_queues = (uint16_t)internals->max_rx_queues; > diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c > index f16d52081..2c0ad7ecf 100644 > --- a/drivers/net/sfc/sfc_ethdev.c > +++ b/drivers/net/sfc/sfc_ethdev.c > @@ -89,7 +89,7 @@ sfc_dev_infos_get(struct rte_eth_dev *dev, struct > rte_eth_dev_info *dev_info) > > sfc_log_init(sa, "entry"); > > - dev_info->pci_dev = RTE_ETH_DEV_TO_PCI(dev); > + dev_info->device = dev->device; > dev_info->max_rx_pktlen = EFX_MAC_PDU_MAX; > > /* Autonegotiation may be disabled */ > diff --git a/drivers/net/szedata2/rte_eth_szedata2.c > b/drivers/net/szedata2/rte_eth_szedata2.c > index 1d02aee6f..4157cc88f 100644 > --- a/drivers/net/szedata2/rte_eth_szedata2.c > +++ b/drivers/net/szedata2/rte_eth_szedata2.c > @@ -1031,7 +1031,7 @@ eth_dev_info(struct rte_eth_dev *dev, > struct rte_eth_dev_info *dev_info) > { > struct pmd_internals *internals = dev->data->dev_private; > - dev_info->pci_dev = RTE_ETH_DEV_TO_PCI(dev); > + dev_info->device = dev->device; > dev_info->if_index = 0; > dev_info->max_mac_addrs = 1; > dev_info->max_rx_pktlen = (uint32_t)-1; > diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c > index 67ed9d466..23843e32e 100644 > --- a/drivers/net/tap/rte_eth_tap.c > +++ b/drivers/net/tap/rte_eth_tap.c > @@ -688,7 +688,7 @@ tap_dev_info(struct rte_eth_dev *dev, struct > rte_eth_dev_info *dev_info) > dev_info->max_rx_queues = RTE_PMD_TAP_MAX_QUEUES; > dev_info->max_tx_queues = RTE_PMD_TAP_MAX_QUEUES; > dev_info->min_rx_bufsize = 0; > - dev_info->pci_dev = NULL; > + dev_info->device = NULL; > dev_info->speed_capa = tap_dev_speed_capa(); > dev_info->rx_offload_capa = tap_rx_offload_get_port_capa(); > dev_info->tx_offload_capa = tap_tx_offload_get_port_capa(); > diff --git a/drivers/net/thunderx/nicvf_ethdev.c > b/drivers/net/thunderx/nicvf_ethdev.c > index 067f2243b..f9e4a5810 100644 > --- a/drivers/net/thunderx/nicvf_ethdev.c > +++ b/drivers/net/thunderx/nicvf_ethdev.c > @@ -1400,7 +1400,7 @@ nicvf_dev_info_get(struct rte_eth_dev *dev, struct > rte_eth_dev_info *dev_info) > > PMD_INIT_FUNC_TRACE(); > > - dev_info->pci_dev = RTE_ETH_DEV_TO_PCI(dev); > + dev_info->device = dev->device; > > /* Autonegotiation may be disabled */ > dev_info->speed_capa = ETH_LINK_SPEED_FIXED; > diff --git a/drivers/net/virtio/virtio_ethdev.c > b/drivers/net/virtio/virtio_ethdev.c > index 4dddb1c80..c623ce186 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -2057,7 +2057,7 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct > rte_eth_dev_info *dev_info) > > dev_info->speed_capa = ETH_LINK_SPEED_10G; /* fake value */ > > - dev_info->pci_dev = dev->device ? RTE_ETH_DEV_TO_PCI(dev) : NULL; > + dev_info->device = dev->device; > dev_info->max_rx_queues = > RTE_MIN(hw->max_queue_pairs, VIRTIO_MAX_RX_QUEUES); > dev_info->max_tx_queues = > diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c > b/drivers/net/vmxnet3/vmxnet3_ethdev.c > index 426008722..220668e19 100644 > --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c > +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c > @@ -1025,7 +1025,7 @@ static void > vmxnet3_dev_info_get(struct rte_eth_dev *dev, > struct rte_eth_dev_info *dev_info) > { > - dev_info->pci_dev = RTE_ETH_DEV_TO_PCI(dev); > + dev_info->device = dev->device; > > dev_info->max_rx_queues = VMXNET3_MAX_RX_QUEUES; > dev_info->max_tx_queues = VMXNET3_MAX_TX_QUEUES; > diff --git a/examples/ethtool/lib/rte_ethtool.c > b/examples/ethtool/lib/rte_ethtool.c > index 90dfbb739..4c770ec6a 100644 > --- a/examples/ethtool/lib/rte_ethtool.c > +++ b/examples/ethtool/lib/rte_ethtool.c > @@ -22,6 +22,8 @@ rte_ethtool_get_drvinfo(uint16_t port_id, struct > ethtool_drvinfo *drvinfo) > { > struct rte_eth_dev_info dev_info; > struct rte_dev_reg_info reg_info; > + const struct rte_pci_device *pci_dev; > + const struct rte_bus *bus; > int n; > int ret; > > @@ -46,15 +48,16 @@ rte_ethtool_get_drvinfo(uint16_t port_id, struct > ethtool_drvinfo *drvinfo) > snprintf(drvinfo->version, sizeof(drvinfo->version), "%s", > rte_version()); > /* TODO: replace bus_info by rte_devargs.name */ > - if (dev_info.pci_dev) > + 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", > - dev_info.pci_dev->addr.domain, > - dev_info.pci_dev->addr.bus, > - dev_info.pci_dev->addr.devid, > - dev_info.pci_dev->addr.function); > - else > + pci_dev->addr.domain, pci_dev->addr.bus, > + pci_dev->addr.devid, pci_dev->addr.function); > + } else { > snprintf(drvinfo->bus_info, sizeof(drvinfo->bus_info), "N/A"); > + } > > memset(®_info, 0, sizeof(reg_info)); > rte_eth_dev_get_reg_info(port_id, ®_info); > diff --git a/examples/ip_pipeline/init.c b/examples/ip_pipeline/init.c > index bb07efa13..f57236b7a 100644 > --- a/examples/ip_pipeline/init.c > +++ b/examples/ip_pipeline/init.c > @@ -1266,6 +1266,8 @@ app_init_kni(struct app_params *app) { > struct rte_eth_dev_info dev_info; > struct app_mempool_params *mempool_params; > struct rte_mempool *mempool; > + const struct rte_pci_device *pci_dev; > + const struct rte_bus *bus; > struct rte_kni_conf conf; > struct rte_kni_ops ops; > > @@ -1297,8 +1299,12 @@ app_init_kni(struct app_params *app) { > } > conf.group_id = p_link->pmd_id; > conf.mbuf_size = mempool_params->buffer_size; > - conf.addr = dev_info.pci_dev->addr; > - conf.id = dev_info.pci_dev->id; > + bus = rte_bus_find_by_device(dev_info.device); > + if (bus && !strcmp(bus->name, "pci")) { > + pci_dev = RTE_DEV_TO_PCI(dev_info.device); > + conf.addr = pci_dev->addr; > + conf.id = pci_dev->id; > + } > > memset(&ops, 0, sizeof(ops)); > ops.port_id = (uint8_t) p_link->pmd_id; > diff --git a/examples/kni/main.c b/examples/kni/main.c > index 0d9980ee1..06eb74f6f 100644 > --- a/examples/kni/main.c > +++ b/examples/kni/main.c > @@ -834,13 +834,17 @@ kni_alloc(uint16_t port_id) > if (i == 0) { > struct rte_kni_ops ops; > struct rte_eth_dev_info dev_info; > + const struct rte_pci_device *pci_dev; > + const struct rte_bus *bus; > > memset(&dev_info, 0, sizeof(dev_info)); > rte_eth_dev_info_get(port_id, &dev_info); > > - if (dev_info.pci_dev) { > - conf.addr = dev_info.pci_dev->addr; > - conf.id = dev_info.pci_dev->id; > + bus = rte_bus_find_by_device(dev_info.device); > + if (bus && !strcmp(bus->name, "pci")) { > + pci_dev = RTE_DEV_TO_PCI(dev_info.device); > + conf.addr = pci_dev->addr; > + conf.id = pci_dev->id; > } > /* Get the interface default mac address */ > rte_eth_macaddr_get(port_id, > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > index ab1030d42..0ed903966 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -995,7 +995,7 @@ struct rte_pci_device; > * Ethernet device information > */ > struct rte_eth_dev_info { > - struct rte_pci_device *pci_dev; /**< Device PCI information. */ > + struct rte_device *device; /** Generic device information */ > const char *driver_name; /**< Device Driver name. */ > unsigned int if_index; /**< Index to bound host interface, or 0 if none. > Use if_indextoname() to translate into an interface name. */ > diff --git a/test/test/test_kni.c b/test/test/test_kni.c > index e4839cdb7..e23eb0837 100644 > --- a/test/test/test_kni.c > +++ b/test/test/test_kni.c > @@ -357,6 +357,8 @@ test_kni_processing(uint16_t port_id, struct rte_mempool > *mp) > struct rte_kni_conf conf; > struct rte_eth_dev_info info; > struct rte_kni_ops ops; > + const struct rte_pci_device *pci_dev; > + const struct rte_bus *bus; > > if (!mp) > return -1; > @@ -366,8 +368,12 @@ test_kni_processing(uint16_t port_id, struct rte_mempool > *mp) > memset(&ops, 0, sizeof(ops)); > > rte_eth_dev_info_get(port_id, &info); > - conf.addr = info.pci_dev->addr; > - conf.id = info.pci_dev->id; > + bus = rte_bus_find_by_device(info.device); > + if (bus && !strcmp(bus->name, "pci")) { > + pci_dev = RTE_DEV_TO_PCI(info.device); > + conf.addr = pci_dev->addr; > + conf.id = pci_dev->id; > + } > snprintf(conf.name, sizeof(conf.name), TEST_KNI_PORT); > > /* core id 1 configured for kernel thread */ > @@ -465,6 +471,8 @@ test_kni(void) > struct rte_kni_conf conf; > struct rte_eth_dev_info info; > struct rte_kni_ops ops; > + const struct rte_pci_device *pci_dev; > + const struct rte_bus *bus; > > /* Initialize KNI subsytem */ > rte_kni_init(KNI_TEST_MAX_PORTS); > @@ -523,8 +531,12 @@ test_kni(void) > memset(&conf, 0, sizeof(conf)); > memset(&ops, 0, sizeof(ops)); > rte_eth_dev_info_get(port_id, &info); > - conf.addr = info.pci_dev->addr; > - conf.id = info.pci_dev->id; > + bus = rte_bus_find_by_device(info.device); > + if (bus && !strcmp(bus->name, "pci")) { > + pci_dev = RTE_DEV_TO_PCI(info.device); > + conf.addr = pci_dev->addr; > + conf.id = pci_dev->id; > + } > conf.group_id = port_id; > conf.mbuf_size = MAX_PACKET_SZ; > > @@ -552,8 +564,12 @@ test_kni(void) > memset(&info, 0, sizeof(info)); > memset(&ops, 0, sizeof(ops)); > rte_eth_dev_info_get(port_id, &info); > - conf.addr = info.pci_dev->addr; > - conf.id = info.pci_dev->id; > + bus = rte_bus_find_by_device(info.device); > + if (bus && !strcmp(bus->name, "pci")) { > + pci_dev = RTE_DEV_TO_PCI(info.device); > + conf.addr = pci_dev->addr; > + conf.id = pci_dev->id; > + } > conf.group_id = port_id; > conf.mbuf_size = MAX_PACKET_SZ; > > -- > 2.14.3 > -- - Tomasz DuszyĆski