All of lore.kernel.org
 help / color / mirror / Atom feed
From: Parav Pandit <parav@mellanox.com>
To: Saeed Mahameed <saeedm@mellanox.com>,
	Jiri Pirko <jiri@mellanox.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"michal.lkml@markovi.net" <michal.lkml@markovi.net>
Subject: RE: [RFC net-next 8/8] net/mlx5: Add subdev driver to bind to subdev devices
Date: Mon, 4 Mar 2019 16:45:15 +0000	[thread overview]
Message-ID: <VI1PR0501MB2271C2252F577D77D9E7D2D3D1710@VI1PR0501MB2271.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <b4d8f1f9b53f589e2e60c9aa8bc677ac38144987.camel@mellanox.com>

Hi Saeed,

> -----Original Message-----
> From: Saeed Mahameed
> Sent: Friday, March 1, 2019 4:12 PM
> To: Jiri Pirko <jiri@mellanox.com>; netdev@vger.kernel.org; linux-
> kernel@vger.kernel.org; Parav Pandit <parav@mellanox.com>;
> davem@davemloft.net; gregkh@linuxfoundation.org;
> michal.lkml@markovi.net
> Subject: Re: [RFC net-next 8/8] net/mlx5: Add subdev driver to bind to
> subdev devices
> 
> On Thu, 2019-02-28 at 23:37 -0600, Parav Pandit wrote:
> > Add a subdev driver to probe the subdev devices and create fake
> > netdevice for it.
> >
> > Signed-off-by: Parav Pandit <parav@mellanox.com>
> > ---
> >  drivers/net/ethernet/mellanox/mlx5/core/Makefile   |  2 +-
> >  drivers/net/ethernet/mellanox/mlx5/core/main.c     |  8 +-
> >  .../net/ethernet/mellanox/mlx5/core/mlx5_core.h    |  3 +
> >  .../ethernet/mellanox/mlx5/core/subdev_driver.c    | 93
> > ++++++++++++++++++++++
> >  4 files changed, 104 insertions(+), 2 deletions(-)  create mode
> > 100644 drivers/net/ethernet/mellanox/mlx5/core/subdev_driver.c
> >
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> > b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> > index f218789..c8aeaf1 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
> > @@ -16,7 +16,7 @@ mlx5_core-y :=	main.o cmd.o debugfs.o fw.o
> > eq.o uar.o pagealloc.o \
> >  		transobj.o vport.o sriov.o fs_cmd.o fs_core.o \
> >  		fs_counters.o rl.o lag.o dev.o events.o wq.o lib/gid.o \
> >  		lib/devcom.o diag/fs_tracepoint.o diag/fw_tracer.o
> > -mlx5_core-$(CONFIG_SUBDEV) += subdev.o
> > +mlx5_core-$(CONFIG_SUBDEV) += subdev.o subdev_driver.o
> >
> >  #
> >  # Netdev basic
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > index 5f8cf0d..7dfa8c4 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> > @@ -1548,7 +1548,11 @@ static int __init init(void)
> >  	mlx5e_init();
> >  #endif
> >
> > -	return 0;
> > +	err = subdev_register_driver(&mlx5_subdev_driver);
> > +	if (err)
> > +		pci_unregister_driver(&mlx5_core_driver);
> > +
> > +	return err;
> >
> >  err_debug:
> >  	mlx5_unregister_debugfs();
> > @@ -1557,6 +1561,8 @@ static int __init init(void)
> >
> >  static void __exit cleanup(void)
> >  {
> > +	subdev_unregister_driver(&mlx5_subdev_driver);
> > +
> >  #ifdef CONFIG_MLX5_CORE_EN
> >  	mlx5e_cleanup();
> >  #endif
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
> > b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
> > index 2a54148..1b733c7 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h
> > @@ -41,12 +41,15 @@
> >  #include <linux/ptp_clock_kernel.h>
> >  #include <linux/mlx5/cq.h>
> >  #include <linux/mlx5/fs.h>
> > +#include <linux/subdev_bus.h>
> >
> >  #define DRIVER_NAME "mlx5_core"
> >  #define DRIVER_VERSION "5.0-0"
> >
> >  extern uint mlx5_core_debug_mask;
> >
> > +extern struct subdev_driver mlx5_subdev_driver;
> > +
> >  #define mlx5_core_dbg(__dev, format, ...)
> > \
> >  	dev_dbg(&(__dev)->pdev->dev, "%s:%d:(pid %d): " format,
> 
> > \
> >  		 __func__, __LINE__, current->pid,
> > \
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/subdev_driver.c
> > b/drivers/net/ethernet/mellanox/mlx5/core/subdev_driver.c
> > new file mode 100644
> > index 0000000..880aa4f
> > --- /dev/null
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/subdev_driver.c
> > @@ -0,0 +1,93 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +// Copyright (c) 2018-19 Mellanox Technologies
> > +
> > +#include <linux/module.h>
> > +#include <linux/dma-mapping.h>
> > +#include <linux/subdev_bus.h>
> > +#include <linux/subdev_ids.h>
> > +#include <linux/etherdevice.h>
> > +
> > +struct mlx5_subdev_ndev {
> > +	struct net_device ndev;
> > +};
> > +
> > +static void mlx5_dma_test(struct device *dev) {
> > +	dma_addr_t pa;
> > +	void *va;
> > +
> > +	va = dma_alloc_coherent(dev, 4096, &pa, GFP_KERNEL);
> > +	if (va)
> > +		dma_free_coherent(dev, 4096, va, pa); }
> > +
> > +static struct net_device *ndev;
> > +
> > +static int mlx5e_subdev_open(struct net_device *netdev) {
> > +	return 0;
> > +}
> > +
> > +static int mlx5e_subdev_close(struct net_device *netdev) {
> > +	return 0;
> > +}
> > +
> > +static netdev_tx_t
> > +mlx5e_subdev_xmit(struct sk_buff *skb, struct net_device *netdev) {
> > +	return NETDEV_TX_BUSY;
> > +}
> > +
> > +const struct net_device_ops mlx5e_subdev_netdev_ops = {
> > +	.ndo_open                = mlx5e_subdev_open,
> > +	.ndo_stop                = mlx5e_subdev_close,
> > +	.ndo_start_xmit          = mlx5e_subdev_xmit,
> > +};
> > +
> > +static int mlx5_subdev_probe(struct device *dev) {
> > +	int err;
> > +
> > +	mlx5_dma_test(dev);
> 
> Hi Parav, can you please shed some light on how do you plan to
> communicate with the parent device ? (pci_dev and its running driver
> instance), We will need to share some resources, such as IRQs/BARs/etc ..,
> and maybe some HW objects which are going to be managed by the parent
> pci device driver.
> 
Since mlx5 driver works on its pci device, in mlx5_subdev_probe(struct device *device)
device->parent is a PCI device for driver to use.

> Just allocating a dma buffer doesn't mean anything, the dma buffer is just
> bound to the generic device.
>

dma buffer allocation is just to make sure that stack and core and rdma ULPs dma allocations in same way as PCI device.

 > > +	/* Only one device supported in rfc */
> > +	if (ndev)
> > +		return 0;
> > +
> > +	ndev = alloc_etherdev_mqs(sizeof(struct mlx5_subdev_ndev), 1,
> > 1);
> > +	if (!ndev)
> > +		return -ENOMEM;
> > +
> > +	SET_NETDEV_DEV(ndev, dev);
> > +	ndev->netdev_ops = &mlx5e_subdev_netdev_ops;
> > +	err = register_netdev(ndev);
> > +	if (err) {
> > +		free_netdev(ndev);
> > +		ndev = NULL;
> > +	}
> > +	return err;
> > +}
> > +
> > +static int mlx5_subdev_remove(struct device *dev) {
> > +	if (ndev) {
> > +		unregister_netdev(ndev);
> > +		free_netdev(ndev);
> > +		ndev = NULL;
> > +	}
> > +	return 0;
> > +}
> > +
> > +static const struct subdev_id mlx5_subdev_id_table[] = {
> > +	{ .vendor_id = SUBDEV_VENDOR_ID_MELLANOX,
> > +	  .device_id = SUBDEV_DEVICE_ID_MELLANOX_SF },
> > +	{ 0, }
> > +};
> > +MODULE_DEVICE_TABLE(subdev, mlx5_subdev_id_table);
> > +
> > +struct subdev_driver mlx5_subdev_driver = {
> > +	.id_table = mlx5_subdev_id_table,
> > +	.driver.name = "mlx5_subdev_driver",
> > +	.driver.probe = mlx5_subdev_probe,
> > +	.driver.remove = mlx5_subdev_remove, };

  reply	other threads:[~2019-03-04 16:45 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-01  5:37 [RFC net-next 0/8] Introducing subdev bus and devlink extension Parav Pandit
2019-03-01  5:37 ` [RFC net-next 1/8] subdev: Introducing subdev bus Parav Pandit
2019-03-01  7:17   ` Greg KH
2019-03-01 16:35     ` Parav Pandit
2019-03-01 17:00       ` Greg KH
2019-03-26 11:48     ` Lorenzo Pieralisi
2019-03-01  5:37 ` [RFC net-next 2/8] subdev: Introduce pm callbacks Parav Pandit
2019-03-01  5:37 ` [RFC net-next 3/8] modpost: Add support for subdev device id table Parav Pandit
2019-03-01  5:37 ` [RFC net-next 4/8] devlink: Introduce and use devlink_init/cleanup() in alloc/free Parav Pandit
2019-03-01  5:37 ` [RFC net-next 5/8] devlink: Add variant of devlink_register/unregister Parav Pandit
2019-03-01  5:37 ` [RFC net-next 6/8] devlink: Add support for devlink subdev lifecycle Parav Pandit
2019-03-01  5:37 ` [RFC net-next 7/8] net/mlx5: Add devlink subdev life cycle command support Parav Pandit
2019-03-01  7:18   ` Greg KH
2019-03-01 16:04     ` Parav Pandit
2019-03-01  5:37 ` [RFC net-next 8/8] net/mlx5: Add subdev driver to bind to subdev devices Parav Pandit
2019-03-01  7:21   ` Greg KH
2019-03-01 17:21     ` Parav Pandit
2019-03-05  7:13       ` Greg KH
2019-03-05 17:57         ` Parav Pandit
2019-03-05 19:27           ` Greg KH
2019-03-05 21:37             ` Parav Pandit
2019-03-01 22:12   ` Saeed Mahameed
2019-03-04 16:45     ` Parav Pandit [this message]
2019-03-01 20:03 ` [RFC net-next 0/8] Introducing subdev bus and devlink extension Jakub Kicinski
2019-03-04  4:41   ` Parav Pandit
2019-03-05  1:35     ` Jakub Kicinski
2019-03-05 19:46       ` Parav Pandit
2019-03-05 22:39         ` Kirti Wankhede
2019-03-05 23:17           ` Parav Pandit
2019-03-05 23:44             ` Parav Pandit
2019-03-06  0:44               ` Parav Pandit
2019-03-06  3:51                 ` Kirti Wankhede
2019-03-06  5:42                   ` Parav Pandit
2019-03-07 19:04                     ` Kirti Wankhede
2019-03-07 20:27                       ` Parav Pandit
2019-03-07 20:53                         ` Kirti Wankhede
2019-03-07 21:02                           ` Parav Pandit
2019-03-07 21:07                             ` Kirti Wankhede
2019-03-07 21:21                               ` Parav Pandit
2019-03-07 22:01                                 ` Kirti Wankhede
2019-03-07 22:31                                   ` Parav Pandit
2019-03-08 12:19                                     ` Kirti Wankhede
2019-03-08 17:09                                       ` Parav Pandit
2019-03-05  1:45     ` Jakub Kicinski
2019-03-05 16:52       ` Parav Pandit
2021-05-31 10:36         ` moyufeng
2021-06-01  5:37           ` Jakub Kicinski
2021-06-01  7:33             ` Yunsheng Lin
2021-06-01 21:34               ` Jakub Kicinski
2021-06-02  2:24                 ` Yunsheng Lin
2021-06-02 16:34                   ` Jakub Kicinski
2021-06-03  3:46                     ` Yunsheng Lin
2021-06-03 17:53                       ` Jakub Kicinski
2021-06-04  1:18                         ` Yunsheng Lin
2021-06-04 18:41                           ` Jakub Kicinski
2021-06-07  1:36                             ` Yunsheng Lin
2021-06-07 19:46                               ` Jakub Kicinski
2021-06-08 12:10                                 ` Yunsheng Lin
2021-06-08 17:29                                   ` Jakub Kicinski
2021-06-09  9:16                                     ` Yunsheng Lin
2021-06-09  9:38                                       ` Parav Pandit
2021-06-09 11:05                                         ` Yunsheng Lin
2021-06-09 11:59                                           ` Parav Pandit
2021-06-09 12:30                                             ` Yunsheng Lin
2021-06-09 13:45                                               ` Parav Pandit
2021-06-10  7:04                                                 ` Yunsheng Lin
2021-06-10  7:17                                                   ` Parav Pandit
2021-06-09 16:40                                       ` Jakub Kicinski
2021-06-10  6:52                                         ` Yunsheng Lin
2021-06-09  9:52                                   ` Parav Pandit
2021-06-09 11:16                                     ` Yunsheng Lin
2021-06-09 12:00                                       ` Parav Pandit

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=VI1PR0501MB2271C2252F577D77D9E7D2D3D1710@VI1PR0501MB2271.eurprd05.prod.outlook.com \
    --to=parav@mellanox.com \
    --cc=davem@davemloft.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=jiri@mellanox.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=netdev@vger.kernel.org \
    --cc=saeedm@mellanox.com \
    /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.