diff mbox

[dpdk-dev,v2,02/20] librte_ether: add fields from rte_pci_driver to rte_eth_dev_data

Message ID 1444041035-4936-3-git-send-email-bernard.iremonger@intel.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Iremonger, Bernard Oct. 5, 2015, 10:30 a.m. UTC
add dev_flags to rte_eth_dev_data, add macros for dev_flags.
add kdrv to rte_eth_dev_data.
add numa_node to rte_eth_dev_data.
add drv_name to rte_eth_dev_data.
use dev_type to distinguish between vdev's and pdev's.
remove pci_dev branches.

Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
 lib/librte_ether/rte_ethdev.c | 54 +++++++++++++++++++++++++------------------
 lib/librte_ether/rte_ethdev.h | 15 ++++++++++++
 2 files changed, 46 insertions(+), 23 deletions(-)

Comments

John McNamara Oct. 12, 2015, 10:46 a.m. UTC | #1
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bernard Iremonger
> Sent: Monday, October 5, 2015 11:30 AM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v2 02/20] librte_ether: add fields from
> rte_pci_driver to rte_eth_dev_data
> 
> add dev_flags to rte_eth_dev_data, add macros for dev_flags.
> add kdrv to rte_eth_dev_data.
> add numa_node to rte_eth_dev_data.
> add drv_name to rte_eth_dev_data.
> use dev_type to distinguish between vdev's and pdev's.
> remove pci_dev branches.


Hi Bernard,

Patch 02/20 doesn't compile without patch 03/20 also being applied:


    $ git log --pretty=oneline --abbrev-commit -2 
    0958ce7 librte_ether: add fields from rte_pci_driver to rte_eth_dev_data
    30e65e6 librte_eal: add RTE_KDRV_NONE for vdevs

    $ make T=x86_64-native-linuxapp-gcc -j install
    ...
    lib/librte_ether/rte_ethdev.c:3341:1: error: no previous prototype for
    'rte_eth_copy_dev_info' [-Werror=missing-prototypes]
    cc1: all warnings being treated as errors


John
Iremonger, Bernard Oct. 12, 2015, 4:17 p.m. UTC | #2
Hi John,

<snip>

> Hi Bernard,
> 
> Patch 02/20 doesn't compile without patch 03/20 also being applied:
> 
> 
>     $ git log --pretty=oneline --abbrev-commit -2
>     0958ce7 librte_ether: add fields from rte_pci_driver to rte_eth_dev_data
>     30e65e6 librte_eal: add RTE_KDRV_NONE for vdevs
> 
>     $ make T=x86_64-native-linuxapp-gcc -j install
>     ...
>     lib/librte_ether/rte_ethdev.c:3341:1: error: no previous prototype for
>     'rte_eth_copy_dev_info' [-Werror=missing-prototypes]
>     cc1: all warnings being treated as errors
> 
> 
> John
> 
I have reworked patch 02/20 and 03/20  to fix this issue.
I will send a v3 patch set with the revised patches.

Regards,

Bernard.
diff mbox

Patch

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index f593f6e..2fce370 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -424,7 +424,7 @@  rte_eth_dev_socket_id(uint8_t port_id)
 {
 	if (!rte_eth_dev_is_valid_port(port_id))
 		return -1;
-	return rte_eth_devices[port_id].pci_dev->numa_node;
+	return rte_eth_devices[port_id].data->numa_node;
 }
 
 uint8_t
