Add support for sharing BPHY PMD across multiple running processes. In scenarios where resources need to be shared across processes user-space need to ensure serialization.
Signed-off-by: Tomasz Duszynski <tduszyn...@marvell.com> Reviewed-by: Jerin Jacob Kollanukkaran <jer...@marvell.com> Tested-by: Jerin Jacob Kollanukkaran <jer...@marvell.com> --- doc/guides/rawdevs/cnxk_bphy.rst | 8 ++++++++ drivers/raw/cnxk_bphy/cnxk_bphy.c | 16 ++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/doc/guides/rawdevs/cnxk_bphy.rst b/doc/guides/rawdevs/cnxk_bphy.rst index 2490912534..b544b543a3 100644 --- a/doc/guides/rawdevs/cnxk_bphy.rst +++ b/doc/guides/rawdevs/cnxk_bphy.rst @@ -19,6 +19,14 @@ The BPHY CGX/RPM implements following features in the rawdev API: - Access to BPHY CGX/RPM via a set of predefined messages - Access to BPHY memory - Custom interrupt handlers +- Multiprocess aware + +Limitations +----------- + +In multiprocess mode user-space application must ensure no resources +sharing takes place. Otherwise, user-space application should ensure +synchronization. Device Setup ------------ diff --git a/drivers/raw/cnxk_bphy/cnxk_bphy.c b/drivers/raw/cnxk_bphy/cnxk_bphy.c index d42cca649c..15dbc4c1a6 100644 --- a/drivers/raw/cnxk_bphy/cnxk_bphy.c +++ b/drivers/raw/cnxk_bphy/cnxk_bphy.c @@ -359,10 +359,12 @@ bphy_rawdev_probe(struct rte_pci_driver *pci_drv, bphy_dev->mem.res2 = pci_dev->mem_resource[2]; bphy_dev->bphy.pci_dev = pci_dev; - ret = roc_bphy_dev_init(&bphy_dev->bphy); - if (ret) { - rte_rawdev_pmd_release(bphy_rawdev); - return ret; + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + ret = roc_bphy_dev_init(&bphy_dev->bphy); + if (ret) { + rte_rawdev_pmd_release(bphy_rawdev); + return ret; + } } return 0; @@ -390,8 +392,10 @@ bphy_rawdev_remove(struct rte_pci_device *pci_dev) return -EINVAL; } - bphy_dev = (struct bphy_device *)rawdev->dev_private; - roc_bphy_dev_fini(&bphy_dev->bphy); + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + bphy_dev = (struct bphy_device *)rawdev->dev_private; + roc_bphy_dev_fini(&bphy_dev->bphy); + } return rte_rawdev_pmd_release(rawdev); } -- 2.34.1