[dpdk-dev] [PATCH 04/14] eal/common: introduce function to_pci_driver

Jan Viktorin viktorin at rehivetech.com
Mon Jan 4 21:08:16 CET 2016


Signed-off-by: Jan Viktorin <viktorin at rehivetech.com>
---
 lib/librte_cryptodev/rte_cryptodev.c    |  3 +--
 lib/librte_eal/common/include/rte_pci.h | 12 ++++++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index f09f67e..682c1aa 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -424,8 +424,7 @@ rte_cryptodev_pmd_driver_register(struct rte_cryptodev_driver *cryptodrv,
 {
 	/* Call crypto device initialization directly if device is virtual */
 	if (type == PMD_VDEV)
-		return rte_cryptodev_init((struct rte_pci_driver *)cryptodrv,
-				NULL);
+		return rte_cryptodev_init(to_pci_driver(cryptodrv), NULL);
 
 	/*
 	 * Register PCI driver for physical device intialisation during
diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
index 54d0fe2..1321654 100644
--- a/lib/librte_eal/common/include/rte_pci.h
+++ b/lib/librte_eal/common/include/rte_pci.h
@@ -82,6 +82,7 @@ extern "C" {
 #include <stdint.h>
 #include <inttypes.h>
 
+#include <rte_debug.h>
 #include <rte_interrupts.h>
 
 TAILQ_HEAD(pci_device_list, rte_pci_device); /**< PCI devices in D-linked Q. */
@@ -215,6 +216,17 @@ struct rte_pci_driver {
 	uint32_t drv_flags;                     /**< Flags contolling handling of device. */
 };
 
+static inline struct rte_pci_driver *
+to_pci_driver(void *p)
+{
+	unsigned int *magic = (unsigned int *) p;
+	if (*magic == RTE_PCI_DRV_MAGIC)
+		return (struct rte_pci_driver *) p;
+
+	rte_panic("%s: bad cast (%p: %08x)\n", __func__, p, *magic);
+	return NULL;
+}
+
 /** Device needs PCI BAR mapping (done with either IGB_UIO or VFIO) */
 #define RTE_PCI_DRV_NEED_MAPPING 0x0001
 /** Device driver must be registered several times until failure - deprecated */
-- 
2.6.3



More information about the dev mailing list