From: Bernard Iremonger <bernard.iremonger@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [RFC PATCH 5/6] bonding: remove pci device driver
Date: Thu, 27 Aug 2015 16:40:40 +0100 [thread overview]
Message-ID: <1440690041-32391-6-git-send-email-bernard.iremonger@intel.com> (raw)
In-Reply-To: <1440690041-32391-1-git-send-email-bernard.iremonger@intel.com>
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 <bernard.iremonger@intel.com>
---
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 */
--
1.9.1
next prev parent reply other threads:[~2015-08-27 15:40 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <RFC PATCH>
2015-04-08 10:02 ` [dpdk-dev] [RFC PATCH] librte_pmd_ixgbe: changes to support PCI Port Hotplug Bernard Iremonger
2015-04-22 3:14 ` Qiu, Michael
2015-04-08 14:11 ` [dpdk-dev] [RFC PATCH] librte_pmd_e1000: igb and em1000 PCI Port Hotplug changes Bernard Iremonger
2015-04-30 13:16 ` [dpdk-dev] [RFC PATCH 1/1] librte_pmd_ring: changes to support PCI Port Hotplug Bernard Iremonger
2015-04-30 15:40 ` [dpdk-dev] [RFC PATCH 1/4] librte_pmd_i40e: " Bernard Iremonger
2015-04-30 15:41 ` [dpdk-dev] [RFC PATCH 2/4] librte_pmd_i40e: release vmdq vsi's in dev_close Bernard Iremonger
2015-04-30 15:42 ` [dpdk-dev] [RFC PATCH 3/4] librte_pmd_i40e: increase ASQ_DELAY_MS to 100 in i40evf_wait_cmd_done() Bernard Iremonger
2015-04-30 15:42 ` [dpdk-dev] [RFC PATCH 4/4] librte_pmd_i40e: call _clear_cmd() when error occurs Bernard Iremonger
2015-05-01 14:36 ` [dpdk-dev] [RFC PATCH] librte_pmd_bond: add support for PCI Port Hotplug Bernard Iremonger
2015-05-01 15:17 ` Neil Horman
2015-05-01 15:28 ` [dpdk-dev] [RFC PATCH] librte_pmd_virtio: " Bernard Iremonger
2015-05-05 14:36 ` [dpdk-dev] [RFC PATCH V2] librte_pmd_ring: changes to support " Bernard Iremonger
2015-05-06 16:15 ` Bruce Richardson
2015-05-06 10:22 ` [dpdk-dev] [RFC PATCH V2] librte_pmd_ixgbe: " Bernard Iremonger
2015-05-06 11:20 ` [dpdk-dev] [RFC PATCH V2] librte_pmd_e1000: igb and em1000 PCI Port Hotplug changes Bernard Iremonger
2015-05-27 16:00 ` [dpdk-dev] [RFC PATCH V2 1/2] drivers/net/virtio: add support for PCI Port Hotplug Bernard Iremonger
2015-05-27 16:00 ` [dpdk-dev] [RFC PATCH V2 2/2] drivers/net/virtio: check vq parameter Bernard Iremonger
2015-06-16 1:08 ` Ouyang, Changchun
2015-05-28 12:28 ` [dpdk-dev] [RFC PATCH V2] drivers/net/bonding: add support for PCI Port Hotplug Bernard Iremonger
2015-05-29 13:46 ` [dpdk-dev] [RFC PATCH V3] drivers/net/ring: changes to support " Bernard Iremonger
2015-06-03 15:21 ` Bruce Richardson
2015-06-02 10:18 ` [dpdk-dev] [RFC PATCH V3] ixgbe: " Bernard Iremonger
2015-06-03 14:03 ` [dpdk-dev] [RFC PATCH V3] e1000: igb and em1000 PCI Port Hotplug changes Bernard Iremonger
2015-06-04 16:24 ` [dpdk-dev] [RFC PATCH V2 1/4] i40e: changes to support PCI Port Hotplug Bernard Iremonger
2015-06-24 8:03 ` Qiu, Michael
2015-06-04 16:25 ` [dpdk-dev] [RFC PATCH V2 2/4] i40e: release vmdq vsi's in dev_close Bernard Iremonger
2015-06-04 16:25 ` [dpdk-dev] [RFC PATCH V2 3/4] i40e: increase ASQ_DELAY_MS to 100 in i40evf_wait_cmd_done() Bernard Iremonger
2015-06-04 16:26 ` [dpdk-dev] [RFC PATCH V2 4/4] i40e: call _clear_cmd() when error occurs Bernard Iremonger
2015-06-08 15:47 ` [dpdk-dev] [RFC PATCH V4] ixgbe: changes to support PCI Port Hotplug Bernard Iremonger
2015-06-15 22:31 ` Ananyev, Konstantin
2015-06-17 6:11 ` Zhang, Helin
2015-06-24 7:45 ` Qiu, Michael
2015-06-24 7:46 ` Qiu, Michael
2015-06-10 8:27 ` [dpdk-dev] [RFC PATCH V3 0/5] PCI Port Hotplug changes Bernard Iremonger
2015-06-10 8:27 ` [dpdk-dev] [RFC PATCH V3 1/5] i40e: changes to support PCI Port Hotplug Bernard Iremonger
2015-06-10 8:27 ` [dpdk-dev] [RFC PATCH V3 2/5] i40e: release vmdq vsi's in dev_close Bernard Iremonger
2015-06-10 8:27 ` [dpdk-dev] [RFC PATCH V3 3/5] i40e: increase ASQ_DELAY_MS to 100 in i40evf_wait_cmd_done() Bernard Iremonger
2015-06-10 8:27 ` [dpdk-dev] [RFC PATCH V3 4/5] i40e: call _clear_cmd() when error occurs Bernard Iremonger
2015-06-10 8:27 ` [dpdk-dev] [RFC PATCH V3 5/5] i40e: clear queues in i40evf_dev_stop Bernard Iremonger
2015-06-10 12:09 ` [dpdk-dev] [RFC PATCH V4] e1000: igb and em1000 PCI Port Hotplug changes Bernard Iremonger
2015-08-27 15:40 ` [dpdk-dev] [RFC PATCH 0/6] remove pci driver from vdevs Bernard Iremonger
2015-08-27 15:40 ` [dpdk-dev] [RFC PATCH 1/6] librte_ether: add fields from rte_pci_driver to rte_eth_dev and rte_eth_dev_data Bernard Iremonger
2015-08-31 14:07 ` Thomas Monjalon
2015-09-01 11:38 ` Iremonger, Bernard
2015-09-01 12:03 ` Bruce Richardson
2015-09-01 12:37 ` Ananyev, Konstantin
2015-09-01 12:43 ` Richardson, Bruce
2015-08-27 15:40 ` [dpdk-dev] [RFC PATCH 2/6] librte_ether: handle RTE_ETH_DEV_INTR_LSC for vdevs Bernard Iremonger
2015-08-27 15:40 ` [dpdk-dev] [RFC PATCH 3/6] null: remove pci device driver Bernard Iremonger
2015-08-31 14:11 ` Thomas Monjalon
2015-08-31 16:05 ` Iremonger, Bernard
2015-08-27 15:40 ` [dpdk-dev] [RFC PATCH 4/6] ring: " Bernard Iremonger
2015-08-27 15:40 ` Bernard Iremonger [this message]
2015-08-27 17:48 ` [dpdk-dev] [RFC PATCH 5/6] bonding: " Stephen Hemminger
2015-08-28 8:32 ` Iremonger, Bernard
2015-08-28 15:57 ` Stephen Hemminger
2015-08-27 15:40 ` [dpdk-dev] [RFC PATCH 6/6] pcap: " Bernard Iremonger
2015-08-27 17:43 ` [dpdk-dev] [RFC PATCH 0/6] remove pci driver from vdevs John W. Linville
2015-08-28 8:15 ` Iremonger, Bernard
2015-08-28 10:32 ` Neil Horman
2015-08-28 19:48 ` Wiles, Keith
2015-08-31 11:21 ` Iremonger, Bernard
2015-08-31 12:41 ` Neil Horman
2015-08-28 17:51 ` John W. Linville
2015-08-31 10:23 ` Iremonger, Bernard
2015-08-31 12:59 ` Neil Horman
2015-08-31 14:22 ` Thomas Monjalon
2015-09-01 13:38 ` Iremonger, Bernard
2015-09-01 19:18 ` Neil Horman
2015-09-03 14:02 ` Iremonger, Bernard
2015-09-07 9:22 ` Zende, Amruta S
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 00/18] refactor eal driver registration code Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 01/18] librte_eal: remove type field from rte_driver structure Bernard Iremonger
2015-09-04 13:08 ` Thomas Monjalon
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 02/18] af_packet: " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 03/18] bnx2x: remove type field and initialise name field in " Bernard Iremonger
2015-09-04 11:26 ` Harish Patil
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 04/18] bonding: remove type field from " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 05/18] cxgbe: " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 06/18] e1000: remove type field and initialise name field in rte_driver structures Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 07/18] enic: remove type field and initialise name field in rte_driver structure Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 08/18] fm10k: " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 09/18] i40e: remove type field and initialise name field in rte_driver structures Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 10/18] ixgbe: remove type field and initialise name field in rte_driver structure Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 11/18] mlx4: remove type field from " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 12/18] mpipe: remove type field and update name in " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 13/18] null: remove type field from " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 14/18] pcap: " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 15/18] ring: " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 16/18] virtio_ethdev: remove type field and initialise name field in " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 17/18] vmxnet3: " Bernard Iremonger
2015-09-04 11:01 ` [dpdk-dev] [RFC PATCH 18/18] xenvirt: remove type field from " Bernard Iremonger
2015-09-04 11:18 ` [dpdk-dev] [RFC PATCH 00/18] refactor eal driver registration code Bruce Richardson
2015-09-04 12:46 ` Iremonger, Bernard
2015-09-04 12:53 ` Bruce Richardson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1440690041-32391-6-git-send-email-bernard.iremonger@intel.com \
--to=bernard.iremonger@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).