@@ -503,27 +503,25 @@  rte_eth_dev_get_name_by_port(uint8_t port_id, char *name)
 static int
 rte_eth_dev_is_detachable(uint8_t port_id)
 {
-	uint32_t drv_flags;
+	uint32_t dev_flags;
 
 	if (!rte_eth_dev_is_valid_port(port_id)) {
 		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
 		return -EINVAL;
 	}
 
-	if (rte_eth_devices[port_id].dev_type == RTE_ETH_DEV_PCI) {
-		switch (rte_eth_devices[port_id].pci_dev->kdrv) {
-		case RTE_KDRV_IGB_UIO:
-		case RTE_KDRV_UIO_GENERIC:
-		case RTE_KDRV_NIC_UIO:
-			break;
-		case RTE_KDRV_VFIO:
-		default:
-			return -ENOTSUP;
-		}
+	switch (rte_eth_devices[port_id].data->kdrv) {
+	case RTE_KDRV_IGB_UIO:
+	case RTE_KDRV_UIO_GENERIC:
+	case RTE_KDRV_NIC_UIO:
+	case RTE_KDRV_NONE:
+		break;
+	case RTE_KDRV_VFIO:
+	default:
+		return -ENOTSUP;
 	}
-
-	drv_flags = rte_eth_devices[port_id].driver->pci_drv.drv_flags;
-	return !(drv_flags & RTE_PCI_DRV_DETACHABLE);
+	dev_flags = rte_eth_devices[port_id].data->dev_flags;
+	return !(dev_flags & RTE_ETH_DEV_DETACHABLE);
 }
 
 /* attach the new physical device, then store port_id of the device */
@@ -1143,14 +1141,11 @@  rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	 * If link state interrupt is enabled, check that the
 	 * device supports it.
 	 */
-	if (dev_conf->intr_conf.lsc == 1) {
-		const struct rte_pci_driver *pci_drv = &dev->driver->pci_drv;
-
-		if (!(pci_drv->drv_flags & RTE_PCI_DRV_INTR_LSC)) {
+	if ((dev_conf->intr_conf.lsc == 1) &&
+		(!(dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC))) {
 			PMD_DEBUG_TRACE("driver %s does not support lsc\n",
-					pci_drv->name);
+					dev->data->drv_name);
 			return -EINVAL;
-		}
 	}
 
 	/*
@@ -1795,8 +1790,7 @@  rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
 	FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
 	(*dev->dev_ops->dev_infos_get)(dev, dev_info);
 	dev_info->pci_dev = dev->pci_dev;
-	if (dev->driver)
-		dev_info->driver_name = dev->driver->pci_drv.name;
+	dev_info->driver_name = dev->data->drv_name;
 }
 
 void
@@ -3342,3 +3336,17 @@  rte_eth_dev_set_eeprom(uint8_t port_id, struct rte_dev_eeprom_info *info)
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->set_eeprom, -ENOTSUP);
 	return (*dev->dev_ops->set_eeprom)(dev, info);
 }
+
+void
+rte_eth_copy_dev_info(struct rte_eth_dev *eth_dev, struct rte_pci_device *pci_dev)
+{
+	if ((eth_dev == NULL) || (pci_dev == NULL)) {
+		PMD_DEBUG_TRACE("NULL pointer eth_dev=%p pci_dev=%p\n",
+				eth_dev, pci_dev);
+	}
+
+	eth_dev->data->dev_flags = pci_dev->driver->drv_flags;
+	eth_dev->data->kdrv = pci_dev->kdrv;
+	eth_dev->data->numa_node = pci_dev->numa_node;
+	eth_dev->data->drv_name = pci_dev->driver->name;
+}
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 8a8c82b..d440bd6 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1471,8 +1471,23 @@  struct rte_eth_dev_data {
 		all_multicast : 1, /**< RX all multicast mode ON(1) / OFF(0). */
 		dev_started : 1,   /**< Device state: STARTED(1) / STOPPED(0). */
 		lro         : 1;   /**< RX LRO is ON(1) / OFF(0) */
+	uint32_t dev_flags; /**< Flags controlling handling of device. */
+	enum rte_kernel_driver kdrv;	/**< Kernel driver passthrough */
+	int numa_node;
+	const char *drv_name;
 };
 
+/** Device needs PCI BAR mapping (done with either IGB_UIO or VFIO) */
+#define RTE_ETH_DEV_DRV_NEED_MAPPING	RTE_PCI_DRV_NEED_MAPPING
+/** Device needs to be unbound even if no module is provided */
+#define RTE_ETH_DEV_DRV_FORCE_UNBIND	RTE_PCI_DRV_FORCE_UNBIND
+/** Device supports link state interrupt */
+#define RTE_ETH_DEV_INTR_LSC	RTE_PCI_DRV_INTR_LSC
+/** Device  supports detaching capability */
+#define RTE_ETH_DEV_DETACHABLE	RTE_PCI_DRV_DETACHABLE
+/** Device  is a bonded device */
+#define RTE_ETH_DEV_BONDED	0x0020
+
 /**
  * @internal
  * The pool of *rte_eth_dev* structures. The size of the pool