From patchwork Thu Aug 27 15:40:40 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Iremonger, Bernard" X-Patchwork-Id: 6805 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 48A7B8DAB; Thu, 27 Aug 2015 17:40:57 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id B45E86A80 for ; Thu, 27 Aug 2015 17:40:51 +0200 (CEST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga102.fm.intel.com with ESMTP; 27 Aug 2015 08:40:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,422,1437462000"; d="scan'208";a="756580989" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga001.jf.intel.com with ESMTP; 27 Aug 2015 08:40:50 -0700 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id t7RFen9H004315; Thu, 27 Aug 2015 16:40:49 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id t7RFen1R032474; Thu, 27 Aug 2015 16:40:49 +0100 Received: (from bairemon@localhost) by sivswdev01.ir.intel.com with id t7RFentU032470; Thu, 27 Aug 2015 16:40:49 +0100 From: Bernard Iremonger To: dev@dpdk.org Date: Thu, 27 Aug 2015 16:40:40 +0100 Message-Id: <1440690041-32391-6-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1440690041-32391-1-git-send-email-bernard.iremonger@intel.com> References: <1440690041-32391-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [RFC PATCH 5/6] bonding: remove pci device driver 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" remove pci_dev, pci_drv, rte_bond_pmd and pci_id_table. handle numa_node for vdevs handle RTE_ETH_DEV_INTR_LSC for vdevs Signed-off-by: Bernard Iremonger --- drivers/net/bonding/rte_eth_bond_alb.c | 2 +- drivers/net/bonding/rte_eth_bond_api.c | 51 ++++++++-------------------------- drivers/net/bonding/rte_eth_bond_pmd.c | 22 ++++++++++----- lib/librte_ether/rte_ethdev.h | 2 ++ 4 files changed, 30 insertions(+), 47 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_alb.c b/drivers/net/bonding/rte_eth_bond_alb.c index 6df318e..3157543 100644 --- a/drivers/net/bonding/rte_eth_bond_alb.c +++ b/drivers/net/bonding/rte_eth_bond_alb.c @@ -65,7 +65,7 @@ bond_mode_alb_enable(struct rte_eth_dev *bond_dev) uint16_t data_size; char mem_name[RTE_ETH_NAME_MAX_LEN]; - int socket_id = bond_dev->pci_dev->numa_node; + int socket_id = bond_dev->data->numa_node; /* Fill hash table with initial values */ memset(hash_table, 0, sizeof(struct client_data) * ALB_HASH_TABLE_SIZE); diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index 0681d1a..b866bf3 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -48,11 +48,14 @@ int valid_bonded_ethdev(const struct rte_eth_dev *eth_dev) { /* Check valid pointer */ - if (eth_dev->driver->pci_drv.name == NULL) + if (!eth_dev) return -1; - /* return 0 if driver name matches */ - return eth_dev->driver->pci_drv.name != pmd_bond_driver_name; + /* return 0 if bonded device */ + if (eth_dev->dev_flags & RTE_ETH_DEV_BONDED) + return 0; + else + return 1; } int @@ -72,7 +75,7 @@ valid_slave_port_id(uint8_t port_id) return -1; /* Verify that port_id refers to a non bonded port */ - if (!valid_bonded_ethdev(&rte_eth_devices[port_id])) + if (valid_bonded_ethdev(&rte_eth_devices[port_id]) == 0) return -1; return 0; @@ -163,30 +166,11 @@ number_of_sockets(void) return ++sockets; } -const char pmd_bond_driver_name[] = "rte_bond_pmd"; - -static struct rte_pci_id pci_id_table = { - .device_id = PCI_ANY_ID, - .subsystem_device_id = PCI_ANY_ID, - .vendor_id = PCI_ANY_ID, - .subsystem_vendor_id = PCI_ANY_ID, -}; - -static struct eth_driver rte_bond_pmd = { - .pci_drv = { - .name = pmd_bond_driver_name, - .drv_flags = RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, - .id_table = &pci_id_table, - }, -}; - int rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id) { - struct rte_pci_device *pci_dev = NULL; struct bond_dev_private *internals = NULL; struct rte_eth_dev *eth_dev = NULL; - struct rte_pci_driver *pci_drv = NULL; /* now do all data allocation - for eth_dev structure, dummy pci driver * and internal (private) data @@ -203,14 +187,6 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id) goto err; } - pci_dev = rte_zmalloc_socket(name, sizeof(*pci_dev), 0, socket_id); - if (pci_dev == NULL) { - RTE_BOND_LOG(ERR, "Unable to malloc pci dev on socket"); - goto err; - } - - pci_drv = &rte_bond_pmd.pci_drv; - internals = rte_zmalloc_socket(name, sizeof(*internals), 0, socket_id); if (internals == NULL) { RTE_BOND_LOG(ERR, "Unable to malloc internals on socket"); @@ -224,14 +200,10 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id) goto err; } - pci_dev->numa_node = socket_id; - pci_drv->name = pmd_bond_driver_name; - pci_dev->driver = pci_drv; - - eth_dev->driver = &rte_bond_pmd; eth_dev->data->dev_private = internals; eth_dev->data->nb_rx_queues = (uint16_t)1; eth_dev->data->nb_tx_queues = (uint16_t)1; + eth_dev->data->numa_node = socket_id; TAILQ_INIT(&(eth_dev->link_intr_cbs)); @@ -250,7 +222,10 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id) eth_dev->data->all_multicast = 0; eth_dev->dev_ops = &default_dev_ops; - eth_dev->pci_dev = pci_dev; + eth_dev->pci_dev = NULL; + eth_dev->driver = NULL; + eth_dev->dev_flags = RTE_ETH_DEV_INTR_LSC | + RTE_ETH_DEV_DETACHABLE | RTE_ETH_DEV_BONDED; rte_spinlock_init(&internals->lock); @@ -287,7 +262,6 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id) return eth_dev->data->port_id; err: - rte_free(pci_dev); rte_free(internals); if (eth_dev != NULL) { rte_free(eth_dev->data->mac_addrs); @@ -319,7 +293,6 @@ rte_eth_bond_free(const char *name) eth_dev->rx_pkt_burst = NULL; eth_dev->tx_pkt_burst = NULL; - rte_free(eth_dev->pci_dev); rte_free(eth_dev->data->dev_private); rte_free(eth_dev->data->mac_addrs); diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 5cc6372..387d370 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -1307,8 +1307,12 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev, rte_eth_dev_stop(slave_eth_dev->data->port_id); /* Enable interrupts on slave device if supported */ - if (slave_eth_dev->driver->pci_drv.drv_flags & RTE_PCI_DRV_INTR_LSC) - slave_eth_dev->data->dev_conf.intr_conf.lsc = 1; + if (slave_eth_dev->dev_type == RTE_ETH_DEV_PCI) { + if (slave_eth_dev->driver->pci_drv.drv_flags & RTE_PCI_DRV_INTR_LSC) + slave_eth_dev->data->dev_conf.intr_conf.lsc = 1; + } else if (slave_eth_dev->dev_flags & RTE_ETH_DEV_INTR_LSC) + slave_eth_dev->data->dev_conf.intr_conf.lsc = 1; + /* Configure device */ errval = rte_eth_dev_configure(slave_eth_dev->data->port_id, @@ -1362,8 +1366,12 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev, } /* If lsc interrupt is set, check initial slave's link status */ - if (slave_eth_dev->driver->pci_drv.drv_flags & RTE_PCI_DRV_INTR_LSC) - bond_ethdev_lsc_event_callback(slave_eth_dev->data->port_id, + if (slave_eth_dev->dev_type == RTE_ETH_DEV_PCI) { + if (slave_eth_dev->driver->pci_drv.drv_flags & RTE_PCI_DRV_INTR_LSC) + bond_ethdev_lsc_event_callback(slave_eth_dev->data->port_id, + RTE_ETH_EVENT_INTR_LSC, &bonded_eth_dev->data->port_id); + } else if (slave_eth_dev->dev_flags & RTE_ETH_DEV_INTR_LSC) + bond_ethdev_lsc_event_callback(slave_eth_dev->data->port_id, RTE_ETH_EVENT_INTR_LSC, &bonded_eth_dev->data->port_id); return 0; @@ -1592,7 +1600,7 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->max_tx_queues = (uint16_t)512; dev_info->min_rx_bufsize = 0; - dev_info->pci_dev = dev->pci_dev; + dev_info->pci_dev = NULL; dev_info->rx_offload_capa = internals->rx_offload_capa; dev_info->tx_offload_capa = internals->tx_offload_capa; @@ -1605,7 +1613,7 @@ bond_ethdev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id, { struct bond_rx_queue *bd_rx_q = (struct bond_rx_queue *) rte_zmalloc_socket(NULL, sizeof(struct bond_rx_queue), - 0, dev->pci_dev->numa_node); + 0, dev->data->numa_node); if (bd_rx_q == NULL) return -1; @@ -1629,7 +1637,7 @@ bond_ethdev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id, { struct bond_tx_queue *bd_tx_q = (struct bond_tx_queue *) rte_zmalloc_socket(NULL, sizeof(struct bond_tx_queue), - 0, dev->pci_dev->numa_node); + 0, dev->data->numa_node); if (bd_tx_q == NULL) return -1; diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index a0a648f..6804bd3 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -1593,6 +1593,8 @@ struct rte_eth_dev { #define RTE_ETH_DEV_INTR_LSC 0x0008 /** Device supports detaching capability */ #define RTE_ETH_DEV_DETACHABLE 0x0010 +/** Device is a bonded device */ +#define RTE_ETH_DEV_BONDED 0x0020 struct rte_eth_dev_sriov { uint8_t active; /**< SRIOV is active with 16, 32 or 64 pools */