All of lore.kernel.org
 help / color / mirror / Atom feed
From: Radu Nicolau <radu.nicolau@intel.com>
To: dev@dpdk.org
Cc: Radu Nicolau <radu.nicolau@intel.com>
Subject: [RFC][PATCH 2/5] pci: allow shared device instances.
Date: Tue,  9 May 2017 15:57:56 +0100	[thread overview]
Message-ID: <1494341879-18718-3-git-send-email-radu.nicolau@intel.com> (raw)
In-Reply-To: <1494341879-18718-1-git-send-email-radu.nicolau@intel.com>

Updated PCI initialization code to allow devices to be shared across multiple PMDs.

Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
---
 lib/librte_eal/common/eal_common_pci.c  | 15 ++++++++++++---
 lib/librte_eal/common/include/rte_pci.h | 18 ++++++++++++++----
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c
index b749991..8fdc38f 100644
--- a/lib/librte_eal/common/eal_common_pci.c
+++ b/lib/librte_eal/common/eal_common_pci.c
@@ -203,7 +203,7 @@ static int
 rte_pci_probe_one_driver(struct rte_pci_driver *dr,
 			 struct rte_pci_device *dev)
 {
-	int ret;
+	int ret = 1;
 	struct rte_pci_addr *loc;
 
 	if ((dr == NULL) || (dev == NULL))
@@ -254,6 +254,11 @@ rte_pci_probe_one_driver(struct rte_pci_driver *dr,
 			rte_pci_unmap_device(dev);
 	}
 
+	if (!dr->id_table->shared || ret) {
+	        return ret;
+	  }
+	/* else continue to parse the table for another match */
+
 	return ret;
 }
 
@@ -303,6 +308,7 @@ pci_probe_all_drivers(struct rte_pci_device *dev)
 {
 	struct rte_pci_driver *dr = NULL;
 	int rc = 0;
+	int res = 1;
 
 	if (dev == NULL)
 		return -1;
@@ -319,9 +325,12 @@ pci_probe_all_drivers(struct rte_pci_device *dev)
 		if (rc > 0)
 			/* positive value means driver doesn't support it */
 			continue;
-		return 0;
+		if (dr->id_table->shared)
+		  res = 0;
+		else
+		  return 0;
 	}
-	return 1;
+	return res;
 }
 
 /*
diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
index ab64c63..3a66ef4 100644
--- a/lib/librte_eal/common/include/rte_pci.h
+++ b/lib/librte_eal/common/include/rte_pci.h
@@ -135,6 +135,7 @@ struct rte_pci_id {
 	uint16_t device_id;           /**< Device ID or PCI_ANY_ID. */
 	uint16_t subsystem_vendor_id; /**< Subsystem vendor ID or PCI_ANY_ID. */
 	uint16_t subsystem_device_id; /**< Subsystem device ID or PCI_ANY_ID. */
+	uint8_t  shared;              /**< Device can be shared by multiple drivers. */
 };
 
 /**
@@ -187,22 +188,31 @@ struct rte_pci_device {
 
 #ifdef __cplusplus
 /** C++ macro used to help building up tables of device IDs */
-#define RTE_PCI_DEVICE(vend, dev) \
+#define _RTE_PCI_DEVICE_SH(vend, dev, sh)  \
 	RTE_CLASS_ANY_ID,         \
 	(vend),                   \
 	(dev),                    \
 	PCI_ANY_ID,               \
-	PCI_ANY_ID
+	PCI_ANY_ID,               \
+	(sh)
 #else
 /** Macro used to help building up tables of device IDs */
-#define RTE_PCI_DEVICE(vend, dev)          \
+#define _RTE_PCI_DEVICE_SH(vend, dev, sh)  \
 	.class_id = RTE_CLASS_ANY_ID,      \
 	.vendor_id = (vend),               \
 	.device_id = (dev),                \
 	.subsystem_vendor_id = PCI_ANY_ID, \
-	.subsystem_device_id = PCI_ANY_ID
+	.subsystem_device_id = PCI_ANY_ID, \
+	.shared = (sh)
 #endif
 
+#define RTE_PCI_DEVICE(vend, dev)       \
+    _RTE_PCI_DEVICE_SH((vend), (dev), 0)
+#define RTE_PCI_DEVICE_SH(vend, dev)    \
+    _RTE_PCI_DEVICE_SH((vend), (dev), 1)
+
+struct rte_pci_driver;
+
 /**
  * Initialisation function for the driver called during PCI probing.
  */
-- 
2.7.4

  parent reply	other threads:[~2017-05-09 15:01 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-09 14:57 [RFC][PATCH 0/5] cryptodev: Adding support for inline crypto processing of IPsec flows Radu Nicolau
2017-05-09 14:57 ` [RFC][PATCH 1/5] cryptodev: Updated API to add suport for inline IPSec Radu Nicolau
2017-05-09 14:57 ` Radu Nicolau [this message]
2017-05-10  9:09   ` [RFC][PATCH 2/5] pci: allow shared device instances Thomas Monjalon
2017-05-10 10:11     ` Radu Nicolau
2017-05-10 10:28       ` Thomas Monjalon
2017-05-10 10:47         ` Radu Nicolau
2017-05-10 10:52         ` Declan Doherty
2017-05-10 11:08           ` Jerin Jacob
2017-05-10 11:31             ` Declan Doherty
2017-05-10 12:18               ` Jerin Jacob
2017-05-10 11:37             ` Thomas Monjalon
2017-05-09 14:57 ` [RFC][PATCH 3/5] mbuff: added inline IPSec flags and metadata Radu Nicolau
2017-05-09 14:57 ` [RFC][PATCH 4/5] cryptodev: added new crypto PMD supporting inline IPSec for IXGBE Radu Nicolau
2017-05-09 14:57 ` [RFC][PATCH 5/5] examples: updated IPSec sample app to support inline IPSec Radu Nicolau
2017-05-10 16:07 ` [RFC][PATCH 0/5] cryptodev: Adding support for inline crypto processing of IPsec flows Boris Pismenny
2017-05-10 17:21   ` Declan Doherty
2017-05-11  5:27     ` Boris Pismenny
2017-05-11  9:05       ` Radu Nicolau
2017-05-16 21:46 ` Thomas Monjalon
2017-05-24 10:06   ` Declan Doherty

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=1494341879-18718-3-git-send-email-radu.nicolau@intel.com \
    --to=radu.nicolau@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.