From patchwork Thu Apr 16 23:23:39 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 4340 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id B83EBC356; Fri, 17 Apr 2015 01:23:41 +0200 (CEST) Received: from mail-pd0-f176.google.com (mail-pd0-f176.google.com [209.85.192.176]) by dpdk.org (Postfix) with ESMTP id 6DB43C312 for ; Fri, 17 Apr 2015 01:23:38 +0200 (CEST) Received: by pdbqd1 with SMTP id qd1so108088538pdb.2 for ; Thu, 16 Apr 2015 16:23:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=IbJG+slnk09dmVTjH/swBFz3cEakGmyaDaV7ihuodCE=; b=VUU9I4bBtTD3oyOwrtMfP0bu0O3CidT0Oa881M28Sc80jXuW2yVIFa3IqyQyLXbmry Cbz36Isx9Ib2i14Bhf3foebA24o8gYVMnhZV3IlX5aJjZVyXe7STkS5wbyyweAK2bcLQ mgKN+uTaEnwaI9mJLmjH6b/gddx0ZGtWHnXpwUrCPyI7Rm9/e2KJrp1dff233szcoZ/0 sPPt4+rfTBUyC16KnBwITsvY1g7GHkT7yjootk+WQD/GzV+qr6cQ0byKwbMLcg2VXa2W woUonLi3dlRcUV2N9NhOmn/tJVpzT0PWaEnJdLzMzVzU2Umx9kSskuXUu7uOCtIbxJO/ xonw== X-Gm-Message-State: ALoCoQn1+oTHgrF5ZJBux6lhPb4Thg0IYsPX2ZtNW28d3MmQakGERIVJm4TFFLsCabiAzhaOQVZI X-Received: by 10.67.8.98 with SMTP id dj2mr269740pad.79.1429226617725; Thu, 16 Apr 2015 16:23:37 -0700 (PDT) Received: from urahara.home.lan (static-50-53-82-155.bvtn.or.frontiernet.net. [50.53.82.155]) by mx.google.com with ESMTPSA id gy3sm8163808pbb.42.2015.04.16.16.23.36 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 16 Apr 2015 16:23:36 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Date: Thu, 16 Apr 2015 16:23:39 -0700 Message-Id: <1429226620-9847-2-git-send-email-stephen@networkplumber.org> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1429226620-9847-1-git-send-email-stephen@networkplumber.org> References: <1429226620-9847-1-git-send-email-stephen@networkplumber.org> Subject: [dpdk-dev] [PATCH 1/2] pci: make device_id tables const X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- 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 | 12 +++++------- 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, 23 insertions(+), 26 deletions(-) diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 9581892..a538c8a 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 785852d..62449d7 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 9cb0ffd..d2adc66 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 f594fe1..dc11f47 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 12ecf5f..9fe101a 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 1ea2d38..df47ca2 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 3e53f86..d6423f6 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 1a96cf2..d716881 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 dc44764..43762f2 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 4581c5b..8910bdf 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 1b3b4b5..366aa45 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 e096071..5df192c 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 ffa26a0..e63dbfb 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 577e0f9..20f484c 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"