From: Declan Doherty <declan.doherty@intel.com> To: dev@dpdk.org Subject: [dpdk-dev] [PATCH v10 3/5] eal: support link bonding device initialization Date: Fri, 27 Jun 2014 11:18:42 +0100 Message-ID: <1403864324-12022-4-git-send-email-declan.doherty@intel.com> (raw) In-Reply-To: <1403827075-9192-1-git-send-email-thomas.monjalon@6wind.com> Updating functionality in EAL to support adding link bonding devices via –vdev option. Link bonding devices will be initialized after all physical devices have been probed and initialized. Signed-off-by: Declan Doherty <declan.doherty@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com> --- lib/librte_eal/bsdapp/eal/eal.c | 10 ++++- lib/librte_eal/common/eal_common_dev.c | 58 ++++++++++++++++++-------- lib/librte_eal/common/eal_common_pci.c | 3 + lib/librte_eal/common/include/eal_private.h | 7 --- lib/librte_eal/common/include/rte_dev.h | 14 ++++++- lib/librte_eal/linuxapp/eal/eal.c | 11 +++++- 6 files changed, 74 insertions(+), 29 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index a1f014f..c53f63e 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -874,7 +874,7 @@ rte_eal_init(int argc, char **argv) rte_eal_mcfg_complete(); - if (rte_eal_dev_init() < 0) + if (rte_eal_dev_init(PMD_INIT_PRE_PCI_PROBE) < 0) rte_panic("Cannot init pmd devices\n"); RTE_LCORE_FOREACH_SLAVE(i) { @@ -906,6 +906,14 @@ rte_eal_init(int argc, char **argv) rte_eal_mp_remote_launch(sync_func, NULL, SKIP_MASTER); rte_eal_mp_wait_lcore(); + /* Probe & Initialize PCI devices */ + if (rte_eal_pci_probe()) + rte_panic("Cannot probe PCI\n"); + + /* Initialize any outstanding devices */ + if (rte_eal_dev_init(PMD_INIT_POST_PCI_PROBE) < 0) + rte_panic("Cannot init pmd devices\n"); + return fctret; } diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index eae5656..1194419 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -62,7 +62,7 @@ rte_eal_driver_unregister(struct rte_driver *driver) } int -rte_eal_dev_init(void) +rte_eal_dev_init(uint8_t init_pri) { struct rte_devargs *devargs; struct rte_driver *driver; @@ -80,30 +80,52 @@ rte_eal_dev_init(void) continue; TAILQ_FOREACH(driver, &dev_driver_list, next) { - if (driver->type != PMD_VDEV) - continue; + /* RTE_DEVTYPE_VIRTUAL can only be a virtual or bonded device, + * virtual devices are initialized pre PCI probing and bonded + * device are post pci probing */ + if ((driver->type == PMD_VDEV && init_pri == + PMD_INIT_PRE_PCI_PROBE) || + (driver->type == PMD_BDEV && init_pri == + PMD_INIT_POST_PCI_PROBE)) { - /* search a driver prefix in virtual device name */ - if (!strncmp(driver->name, devargs->virtual.drv_name, - strlen(driver->name))) { - driver->init(devargs->virtual.drv_name, - devargs->args); - break; + /* search a driver prefix in virtual device name */ + if (!strncmp(driver->name, devargs->virtual.drv_name, + strlen(driver->name))) { + printf("init (%u) %s\n", init_pri, devargs->virtual.drv_name); + driver->init(devargs->virtual.drv_name, + devargs->args); + break; + } } } - if (driver == NULL) { - rte_panic("no driver found for %s\n", - devargs->virtual.drv_name); + /* If initializing pre PCI probe, then we don't expect a bonded driver + * to be found */ + if (init_pri == PMD_INIT_PRE_PCI_PROBE && + strncmp(PMD_BOND_NAME, devargs->virtual.drv_name, + strlen(PMD_BOND_NAME)) != 0) { + if (driver == NULL) { + rte_panic("no driver found for virtual device %s\n", + devargs->virtual.drv_name); + } + } else if (init_pri == PMD_INIT_POST_PCI_PROBE && + strncmp(PMD_BOND_NAME, devargs->virtual.drv_name, + strlen(PMD_BOND_NAME)) == 0) { + if (driver == NULL) { + rte_panic("no driver found for bonded device %s\n", + devargs->virtual.drv_name); + } } } - /* Once the vdevs are initalized, start calling all the pdev drivers */ - TAILQ_FOREACH(driver, &dev_driver_list, next) { - if (driver->type != PMD_PDEV) - continue; - /* PDEV drivers don't get passed any parameters */ - driver->init(NULL, NULL); + /* Once the vdevs are initialized, start calling all the pdev drivers */ + if (init_pri == PMD_INIT_PRE_PCI_PROBE) { + TAILQ_FOREACH(driver, &dev_driver_list, next) { + if (driver->type != PMD_PDEV) + continue; + /* PDEV drivers don't get passed any parameters */ + driver->init(NULL, NULL); + } } return 0; } diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index af809a8..c637361 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -150,6 +150,9 @@ rte_eal_pci_probe(void) probe_all = 1; TAILQ_FOREACH(dev, &pci_device_list, next) { + /* check if device has already been initialized */ + if (dev->driver != NULL) + continue; /* set devargs in PCI structure */ devargs = pci_devargs_lookup(dev); diff --git a/lib/librte_eal/common/include/eal_private.h b/lib/librte_eal/common/include/eal_private.h index 232fcec..b440ffb 100644 --- a/lib/librte_eal/common/include/eal_private.h +++ b/lib/librte_eal/common/include/eal_private.h @@ -196,11 +196,4 @@ int rte_eal_intr_init(void); */ int rte_eal_alarm_init(void); -/** - * This function initialises any virtual devices - * - * This function is private to the EAL. - */ -int rte_eal_dev_init(void); - #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index f7e3a10..d89f1a5 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -62,6 +62,16 @@ typedef int (rte_dev_init_t)(const char *name, const char *args); enum pmd_type { PMD_VDEV = 0, PMD_PDEV = 1, + PMD_BDEV = 2, /**< Poll Mode Driver Bonded Device*/ +}; + +#define PMD_BOND_NAME "eth_bond" + +/** + * Driver initialization */ +enum pmd_init_priority { + PMD_INIT_PRE_PCI_PROBE = 0, + PMD_INIT_POST_PCI_PROBE = 1, }; /** @@ -93,9 +103,9 @@ void rte_eal_driver_register(struct rte_driver *driver); void rte_eal_driver_unregister(struct rte_driver *driver); /** - * Initalize all the registered drivers in this process + * Initialize all the registered drivers in this process */ -int rte_eal_dev_init(void); +int rte_eal_dev_init(uint8_t init_priority); #define PMD_REGISTER_DRIVER(d)\ void devinitfn_ ##d(void);\ diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index d204387..573fd06 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -75,6 +75,7 @@ #include <rte_atomic.h> #include <malloc_heap.h> #include <rte_eth_ring.h> +#include <rte_dev.h> #include "eal_private.h" #include "eal_thread.h" @@ -1097,7 +1098,7 @@ rte_eal_init(int argc, char **argv) RTE_LOG(DEBUG, EAL, "Master core %u is ready (tid=%x)\n", rte_config.master_lcore, (int)thread_id); - if (rte_eal_dev_init() < 0) + if (rte_eal_dev_init(PMD_INIT_PRE_PCI_PROBE) < 0) rte_panic("Cannot init pmd devices\n"); RTE_LCORE_FOREACH_SLAVE(i) { @@ -1127,6 +1128,14 @@ rte_eal_init(int argc, char **argv) rte_eal_mp_remote_launch(sync_func, NULL, SKIP_MASTER); rte_eal_mp_wait_lcore(); + /* Probe & Initialize PCI devices */ + if (rte_eal_pci_probe()) + rte_panic("Cannot probe PCI\n"); + + /* Initialize any outstanding devices */ + if (rte_eal_dev_init(PMD_INIT_POST_PCI_PROBE) < 0) + rte_panic("Cannot init pmd devices\n"); + return fctret; } -- 1.7.0.7
next prev parent reply other threads:[~2014-06-27 10:18 UTC|newest] Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-05-28 15:32 [dpdk-dev] [PATCH 0/4] Link Bonding Library declan.doherty 2014-05-28 15:32 ` [dpdk-dev] [PATCH 1/4] " declan.doherty 2014-05-28 16:54 ` Shaw, Jeffrey B 2014-05-29 13:32 ` Doherty, Declan 2014-05-28 15:32 ` [dpdk-dev] [PATCH 2/4] Link bonding unit tests declan.doherty 2014-05-28 15:32 ` [dpdk-dev] [PATCH 3/4] Link bonding integration into testpmd declan.doherty 2014-05-28 15:32 ` [dpdk-dev] [PATCH 4/4] Add Link Bonding Library to Doxygen declan.doherty 2014-05-28 17:49 ` [dpdk-dev] [PATCH 0/4] Link Bonding Library Neil Horman 2014-05-29 10:33 ` Doherty, Declan 2014-05-29 11:33 ` Neil Horman 2014-05-29 3:23 ` Cao, Waterman 2014-05-29 10:35 ` Doherty, Declan 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 " declan.doherty 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 1/4] " declan.doherty 2014-06-04 15:18 ` declan.doherty 2014-06-05 15:15 ` Stephen Hemminger 2014-06-06 9:07 ` Doherty, Declan 2014-06-06 15:13 ` Stephen Hemminger 2014-06-09 21:11 ` Eric Kinzie 2014-06-13 14:03 ` Doherty, Declan 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 2/4] Link bonding unit tests, including: - code to generate packet bursts for testing rx and tx functionality of bonded device - virtual/stubbed out ethdev for use as slave ethdev in testing - checkpack fixes declan.doherty 2014-06-04 15:18 ` declan.doherty 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 0/4] Link Bonding Library declan.doherty 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 3/4] Adding link bonding support to testpmd. - Includes the ability to create new bonded devices. - Add /remove bonding slave devices. - Interogate bonded device stats/configuration - Change bonding modes and select balance transmit polices declan.doherty 2014-06-04 15:18 ` [dpdk-dev] [PATCH v2 4/4] Add Link Bonding Library to Doxygen declan.doherty 2014-06-04 16:10 ` [dpdk-dev] [PATCH v2 0/4] Link Bonding Library Doherty, Declan 2014-06-05 8:03 ` De Lara Guarch, Pablo 2014-06-05 11:03 ` Neil Horman 2014-06-06 8:23 ` Doherty, Declan 2014-06-06 14:54 ` Neil Horman 2014-06-13 14:56 ` Doherty, Declan 2014-06-13 15:11 ` Neil Horman 2014-06-06 3:26 ` Cao, Waterman 2014-06-11 16:33 ` Thomas Monjalon 2014-06-13 14:08 ` Doherty, Declan 2014-06-13 15:15 ` Thomas Monjalon 2014-06-13 14:41 ` [dpdk-dev] [PATCH v3 0/5] Link Bonding PMD Library Declan Doherty 2014-06-13 14:41 ` [dpdk-dev] [PATCH v3 1/5] " Declan Doherty 2014-06-13 14:41 ` [dpdk-dev] [PATCH v3 2/5] Link Bonding PMD Library (librte_eal/librte_ether link bonding support changes) Declan Doherty 2014-06-13 16:08 ` Neil Horman 2014-06-13 18:34 ` Doherty, Declan 2014-06-13 19:38 ` Neil Horman 2014-06-16 8:59 ` Doherty, Declan 2014-06-16 11:07 ` Neil Horman 2014-06-16 16:17 ` Richardson, Bruce 2014-06-16 17:47 ` Neil Horman 2014-06-16 18:07 ` Richardson, Bruce 2014-06-16 18:09 ` Thomas Monjalon 2014-06-13 21:59 ` Stephen Hemminger 2014-06-16 7:59 ` Doherty, Declan 2014-06-13 14:42 ` [dpdk-dev] [PATCH v3 3/5] Link Bonding PMD Library (Unit Test Suite) Declan Doherty 2014-06-13 14:42 ` [dpdk-dev] [PATCH v3 4/5] Link Bonding PMD Library (testpmd link bonding API support) Declan Doherty 2014-06-13 14:42 ` [dpdk-dev] [PATCH v3 5/5] Link Bonding PMD Library (Doxygen Additions) Declan Doherty 2014-06-13 15:20 ` [dpdk-dev] [PATCH v3 0/5] Link Bonding PMD Library Neil Horman 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 0/6] Link Bonding Library Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 " Declan Doherty 2014-06-18 16:18 ` Neil Horman 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 " Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 " Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 " Declan Doherty 2014-06-26 16:02 ` De Lara Guarch, Pablo 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 0/5] link bonding Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 1/5] bond: new link bonding library Thomas Monjalon 2014-06-27 0:45 ` Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 2/5] ethdev: add unique name to devices Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 3/5] eal: support link bonding device initialization Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 4/5] bond: unit tests Thomas Monjalon 2014-06-26 23:57 ` [dpdk-dev] [PATCH v9 5/5] bond: testpmd support Thomas Monjalon 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 0/5] link bonding Declan Doherty 2014-06-27 20:58 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 0/5] link bonding library Declan Doherty 2014-06-30 9:21 ` Thomas Monjalon 2014-06-30 9:28 ` Doherty, Declan 2014-07-01 22:01 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 1/5] bond: new " Declan Doherty 2014-06-30 9:13 ` Thomas Monjalon 2014-06-30 22:29 ` Robert Sanford 2014-07-01 14:16 ` Thomas Monjalon 2014-07-01 14:19 ` Doherty, Declan 2014-07-01 14:26 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 2/5] ethdev: add unique name to devices Declan Doherty 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 3/5] eal: support link bonding device initialization Declan Doherty 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 4/5] bond: unit tests Declan Doherty 2014-06-30 8:56 ` Thomas Monjalon 2014-06-29 17:49 ` [dpdk-dev] [PATCH v11 5/5] bond: testpmd support Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 1/5] bond: new link bonding library Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 2/5] ethdev: add unique name to devices Declan Doherty 2014-06-27 10:18 ` Declan Doherty [this message] 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 4/5] bond: unit tests Declan Doherty 2014-06-27 10:18 ` [dpdk-dev] [PATCH v10 5/5] bond: testpmd support Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 4/6] Link bonding Unit Tests Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 5/6] testpmd link bonding additions Declan Doherty 2014-06-25 20:07 ` [dpdk-dev] [PATCH v8 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-25 13:54 ` Thomas Monjalon 2014-06-25 14:41 ` Doherty, Declan 2014-06-25 16:00 ` Thomas Monjalon 2014-06-25 16:15 ` Richardson, Bruce 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 4/6] Link bonding Unit Tests Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 5/6] testpmd link bonding additions Declan Doherty 2014-06-24 16:03 ` [dpdk-dev] [PATCH v7 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-25 13:43 ` Thomas Monjalon 2014-06-25 14:19 ` Doherty, Declan 2014-06-25 14:23 ` Thomas Monjalon 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 4/6] Link bonding Unit Tests Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 5/6] testpmd link bonding additions Declan Doherty 2014-06-24 14:52 ` [dpdk-dev] [PATCH v6 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 1/6] Link Bonding Library (lib/librte_pmd_bond) Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 4/6] Link bonding Unit Tests Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 5/6] testpmd link bonding additions Declan Doherty 2014-06-18 16:14 ` [dpdk-dev] [PATCH v5 6/6] Link Bonding Library doxygen additions Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 1/6] Link Bonding Library (lib/librte_pmd_bond) initial release with support for Mode 0 - Round Robin Mode 1 - Active Backup Mode 2 - Balance -> Supports 3 transmit polices (layer 2, layer 2+3, la Mode 3 - Broadcast Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 2/6] Support for unique interface naming of pmds Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 3/6] EAL support for link bonding device initialization Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 4/6] Link bonding Unit Tests Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 5/6] testpmd link bonding additions Declan Doherty 2014-06-16 11:18 ` [dpdk-dev] [PATCH v4 6/6] Link Bonding Library doxygen additions 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=1403864324-12022-4-git-send-email-declan.doherty@intel.com \ --to=declan.doherty@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
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git