From 6065355a03fc743234d4c11fc8e17093bf072617 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Thu, 16 Apr 2015 16:23:39 -0700 Subject: [PATCH] pci: make device id tables const The PCI device id table is immutable and should be made const in all drivers. The pseudo drivers can initialize their local copy as necessary. Signed-off-by: Stephen Hemminger Acked-by: Neil Horman --- app/test/virtual_pmd.c | 3 +-- lib/librte_eal/common/include/rte_pci.h | 2 +- lib/librte_eal/linuxapp/eal/eal_pci.c | 8 ++++---- lib/librte_pmd_bond/rte_eth_bond_api.c | 10 ++++------ lib/librte_pmd_e1000/em_ethdev.c | 2 +- lib/librte_pmd_e1000/igb_ethdev.c | 4 ++-- lib/librte_pmd_enic/enic_ethdev.c | 2 +- lib/librte_pmd_fm10k/fm10k_ethdev.c | 2 +- lib/librte_pmd_i40e/i40e_ethdev.c | 2 +- lib/librte_pmd_i40e/i40e_ethdev_vf.c | 2 +- lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 4 ++-- lib/librte_pmd_mlx4/mlx4.c | 2 +- lib/librte_pmd_virtio/virtio_ethdev.c | 2 +- lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c | 2 +- 14 files changed, 22 insertions(+), 25 deletions(-) diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 95818928ff..a538c8a16e 100644 --- a/app/test/virtual_pmd.c +++ b/app/test/virtual_pmd.c @@ -562,6 +562,7 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr, id_table = rte_zmalloc_socket(name, sizeof(*id_table), 0, socket_id); if (id_table == NULL) goto err; + id_table->device_id = 0xBEEF; dev_private = rte_zmalloc_socket(name, sizeof(*dev_private), 0, socket_id); if (dev_private == NULL) @@ -627,8 +628,6 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr, eth_dev->pci_dev = pci_dev; eth_dev->pci_dev->driver = ð_drv->pci_drv; - eth_dev->pci_dev->driver->id_table->device_id = 0xBEEF; - eth_dev->rx_pkt_burst = virtual_ethdev_rx_burst_success; eth_dev->tx_pkt_burst = virtual_ethdev_tx_burst_success; diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h index 785852d1a1..62449d709f 100644 --- a/lib/librte_eal/common/include/rte_pci.h +++ b/lib/librte_eal/common/include/rte_pci.h @@ -204,7 +204,7 @@ struct rte_pci_driver { const char *name; /**< Driver name. */ pci_devinit_t *devinit; /**< Device init. function. */ pci_devuninit_t *devuninit; /**< Device uninit function. */ - struct rte_pci_id *id_table; /**< ID table, NULL terminated. */ + const struct rte_pci_id *id_table; /**< ID table, NULL terminated. */ uint32_t drv_flags; /**< Flags contolling handling of device. */ }; diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c index 9cb0ffd919..d2adc66a5e 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c @@ -624,9 +624,9 @@ int rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *dev) { int ret; - struct rte_pci_id *id_table; + const struct rte_pci_id *id_table; - for (id_table = dr->id_table ; id_table->vendor_id != 0; id_table++) { + for (id_table = dr->id_table; id_table->vendor_id != 0; id_table++) { /* check if device's identifiers match the driver's ones */ if (id_table->vendor_id != dev->id.vendor_id && @@ -696,12 +696,12 @@ int rte_eal_pci_close_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *dev) { - struct rte_pci_id *id_table; + const struct rte_pci_id *id_table; if ((dr == NULL) || (dev == NULL)) return -EINVAL; - for (id_table = dr->id_table ; id_table->vendor_id != 0; id_table++) { + for (id_table = dr->id_table; id_table->vendor_id != 0; id_table++) { /* check if device's identifiers match the driver's ones */ if (id_table->vendor_id != dev->id.vendor_id && diff --git a/lib/librte_pmd_bond/rte_eth_bond_api.c b/lib/librte_pmd_bond/rte_eth_bond_api.c index f594fe153b..e91a623406 100644 --- a/lib/librte_pmd_bond/rte_eth_bond_api.c +++ b/lib/librte_pmd_bond/rte_eth_bond_api.c @@ -237,14 +237,12 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id) RTE_BOND_LOG(ERR, "Unable to malloc pci_id_table on socket"); goto err; } + pci_id_table->device_id = PCI_ANY_ID; + pci_id_table->subsystem_device_id = PCI_ANY_ID; + pci_id_table->vendor_id = PCI_ANY_ID; + pci_id_table->subsystem_vendor_id = PCI_ANY_ID; pci_drv->id_table = pci_id_table; - - pci_drv->id_table->device_id = PCI_ANY_ID; - pci_drv->id_table->subsystem_device_id = PCI_ANY_ID; - pci_drv->id_table->vendor_id = PCI_ANY_ID; - pci_drv->id_table->subsystem_vendor_id = PCI_ANY_ID; - pci_drv->drv_flags = RTE_PCI_DRV_INTR_LSC; internals = rte_zmalloc_socket(name, sizeof(*internals), 0, socket_id); diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c index 82e0b7a03f..da02988d3e 100644 --- a/lib/librte_pmd_e1000/em_ethdev.c +++ b/lib/librte_pmd_e1000/em_ethdev.c @@ -125,7 +125,7 @@ static enum e1000_fc_mode em_fc_setting = e1000_fc_full; /* * The set of PCI devices this driver supports */ -static struct rte_pci_id pci_id_em_map[] = { +static const struct rte_pci_id pci_id_em_map[] = { #define RTE_PCI_DEV_ID_DECL_EM(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c index e2b7cf3f18..4415155c02 100644 --- a/lib/librte_pmd_e1000/igb_ethdev.c +++ b/lib/librte_pmd_e1000/igb_ethdev.c @@ -216,7 +216,7 @@ static enum e1000_fc_mode igb_fc_setting = e1000_fc_full; /* * The set of PCI devices this driver supports */ -static struct rte_pci_id pci_id_igb_map[] = { +static const struct rte_pci_id pci_id_igb_map[] = { #define RTE_PCI_DEV_ID_DECL_IGB(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" @@ -227,7 +227,7 @@ static struct rte_pci_id pci_id_igb_map[] = { /* * The set of PCI devices this driver supports (for 82576&I350 VF) */ -static struct rte_pci_id pci_id_igbvf_map[] = { +static const struct rte_pci_id pci_id_igbvf_map[] = { #define RTE_PCI_DEV_ID_DECL_IGBVF(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" diff --git a/lib/librte_pmd_enic/enic_ethdev.c b/lib/librte_pmd_enic/enic_ethdev.c index 63a594d163..69ad01bf57 100644 --- a/lib/librte_pmd_enic/enic_ethdev.c +++ b/lib/librte_pmd_enic/enic_ethdev.c @@ -58,7 +58,7 @@ /* * The set of PCI devices this driver supports */ -static struct rte_pci_id pci_id_enic_map[] = { +static const struct rte_pci_id pci_id_enic_map[] = { #define RTE_PCI_DEV_ID_DECL_ENIC(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #ifndef PCI_VENDOR_ID_CISCO #define PCI_VENDOR_ID_CISCO 0x1137 diff --git a/lib/librte_pmd_fm10k/fm10k_ethdev.c b/lib/librte_pmd_fm10k/fm10k_ethdev.c index 1a96cf2dcc..d716881631 100644 --- a/lib/librte_pmd_fm10k/fm10k_ethdev.c +++ b/lib/librte_pmd_fm10k/fm10k_ethdev.c @@ -1835,7 +1835,7 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev) * The set of PCI devices this driver supports. This driver will enable both PF * and SRIOV-VF devices. */ -static struct rte_pci_id pci_id_fm10k_map[] = { +static const struct rte_pci_id pci_id_fm10k_map[] = { #define RTE_PCI_DEV_ID_DECL_FM10K(vend, dev) { RTE_PCI_DEVICE(vend, dev) }, #define RTE_PCI_DEV_ID_DECL_FM10KVF(vend, dev) { RTE_PCI_DEVICE(vend, dev) }, #include "rte_pci_dev_ids.h" diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c index dc44764272..43762f2bf8 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev.c +++ b/lib/librte_pmd_i40e/i40e_ethdev.c @@ -212,7 +212,7 @@ static int i40e_dev_filter_ctrl(struct rte_eth_dev *dev, static void i40e_configure_registers(struct i40e_hw *hw); static void i40e_hw_init(struct i40e_hw *hw); -static struct rte_pci_id pci_id_i40e_map[] = { +static const struct rte_pci_id pci_id_i40e_map[] = { #define RTE_PCI_DEV_ID_DECL_I40E(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" { .vendor_id = 0, /* sentinel */ }, diff --git a/lib/librte_pmd_i40e/i40e_ethdev_vf.c b/lib/librte_pmd_i40e/i40e_ethdev_vf.c index 4581c5b108..8910bdf334 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev_vf.c +++ b/lib/librte_pmd_i40e/i40e_ethdev_vf.c @@ -999,7 +999,7 @@ i40evf_get_link_status(struct rte_eth_dev *dev, struct rte_eth_link *link) return 0; } -static struct rte_pci_id pci_id_i40evf_map[] = { +static const struct rte_pci_id pci_id_i40evf_map[] = { #define RTE_PCI_DEV_ID_DECL_I40EVF(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" { .vendor_id = 0, /* sentinel */ }, diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c index 1b3b4b5ec2..366aa45743 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c @@ -297,7 +297,7 @@ static int ixgbevf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu); /* * The set of PCI devices this driver supports */ -static struct rte_pci_id pci_id_ixgbe_map[] = { +static const struct rte_pci_id pci_id_ixgbe_map[] = { #define RTE_PCI_DEV_ID_DECL_IXGBE(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" @@ -309,7 +309,7 @@ static struct rte_pci_id pci_id_ixgbe_map[] = { /* * The set of PCI devices this driver supports (for 82599 VF) */ -static struct rte_pci_id pci_id_ixgbevf_map[] = { +static const struct rte_pci_id pci_id_ixgbevf_map[] = { #define RTE_PCI_DEV_ID_DECL_IXGBEVF(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" diff --git a/lib/librte_pmd_mlx4/mlx4.c b/lib/librte_pmd_mlx4/mlx4.c index 024282a978..f915bc1f4f 100644 --- a/lib/librte_pmd_mlx4/mlx4.c +++ b/lib/librte_pmd_mlx4/mlx4.c @@ -4632,7 +4632,7 @@ error: return -err; } -static struct rte_pci_id mlx4_pci_id_map[] = { +static const struct rte_pci_id mlx4_pci_id_map[] = { { .vendor_id = PCI_VENDOR_ID_MELLANOX, .device_id = PCI_DEVICE_ID_MELLANOX_CONNECTX3, diff --git a/lib/librte_pmd_virtio/virtio_ethdev.c b/lib/librte_pmd_virtio/virtio_ethdev.c index ffa26a0a83..e63dbfb970 100644 --- a/lib/librte_pmd_virtio/virtio_ethdev.c +++ b/lib/librte_pmd_virtio/virtio_ethdev.c @@ -102,7 +102,7 @@ static int virtio_dev_queue_stats_mapping_set( /* * The set of PCI devices this driver supports */ -static struct rte_pci_id pci_id_virtio_map[] = { +static const struct rte_pci_id pci_id_virtio_map[] = { #define RTE_PCI_DEV_ID_DECL_VIRTIO(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" diff --git a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c index 577e0f92bc..20f484ca25 100644 --- a/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c +++ b/lib/librte_pmd_vmxnet3/vmxnet3_ethdev.c @@ -91,7 +91,7 @@ static void vmxnet3_process_events(struct vmxnet3_hw *); /* * The set of PCI devices this driver supports */ -static struct rte_pci_id pci_id_vmxnet3_map[] = { +static const struct rte_pci_id pci_id_vmxnet3_map[] = { #define RTE_PCI_DEV_ID_DECL_VMXNET3(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, #include "rte_pci_dev_ids.h" -- 2.20.1