Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp221424imb; Thu, 28 Feb 2019 21:56:47 -0800 (PST) X-Google-Smtp-Source: APXvYqzsUnq4oZM9y9iFUn71TIvUtAKtqt4b0ck04MY2BdR49YjlkVaOx2oO8YkcboIY1SLiNf4u X-Received: by 2002:a65:6105:: with SMTP id z5mr3221589pgu.434.1551419807005; Thu, 28 Feb 2019 21:56:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551419806; cv=none; d=google.com; s=arc-20160816; b=TVNlYpmMn0CxruAemTQM0A9acBBZeBklqlD5sG4jmryvpwszQpA2zbGZE3lHK3ZxEu ddIcG2Otswcm4vo1YGw+U3ub/HwgJc6z+xX59RMVT15G/5OWUeJkd6IUBtn3RCq2cDKZ KXyJgPZ/kqyJaD7Nxq1cT/sgFSy3K2Aym7Zeld1jcPkgQPJ6GzCl4phZIQQ4hVBAgOur zABaC4DUUQkwoyPWeh6+FHT4nFSH4+pR53NLz51VjvaavyB0BoMRDhWSmScVIIgWYy6S gur79XoKHbYbvonTbOALo454TNhVDPzA4ynSqHRrMN77N1zySYp7F0Ht0PL5EZ3FxoNJ l/4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=SpSdTyJdL4Id5SQpUdTiJdyJkAYMUQfU1jh9Otv66Vs=; b=ibFkytFA+Kvu3t6SwEpS/mxmdQl8YiB6zho4ntya2P6GL/BzFTFCv9cfA9CBnVFf8a TqYZ30yWr2NKXtFIO/uCDIWodNwScphVWJTyLT1Vwfmc5tGqadVrzJUuusHy6/yt1iRI tHXugOTXMQxnT2KQuzgJI5927QszfBse6AmW7ymTUhZKYp6IiunYkhwyZek9koJupRDW /bMpJdsppEwXb8BnTtmPXEowk+tleBdkjHcXEm8MfbzsQq6+syIgQxQXRpL/0gqkWGr5 xyQSEZKhJKuVb7MFAAjqwns3nt4EUYPB9ltuiZgetNGx9oqztWQ00WXFrWVmvqQL/1kB O3+g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mellanox.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n7si19278326plk.85.2019.02.28.21.56.31; Thu, 28 Feb 2019 21:56:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mellanox.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732259AbfCAFi0 (ORCPT + 99 others); Fri, 1 Mar 2019 00:38:26 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:42743 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732071AbfCAFiY (ORCPT ); Fri, 1 Mar 2019 00:38:24 -0500 Received: from Internal Mail-Server by MTLPINE1 (envelope-from parav@mellanox.com) with ESMTPS (AES256-SHA encrypted); 1 Mar 2019 07:38:20 +0200 Received: from sw-mtx-036.mtx.labs.mlnx (sw-mtx-036.mtx.labs.mlnx [10.12.150.149]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x215brYc016903; Fri, 1 Mar 2019 07:38:17 +0200 From: Parav Pandit To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, michal.lkml@markovi.net, davem@davemloft.net, gregkh@linuxfoundation.org, jiri@mellanox.com Cc: parav@mellanox.com Subject: [RFC net-next 7/8] net/mlx5: Add devlink subdev life cycle command support Date: Thu, 28 Feb 2019 23:37:51 -0600 Message-Id: <1551418672-12822-8-git-send-email-parav@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1551418672-12822-1-git-send-email-parav@mellanox.com> References: <1551418672-12822-1-git-send-email-parav@mellanox.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Implement devlink device add/del command which cretes dummy subdev devices that actual driver can bind to using standard device driver model. Signed-off-by: Parav Pandit --- drivers/net/ethernet/mellanox/mlx5/core/Makefile | 1 + drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 ++ .../net/ethernet/mellanox/mlx5/core/mlx5_core.h | 4 ++ drivers/net/ethernet/mellanox/mlx5/core/subdev.c | 55 ++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/subdev.c diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile b/drivers/net/ethernet/mellanox/mlx5/core/Makefile index 82d636b..f218789 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile +++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile @@ -16,6 +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 # # Netdev basic diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index 40d591c..5f8cf0d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c @@ -1213,6 +1213,10 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv, .eswitch_encap_mode_set = mlx5_devlink_eswitch_encap_mode_set, .eswitch_encap_mode_get = mlx5_devlink_eswitch_encap_mode_get, #endif +#if IS_ENABLED(CONFIG_SUBDEV) + .dev_add = mlx5_devlink_dev_add, + .dev_del = mlx5_devlink_dev_del, +#endif }; #define MLX5_IB_MOD "mlx5_ib" diff --git a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h index 9529cf9..2a54148 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h @@ -202,4 +202,8 @@ enum { u8 mlx5_get_nic_state(struct mlx5_core_dev *dev); void mlx5_set_nic_state(struct mlx5_core_dev *dev, u8 state); + +struct devlink *mlx5_devlink_dev_add(struct devlink *devlink); +void mlx5_devlink_dev_del(struct devlink *devlink); + #endif /* __MLX5_CORE_H__ */ diff --git a/drivers/net/ethernet/mellanox/mlx5/core/subdev.c b/drivers/net/ethernet/mellanox/mlx5/core/subdev.c new file mode 100644 index 0000000..9e78ea01 --- /dev/null +++ b/drivers/net/ethernet/mellanox/mlx5/core/subdev.c @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB +// Copyright (c) 2018-19 Mellanox Technologies + +#include +#include +#include +#include + +#include "mlx5_core.h" + +struct mlx5_subdev { + struct subdev subdev; + struct devlink dl; +}; + +struct devlink *mlx5_devlink_dev_add(struct devlink *devlink) +{ + struct mlx5_subdev *subdev; + int ret; + + subdev = subdev_alloc_dev(mlx5_subdev, subdev); + if (!subdev) + return ERR_PTR(-ENOMEM); + + devlink_init(&subdev->dl, NULL); + + ret = subdev_add_dev(&subdev->subdev, devlink->dev, + SUBDEV_VENDOR_ID_MELLANOX, + SUBDEV_DEVICE_ID_MELLANOX_SF); + if (ret) + goto add_err; + + ret = __devlink_register(&subdev->dl, &subdev->subdev.dev, devlink); + if (ret) + goto reg_err; + + return &subdev->dl; + +reg_err: + devlink_cleanup(&subdev->dl); +add_err: + subdev_free_dev(&subdev->subdev); + return ERR_PTR(ret); +} + +void mlx5_devlink_dev_del(struct devlink *devlink) +{ + struct mlx5_subdev *subdev = + container_of(devlink, struct mlx5_subdev, dl); + + __devlink_unregister(devlink); + devlink_cleanup(devlink); + subdev_delete_dev(&subdev->subdev); + subdev_free_dev(&subdev->subdev); +} -- 1.8.3.1