From patchwork Fri Feb 22 22:07:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1047146 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="XUcV4VSS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 445lyD3WFPz9sBF for ; Sat, 23 Feb 2019 09:15:00 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726356AbfBVWO7 (ORCPT ); Fri, 22 Feb 2019 17:14:59 -0500 Received: from mail-qk1-f194.google.com ([209.85.222.194]:35233 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725774AbfBVWO6 (ORCPT ); Fri, 22 Feb 2019 17:14:58 -0500 Received: by mail-qk1-f194.google.com with SMTP id z13so2115328qki.2 for ; Fri, 22 Feb 2019 14:14:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ImQ+mGdm5qi0EuMp5JCp1uHV17WKcEBdNk2L5C7Q28Y=; b=XUcV4VSSiCyCnk8aDaB8WLUrSV02wUwTP0aFZEsI0mAP0cdUTwg7H8KTmnoGr2icoV XSiR0ShEthwltX7ZR1vQjhRLR6uY6/MLqchpEs/9IOKgqwqesD79wAMk/0zQ7DUNZaPO mu/rs2oB8tyllhobkTFeCRvcEZVkXNzcyBc6nN8WUS7VGWeWYpYTShFTk2bSjGvJKsTb zPeytRwx187vngu4ys1A0EpMFTFvN/ya9Fe4RKQaBKNe3TY88ZAT8d5Xqi5fSXr3/2ra GngHdXGPF1xLXzhquqcDSEvVYEjf39uZCS/HNmMy4OejIrpugNqRY6jwvxUuxERhYgXb MXnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ImQ+mGdm5qi0EuMp5JCp1uHV17WKcEBdNk2L5C7Q28Y=; b=Tn64tGfZyQQLjj56+5kfrRuYHFAAt+FqAgluqNmb6hBISQl4fxRzxFsS065/A3GjcV jTXAoYB0VzcqkPOg/Lp0Xa4DfmKRXi9IPDvl+x9eFs/NiVbxwnGxBAwUueL4tj3DqG21 PTHLMo6Cplo0oP19IgzVpWuSmeelUHYg5H8V2Af5upFwT3R2XZtvj/lDaaLuMizeIpvF ulPKH9FKb02xvV6GvTgWRGRw1Li7OmO+Am5E9pHrIzWnteyWq/MHpmEfHlzDh+BwKO+8 kyIEtAKnWkVqMBYMsJfxbowe6Zzo8TWOY/vs5Ltu9g3eydi203tjo5O8Vru0asVkyEwo bAMQ== X-Gm-Message-State: AHQUAuaQdM43B73ofcQhBVykgWELbmPU2qGZqo5sPowuFSOubG4bOk+e Uh4hJ+eh5tJRoPSRPC4FVGLAFA== X-Google-Smtp-Source: AHgI3IaNIOX5Ioz//tglfGLJlB1j7JLWFN/aut11KXfNqXyT6f9MPAECZXhSizoa9CM+G5mWenz7Wg== X-Received: by 2002:a37:884:: with SMTP id 126mr4824772qki.56.1550873696915; Fri, 22 Feb 2019 14:14:56 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id j66sm2707211qkj.27.2019.02.22.14.14.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 14:14:56 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, jiri@resnulli.us Cc: mkubecek@suse.cz, andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next v3 1/6] net: devlink: turn devlink into a built-in Date: Fri, 22 Feb 2019 14:07:52 -0800 Message-Id: <20190222220758.7117-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190222220758.7117-1-jakub.kicinski@netronome.com> References: <20190222220758.7117-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Being able to build devlink as a module causes growing pains. First all drivers had to add a meta dependency to make sure they are not built in when devlink is built as a module. Now we are struggling to invoke ethtool compat code reliably. Make devlink code built-in, users can still not build it at all but the dynamically loadable module option is removed. Signed-off-by: Jakub Kicinski Reviewed-by: Florian Fainelli Acked-by: Jiri Pirko --- drivers/infiniband/hw/bnxt_re/Kconfig | 1 - drivers/infiniband/hw/mlx4/Kconfig | 1 - drivers/net/Kconfig | 1 - drivers/net/ethernet/broadcom/Kconfig | 1 - drivers/net/ethernet/cavium/Kconfig | 1 - drivers/net/ethernet/mellanox/mlx4/Kconfig | 1 - drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 1 - drivers/net/ethernet/mellanox/mlxsw/Kconfig | 1 - drivers/net/ethernet/netronome/Kconfig | 1 - include/net/devlink.h | 10 ++++------ net/Kconfig | 11 +---------- net/core/devlink.c | 15 ++------------- net/dsa/Kconfig | 2 +- 13 files changed, 8 insertions(+), 39 deletions(-) diff --git a/drivers/infiniband/hw/bnxt_re/Kconfig b/drivers/infiniband/hw/bnxt_re/Kconfig index 18f5ed082f41..19982a4a9bba 100644 --- a/drivers/infiniband/hw/bnxt_re/Kconfig +++ b/drivers/infiniband/hw/bnxt_re/Kconfig @@ -1,7 +1,6 @@ config INFINIBAND_BNXT_RE tristate "Broadcom Netxtreme HCA support" depends on ETHERNET && NETDEVICES && PCI && INET && DCB - depends on MAY_USE_DEVLINK select NET_VENDOR_BROADCOM select BNXT ---help--- diff --git a/drivers/infiniband/hw/mlx4/Kconfig b/drivers/infiniband/hw/mlx4/Kconfig index d1de3285fd88..4e9936731867 100644 --- a/drivers/infiniband/hw/mlx4/Kconfig +++ b/drivers/infiniband/hw/mlx4/Kconfig @@ -2,7 +2,6 @@ config MLX4_INFINIBAND tristate "Mellanox ConnectX HCA support" depends on NETDEVICES && ETHERNET && PCI && INET depends on INFINIBAND_USER_ACCESS || !INFINIBAND_USER_ACCESS - depends on MAY_USE_DEVLINK select NET_VENDOR_MELLANOX select MLX4_CORE ---help--- diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 6210757772ed..5e4ca082cfcd 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -505,7 +505,6 @@ source "drivers/net/hyperv/Kconfig" config NETDEVSIM tristate "Simulated networking device" depends on DEBUG_FS - depends on MAY_USE_DEVLINK help This driver is a developer testing tool and software model that can be used to test various control path networking APIs, especially diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig index c1d3ee9baf7e..716bfbba59cf 100644 --- a/drivers/net/ethernet/broadcom/Kconfig +++ b/drivers/net/ethernet/broadcom/Kconfig @@ -194,7 +194,6 @@ config SYSTEMPORT config BNXT tristate "Broadcom NetXtreme-C/E support" depends on PCI - depends on MAY_USE_DEVLINK select FW_LOADER select LIBCRC32C ---help--- diff --git a/drivers/net/ethernet/cavium/Kconfig b/drivers/net/ethernet/cavium/Kconfig index 05f4a3b21e29..6650e2a5f171 100644 --- a/drivers/net/ethernet/cavium/Kconfig +++ b/drivers/net/ethernet/cavium/Kconfig @@ -64,7 +64,6 @@ config CAVIUM_PTP config LIQUIDIO tristate "Cavium LiquidIO support" depends on 64BIT && PCI - depends on MAY_USE_DEVLINK depends on PCI imply PTP_1588_CLOCK select FW_LOADER diff --git a/drivers/net/ethernet/mellanox/mlx4/Kconfig b/drivers/net/ethernet/mellanox/mlx4/Kconfig index f200b8c420d5..ff8057ed97ee 100644 --- a/drivers/net/ethernet/mellanox/mlx4/Kconfig +++ b/drivers/net/ethernet/mellanox/mlx4/Kconfig @@ -4,7 +4,6 @@ config MLX4_EN tristate "Mellanox Technologies 1/10/40Gbit Ethernet support" - depends on MAY_USE_DEVLINK depends on PCI && NETDEVICES && ETHERNET && INET select MLX4_CORE imply PTP_1588_CLOCK diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig index 37a551436e4a..6debffb8336b 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig +++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig @@ -4,7 +4,6 @@ config MLX5_CORE tristate "Mellanox 5th generation network adapters (ConnectX series) core driver" - depends on MAY_USE_DEVLINK depends on PCI imply PTP_1588_CLOCK imply VXLAN diff --git a/drivers/net/ethernet/mellanox/mlxsw/Kconfig b/drivers/net/ethernet/mellanox/mlxsw/Kconfig index b9a25aed5d11..9c195dfed031 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/Kconfig +++ b/drivers/net/ethernet/mellanox/mlxsw/Kconfig @@ -4,7 +4,6 @@ config MLXSW_CORE tristate "Mellanox Technologies Switch ASICs support" - depends on MAY_USE_DEVLINK ---help--- This driver supports Mellanox Technologies Switch ASICs family. diff --git a/drivers/net/ethernet/netronome/Kconfig b/drivers/net/ethernet/netronome/Kconfig index 66f15b05b65e..549898d5d450 100644 --- a/drivers/net/ethernet/netronome/Kconfig +++ b/drivers/net/ethernet/netronome/Kconfig @@ -19,7 +19,6 @@ config NFP tristate "Netronome(R) NFP4000/NFP6000 NIC driver" depends on PCI && PCI_MSI depends on VXLAN || VXLAN=n - depends on MAY_USE_DEVLINK ---help--- This driver supports the Netronome(R) NFP4000/NFP6000 based cards working as a advanced Ethernet NIC. It works with both diff --git a/include/net/devlink.h b/include/net/devlink.h index a2da49dd9147..f9f7fe974652 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -707,6 +707,10 @@ devlink_health_reporter_priv(struct devlink_health_reporter *reporter); int devlink_health_report(struct devlink_health_reporter *reporter, const char *msg, void *priv_ctx); +void devlink_compat_running_version(struct net_device *dev, + char *buf, size_t len); +int devlink_compat_flash_update(struct net_device *dev, const char *file_name); + #else static inline struct devlink *devlink_alloc(const struct devlink_ops *ops, @@ -1190,13 +1194,7 @@ devlink_health_report(struct devlink_health_reporter *reporter, { return 0; } -#endif -#if IS_REACHABLE(CONFIG_NET_DEVLINK) -void devlink_compat_running_version(struct net_device *dev, - char *buf, size_t len); -int devlink_compat_flash_update(struct net_device *dev, const char *file_name); -#else static inline void devlink_compat_running_version(struct net_device *dev, char *buf, size_t len) { diff --git a/net/Kconfig b/net/Kconfig index 62da6148e9f8..1efe1f9ee492 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -429,21 +429,12 @@ config NET_SOCK_MSG with the help of BPF programs. config NET_DEVLINK - tristate "Network physical/parent device Netlink interface" + bool "Network physical/parent device Netlink interface" help Network physical/parent device Netlink interface provides infrastructure to support access to physical chip-wide config and monitoring. -config MAY_USE_DEVLINK - tristate - default m if NET_DEVLINK=m - default y if NET_DEVLINK=y || NET_DEVLINK=n - help - Drivers using the devlink infrastructure should have a dependency - on MAY_USE_DEVLINK to ensure they do not cause link errors when - devlink is a loadable module and the driver using it is built-in. - config PAGE_POOL bool diff --git a/net/core/devlink.c b/net/core/devlink.c index 4f31ddc883e7..05e04ea0a5c7 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -6482,20 +6482,9 @@ int devlink_compat_flash_update(struct net_device *dev, const char *file_name) return -EOPNOTSUPP; } -static int __init devlink_module_init(void) +static int __init devlink_init(void) { return genl_register_family(&devlink_nl_family); } -static void __exit devlink_module_exit(void) -{ - genl_unregister_family(&devlink_nl_family); -} - -module_init(devlink_module_init); -module_exit(devlink_module_exit); - -MODULE_LICENSE("GPL v2"); -MODULE_AUTHOR("Jiri Pirko "); -MODULE_DESCRIPTION("Network physical device Netlink interface"); -MODULE_ALIAS_GENL_FAMILY(DEVLINK_GENL_NAME); +subsys_initcall(devlink_init); diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig index 91e52973ee13..fab49132345f 100644 --- a/net/dsa/Kconfig +++ b/net/dsa/Kconfig @@ -6,7 +6,7 @@ config HAVE_NET_DSA config NET_DSA tristate "Distributed Switch Architecture" - depends on HAVE_NET_DSA && MAY_USE_DEVLINK + depends on HAVE_NET_DSA depends on BRIDGE || BRIDGE=n select NET_SWITCHDEV select PHYLINK From patchwork Fri Feb 22 22:07:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1047147 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="MaOnuvOo"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 445lyG5Ll0z9sBF for ; Sat, 23 Feb 2019 09:15:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726428AbfBVWPB (ORCPT ); Fri, 22 Feb 2019 17:15:01 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:38150 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726296AbfBVWPA (ORCPT ); Fri, 22 Feb 2019 17:15:00 -0500 Received: by mail-qt1-f196.google.com with SMTP id s1so4338533qte.5 for ; Fri, 22 Feb 2019 14:14:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rKFFOpRD6RHrNcQZB5rD7Qzcx45BDi7aKCzIl/VDvs4=; b=MaOnuvOoIR/QSWwPCFETdUks3yGLf91l9XtsT+d+AcJ/Xg4FJU6AMWI9wEr+lltnXE FKJStQCZSKu6oiX/11NyiuQsDbd2c2Ss/xj1CZRBhVWNTPJAxs17bBQFVz3CXK7hP5HM Fn+A88YTfEDMhlsJf+jnzqgaQisCbJsx5kyjMk0lccfiO+tXf10pQXpX+bCAzl75Oh8Y QWnOIjXeDeA0xQ9DKl8P9nhDhbyTXVNNLFmqcE/pKUM9w4Do3j3Lc2IAhIzX2KXo3NCQ zHL6FUURgeBxFaxs25N744nB7z6A6iP9Ryz9SBwv5D/+Xn4QSRQH7jwvb+u/J1BUENhW DhWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rKFFOpRD6RHrNcQZB5rD7Qzcx45BDi7aKCzIl/VDvs4=; b=qE9Bf665Oc7Ar1A5vP5VdvcZNc3W0yKZdT9/Il8R/nj86+df1JjwnnYjZCrN6R3Ato EHyG00+8+AXcu47KkZJB7HGEcipg+iYZZt33hzraey3+izzRQX+oO/U5mX6sOwad1wVr 1yURFSYPdOcSfHZONlPTU7D4ebyleWzdCM5B9l7OGfQ8sEjMEGW83xLha9oWT5cS1BZ6 OxAjGXi4GVNHL9lka/JxWPnx/5iply825MPBDe9lmxoixlZjPT+MbIKA1dAfw3nQ5z0U kD6ZWrWBPn7ndD+OMYnHSu/5MlWkhLynt0f/g9jTSbTE4Aio0EoLD1NLY2L6LoNSYaS/ h5gQ== X-Gm-Message-State: AHQUAubAk8AKPBsMqI4uDkjlQgGuDFrNbbpWDWzBUS8afUQ8F0FTl5KK YGweF4lL0tLZ1IF1xZW5dPJZmg== X-Google-Smtp-Source: AHgI3IboAXTvmwbezA0JCVTRAWJ6TZM8GcACidTLI/jGdGx+U41GxZEavgZArevR6+UXJ/4PXL8YzQ== X-Received: by 2002:ac8:3273:: with SMTP id y48mr5053990qta.67.1550873698641; Fri, 22 Feb 2019 14:14:58 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id j66sm2707211qkj.27.2019.02.22.14.14.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 14:14:58 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, jiri@resnulli.us Cc: mkubecek@suse.cz, andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next v3 2/6] devlink: create a special NDO for getting the devlink instance Date: Fri, 22 Feb 2019 14:07:53 -0800 Message-Id: <20190222220758.7117-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190222220758.7117-1-jakub.kicinski@netronome.com> References: <20190222220758.7117-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Instead of iterating over all devlink ports add a NDO which will return the devlink instance from the driver. v2: add the netdev_to_devlink() helper (Michal) v3: check that devlink has ops (Florian) Suggested-by: Jiri Pirko Signed-off-by: Jakub Kicinski Reviewed-by: Florian Fainelli --- include/linux/netdevice.h | 6 ++++ include/net/devlink.h | 9 ++++++ net/core/devlink.c | 58 ++++++++++----------------------------- 3 files changed, 30 insertions(+), 43 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index aab4d9f6613d..eebcef6b8191 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -940,6 +940,8 @@ struct dev_ifalias { char ifalias[]; }; +struct devlink; + /* * This structure defines the management hooks for network devices. * The following hooks can be defined; unless noted otherwise, they are @@ -1248,6 +1250,9 @@ struct dev_ifalias { * that got dropped are freed/returned via xdp_return_frame(). * Returns negative number, means general error invoking ndo, meaning * no frames were xmit'ed and core-caller will free all frames. + * struct devlink *(*ndo_get_devlink)(struct net_device *dev); + * Get devlink instance associated with a given netdev. + * Called with a reference on the device only, rtnl_lock is not held. */ struct net_device_ops { int (*ndo_init)(struct net_device *dev); @@ -1446,6 +1451,7 @@ struct net_device_ops { u32 flags); int (*ndo_xsk_async_xmit)(struct net_device *dev, u32 queue_id); + struct devlink * (*ndo_get_devlink)(struct net_device *dev); }; /** diff --git a/include/net/devlink.h b/include/net/devlink.h index f9f7fe974652..7f5a0bdca228 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -538,6 +538,15 @@ static inline struct devlink *priv_to_devlink(void *priv) return container_of(priv, struct devlink, priv); } +static inline struct devlink *netdev_to_devlink(struct net_device *dev) +{ +#if IS_ENABLED(CONFIG_NET_DEVLINK) + if (dev->netdev_ops->ndo_get_devlink) + return dev->netdev_ops->ndo_get_devlink(dev); +#endif + return NULL; +} + struct ib_device; #if IS_ENABLED(CONFIG_NET_DEVLINK) diff --git a/net/core/devlink.c b/net/core/devlink.c index 05e04ea0a5c7..a13055160be0 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -6397,9 +6397,6 @@ static void __devlink_compat_running_version(struct devlink *devlink, struct sk_buff *msg; int rem, err; - if (!devlink->ops->info_get) - return; - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); if (!msg) return; @@ -6431,55 +6428,30 @@ static void __devlink_compat_running_version(struct devlink *devlink, void devlink_compat_running_version(struct net_device *dev, char *buf, size_t len) { - struct devlink_port *devlink_port; struct devlink *devlink; - mutex_lock(&devlink_mutex); - list_for_each_entry(devlink, &devlink_list, list) { - mutex_lock(&devlink->lock); - list_for_each_entry(devlink_port, &devlink->port_list, list) { - if (devlink_port->type == DEVLINK_PORT_TYPE_ETH && - devlink_port->type_dev == dev) { - __devlink_compat_running_version(devlink, - buf, len); - mutex_unlock(&devlink->lock); - goto out; - } - } - mutex_unlock(&devlink->lock); - } -out: - mutex_unlock(&devlink_mutex); + devlink = netdev_to_devlink(dev); + if (!devlink || !devlink->ops || !devlink->ops->info_get) + return; + + mutex_lock(&devlink->lock); + __devlink_compat_running_version(devlink, buf, len); + mutex_unlock(&devlink->lock); } int devlink_compat_flash_update(struct net_device *dev, const char *file_name) { - struct devlink_port *devlink_port; struct devlink *devlink; + int ret; - mutex_lock(&devlink_mutex); - list_for_each_entry(devlink, &devlink_list, list) { - mutex_lock(&devlink->lock); - list_for_each_entry(devlink_port, &devlink->port_list, list) { - int ret = -EOPNOTSUPP; - - if (devlink_port->type != DEVLINK_PORT_TYPE_ETH || - devlink_port->type_dev != dev) - continue; - - mutex_unlock(&devlink_mutex); - if (devlink->ops->flash_update) - ret = devlink->ops->flash_update(devlink, - file_name, - NULL, NULL); - mutex_unlock(&devlink->lock); - return ret; - } - mutex_unlock(&devlink->lock); - } - mutex_unlock(&devlink_mutex); + devlink = netdev_to_devlink(dev); + if (!devlink || !devlink->ops || !devlink->ops->flash_update) + return -EOPNOTSUPP; - return -EOPNOTSUPP; + mutex_lock(&devlink->lock); + ret = devlink->ops->flash_update(devlink, file_name, NULL, NULL); + mutex_unlock(&devlink->lock); + return ret; } static int __init devlink_init(void) From patchwork Fri Feb 22 22:07:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1047148 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="OAI2M2w/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 445lyH4Zlfz9sBL for ; Sat, 23 Feb 2019 09:15:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726455AbfBVWPC (ORCPT ); Fri, 22 Feb 2019 17:15:02 -0500 Received: from mail-qt1-f194.google.com ([209.85.160.194]:33362 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726387AbfBVWPB (ORCPT ); Fri, 22 Feb 2019 17:15:01 -0500 Received: by mail-qt1-f194.google.com with SMTP id z39so4375187qtz.0 for ; Fri, 22 Feb 2019 14:15:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=46Bkh9g8Za9KDBwiZKxAy7D4WEXVaZo60slylBvX2DM=; b=OAI2M2w/UX/JBnHE7FEuSyZadNwDqPmgonG5rUxJfe5bYKA3T5TeEwYTwumM6A0jgE zZf5Ko+S/Rl8dBqxEbX9p5TCO8gH+csnFsAnKbwBV5H76bCZW7p2hAhxo9SFN7th7Xzc 1B25agXVrlrjclcqvU67yiLFc2DUfMwMNLOK+BwyMzp2CCuG4AKHNlBjjO6PMRgRCXb/ RKYib9FGN6DlLs2MKw+GjBNuwHwsnDatDKeS2jYlrbgDCm3bm7j355RNcTJXKQmc7cch J37LmDuz25mUsWcGXkS/ajwjYQRQdiiULRWntGZigxqchCXFhd7cskvetfyeMpm20dee 4EjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=46Bkh9g8Za9KDBwiZKxAy7D4WEXVaZo60slylBvX2DM=; b=ivT0J1slX05o7S9h3neUHyqnhWRUugkfFr60SrLJU1yKsCKonJXikhkoRfGZwf8H3B F8f0tKk6p6Y7ggmVpYFi/edsfoA3lB2yTo9P2/EY1XhCkFA5gqrL770c6xqE1BwSbNPu WFo0ovmw2CT/tWX668w49x+XB9zohyeLkxLeATNI4qgtXchoyfALxj+dE1LizMvvkqhf vRn5aX74BgeTf4Ze1QFjE9hlIy/vNNZsdfVNUVzA+wvy1Vyy2YjSRZwIdsPj/bRsGucK 8LeqFaAIb+RAiHktZdHV31Uw9ckCIlqW5Psy/IFZlp22JHBHkJQoNf4K5rIilMe910OP Tkyw== X-Gm-Message-State: AHQUAuZ2Q1XE99YCV06bcC97r5wqFCR6IiWMUH/Meukt7j8g+a2SVBNi n1y7/Al6BOcXfnVtplsVpIdLwQ== X-Google-Smtp-Source: AHgI3IaMKg59iXjH8D0lob3nIxbh31Ig/3hhZhNnODgRI/x0XdscciJZlACtU6PFBREBs3B4IgM7Fg== X-Received: by 2002:a0c:8698:: with SMTP id 24mr4992252qvf.188.1550873700468; Fri, 22 Feb 2019 14:15:00 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id j66sm2707211qkj.27.2019.02.22.14.14.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 14:14:59 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, jiri@resnulli.us Cc: mkubecek@suse.cz, andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next v3 3/6] nfp: add .ndo_get_devlink Date: Fri, 22 Feb 2019 14:07:54 -0800 Message-Id: <20190222220758.7117-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190222220758.7117-1-jakub.kicinski@netronome.com> References: <20190222220758.7117-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Support getting devlink instance from a new NDO. Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko Reviewed-by: Florian Fainelli --- drivers/net/ethernet/netronome/nfp/nfp_app.h | 2 ++ drivers/net/ethernet/netronome/nfp/nfp_devlink.c | 11 +++++++++++ drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 1 + drivers/net/ethernet/netronome/nfp/nfp_net_repr.c | 1 + 4 files changed, 15 insertions(+) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_app.h b/drivers/net/ethernet/netronome/nfp/nfp_app.h index d578d856a009..f8d422713705 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_app.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_app.h @@ -433,4 +433,6 @@ int nfp_app_nic_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, int nfp_app_nic_vnic_init_phy_port(struct nfp_pf *pf, struct nfp_app *app, struct nfp_net *nn, unsigned int id); +struct devlink *nfp_devlink_get_devlink(struct net_device *netdev); + #endif diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index db2da99f6aa7..e9eca99cf493 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -376,3 +376,14 @@ void nfp_devlink_port_unregister(struct nfp_port *port) { devlink_port_unregister(&port->dl_port); } + +struct devlink *nfp_devlink_get_devlink(struct net_device *netdev) +{ + struct nfp_app *app; + + app = nfp_app_from_netdev(netdev); + if (!app) + return NULL; + + return priv_to_devlink(app->pf); +} diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c index 776f6c07701b..6d1b8816552e 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c @@ -3531,6 +3531,7 @@ const struct net_device_ops nfp_net_netdev_ops = { .ndo_udp_tunnel_del = nfp_net_del_vxlan_port, .ndo_bpf = nfp_net_xdp, .ndo_get_port_parent_id = nfp_port_get_port_parent_id, + .ndo_get_devlink = nfp_devlink_get_devlink, }; /** diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c index 62839807e21e..d2c803bb4e56 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c @@ -273,6 +273,7 @@ const struct net_device_ops nfp_repr_netdev_ops = { .ndo_set_features = nfp_port_set_features, .ndo_set_mac_address = eth_mac_addr, .ndo_get_port_parent_id = nfp_port_get_port_parent_id, + .ndo_get_devlink = nfp_devlink_get_devlink, }; void From patchwork Fri Feb 22 22:07:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1047151 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="XxBe2Ozm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 445lyQ58ZGz9sBF for ; Sat, 23 Feb 2019 09:15:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726492AbfBVWPG (ORCPT ); Fri, 22 Feb 2019 17:15:06 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:41901 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726387AbfBVWPD (ORCPT ); Fri, 22 Feb 2019 17:15:03 -0500 Received: by mail-qt1-f196.google.com with SMTP id v10so4317257qtp.8 for ; Fri, 22 Feb 2019 14:15:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NMNkzC8Ri0itmDMCbwDkcpwGc6DYiermiwOcT9uaoqE=; b=XxBe2Ozm0RvvBXpjGUywkYGiyrq/ynM1Zbd43naoSVNOQr/dFzVfuLo2pgANdkYSo5 LSKGEuovtbqVQs4zRuYa6vKmeRFaVKByCd+of9HNyGn04aMl3VRlC605HIUyp+6mq5Ff ND+kcLkU3GQZZVk+fLjufViiLsZ4U8/EyXRn4kMPIut0YEigd5Sc+em8+ur8t52NfoAz f2ouWXPFglLe2cYU7O3CNAxgFhO6GC06lhDwx2XXTyr/bv6kQFzusZpeVhZSPrAXDhXj sHQA/LNmeprWWh3jwx8VN8kG0aLvKfwmGsRG0IhOa9S42PMNfqUjFRyM6DGspuQtPsn6 XUCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NMNkzC8Ri0itmDMCbwDkcpwGc6DYiermiwOcT9uaoqE=; b=h1kCw54BckiRUqLC2wfcqjZrntU8O3oU+REXwcHBD8G++YrV0LQP2QjzMmPbxDo2kA YwDfxl95/7O3mZhAavRnA78MakEySymGgV49vUE5PtCgDKt0+zaLYHWx0DKPjt4MtiEe 87vpGuPOhHThuwAP9hTwnWJOk9/WNv5CkuSoPcD1QQcxCEQvY9WkPog5u5l9b4bbmvVD menRdocRz6klIK3SKeLViwRjvGGODn1pVwHEXaUgWGrGq9+WVfpgLyMDyR1Ray42atzY yLPnxvTHqv9Dy84HGVyC8PXpANvmUyaNHHYm4Ug0t0ZX64mRcdcqmApZ2yhBbDu6GBm3 nGBg== X-Gm-Message-State: AHQUAub6+W8RrZFGHMETns+10IlHg9LdQBst0ATGx9YpLMcEJrNCHp5F GgcC0DNxEupwdQ9iOMdrkaS0wA== X-Google-Smtp-Source: AHgI3Ibj6/TG1lk2bdnpTkSutWvPTqgrdZp0+NO6EZpmdkQKnpdEFEMWc3T9w/4nGVUPNmpozg/QQw== X-Received: by 2002:ac8:1bf7:: with SMTP id m52mr5065454qtk.200.1550873702317; Fri, 22 Feb 2019 14:15:02 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id j66sm2707211qkj.27.2019.02.22.14.15.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 14:15:01 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, jiri@resnulli.us Cc: mkubecek@suse.cz, andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next v3 4/6] nfp: remove ethtool flashing fallback Date: Fri, 22 Feb 2019 14:07:55 -0800 Message-Id: <20190222220758.7117-5-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190222220758.7117-1-jakub.kicinski@netronome.com> References: <20190222220758.7117-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Now that devlink fallback will be called reliably, we can remove the ethtool flashing code. Signed-off-by: Jakub Kicinski Acked-by: Jiri Pirko Reviewed-by: Florian Fainelli --- .../ethernet/netronome/nfp/nfp_net_ethtool.c | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c index 8f189149efc5..690b62718dbb 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c @@ -1234,28 +1234,6 @@ static int nfp_net_set_channels(struct net_device *netdev, return nfp_net_set_num_rings(nn, total_rx, total_tx); } -static int -nfp_net_flash_device(struct net_device *netdev, struct ethtool_flash *flash) -{ - struct nfp_app *app; - int ret; - - if (flash->region != ETHTOOL_FLASH_ALL_REGIONS) - return -EOPNOTSUPP; - - app = nfp_app_from_netdev(netdev); - if (!app) - return -EOPNOTSUPP; - - dev_hold(netdev); - rtnl_unlock(); - ret = nfp_flash_update_common(app->pf, flash->data, NULL); - rtnl_lock(); - dev_put(netdev); - - return ret; -} - static const struct ethtool_ops nfp_net_ethtool_ops = { .get_drvinfo = nfp_net_get_drvinfo, .get_link = ethtool_op_get_link, @@ -1266,7 +1244,6 @@ static const struct ethtool_ops nfp_net_ethtool_ops = { .get_sset_count = nfp_net_get_sset_count, .get_rxnfc = nfp_net_get_rxnfc, .set_rxnfc = nfp_net_set_rxnfc, - .flash_device = nfp_net_flash_device, .get_rxfh_indir_size = nfp_net_get_rxfh_indir_size, .get_rxfh_key_size = nfp_net_get_rxfh_key_size, .get_rxfh = nfp_net_get_rxfh, @@ -1292,7 +1269,6 @@ const struct ethtool_ops nfp_port_ethtool_ops = { .get_strings = nfp_port_get_strings, .get_ethtool_stats = nfp_port_get_stats, .get_sset_count = nfp_port_get_sset_count, - .flash_device = nfp_net_flash_device, .set_dump = nfp_app_set_dump, .get_dump_flag = nfp_app_get_dump_flag, .get_dump_data = nfp_app_get_dump_data, From patchwork Fri Feb 22 22:07:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1047149 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="P76DbyQ8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 445lyM2V1Sz9sBF for ; Sat, 23 Feb 2019 09:15:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726546AbfBVWPG (ORCPT ); Fri, 22 Feb 2019 17:15:06 -0500 Received: from mail-qt1-f196.google.com ([209.85.160.196]:43163 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726460AbfBVWPF (ORCPT ); Fri, 22 Feb 2019 17:15:05 -0500 Received: by mail-qt1-f196.google.com with SMTP id y4so4300373qtc.10 for ; Fri, 22 Feb 2019 14:15:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W0KInqHfxHpYsVM8Uw5Rmji+8D25kv7i/DL4ouf3wHE=; b=P76DbyQ8Ue4f2IWS4tPxWdOh1pWM+VMYembPKb+jZUz1MMYQsKkuynjktTgbg/7C91 aAoUSH8Yk6TTPCqMWRzn95wnrFv1zLWqMEeYY2rf2OqstedJKZO0uo/GBjTpLlXrAeAK dQiDnnT/IfAsiNv1vf8iRO4p9JTNXSzlFqceTr9mfyGGqFyOFvDpn5CTGKxWloRxF22M pJk6rLwwKI+BMLzt4dCFkHNlzWjsDS7ORDWmAC/GamkOJ0sZzUsysm9Y6cyISArUg0zL onQayxAErCNMeQ4g3+VD1xhSKEMcxGT7A5vWFTuGqAqZZfKHPWmQgeO3WI87EDegJCQb 4MfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W0KInqHfxHpYsVM8Uw5Rmji+8D25kv7i/DL4ouf3wHE=; b=tLT3xrefkk07y5H9GPP8jmYzfijHYDA7/eK/Xr3K8/yFOmup4CjVvYkuODyHM8HEBP EBFTXOWzmfuofVqvcy+/X2DTUK8RlDaOu+wx5ofntZMRThf/PDSGPcgUpEH8X33q7gjR 0ElwyHKrIMfGE1btqxqsyuKAiZQebykwzP/sWw/0+OU+1ewD5yMCXJEahEEO/sXsm5Pm capkTIm9m81wmMn6ot9jZh52jOLJlVLcuRo+23QAAkX77kvZWn/PyRRv1RvSR6oeistm zMCUeAA9wyejZuvwYkGK0/CfuubGAlq7FOOzNyEhN4IzW5Za99XErPp4MXo756jKIScq TGMA== X-Gm-Message-State: AHQUAuZrbqFfkWiojwPhQwPKWvqBjSDODJeDwabSH2AdKlF442NEQVaJ zwfwjjue0/mlf6DKUlEIBJJEjw== X-Google-Smtp-Source: AHgI3IZVYU6xXPgfBhW7rTKQQGPTZAUAOKsU24FstBMqAzW8Wy0VOCucA74KIO/vSS0PBem57G/GLQ== X-Received: by 2002:a0c:9144:: with SMTP id q62mr4922222qvq.87.1550873703938; Fri, 22 Feb 2019 14:15:03 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id j66sm2707211qkj.27.2019.02.22.14.15.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 14:15:03 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, jiri@resnulli.us Cc: mkubecek@suse.cz, andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next v3 5/6] devlink: hold a reference to the netdevice around ethtool compat Date: Fri, 22 Feb 2019 14:07:56 -0800 Message-Id: <20190222220758.7117-6-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190222220758.7117-1-jakub.kicinski@netronome.com> References: <20190222220758.7117-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When ethtool is calling into devlink compat code make sure we have a reference on the netdevice on which the operation was invoked. v3: move the hold/lock logic into devlink_compat_* functions (Florian) Signed-off-by: Jakub Kicinski --- net/core/devlink.c | 34 +++++++++++++++++++++++----------- net/core/ethtool.c | 13 ++----------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/net/core/devlink.c b/net/core/devlink.c index a13055160be0..78c6ea1870ca 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -6430,27 +6430,39 @@ void devlink_compat_running_version(struct net_device *dev, { struct devlink *devlink; + dev_hold(dev); + rtnl_unlock(); + devlink = netdev_to_devlink(dev); - if (!devlink || !devlink->ops || !devlink->ops->info_get) - return; + if (devlink && devlink->ops && devlink->ops->info_get) { + mutex_lock(&devlink->lock); + __devlink_compat_running_version(devlink, buf, len); + mutex_unlock(&devlink->lock); + } - mutex_lock(&devlink->lock); - __devlink_compat_running_version(devlink, buf, len); - mutex_unlock(&devlink->lock); + rtnl_lock(); + dev_put(dev); } int devlink_compat_flash_update(struct net_device *dev, const char *file_name) { struct devlink *devlink; - int ret; + int ret = -EOPNOTSUPP; + + dev_hold(dev); + rtnl_unlock(); devlink = netdev_to_devlink(dev); - if (!devlink || !devlink->ops || !devlink->ops->flash_update) - return -EOPNOTSUPP; + if (devlink && devlink->ops && devlink->ops->flash_update) { + mutex_lock(&devlink->lock); + ret = devlink->ops->flash_update(devlink, file_name, + NULL, NULL); + mutex_unlock(&devlink->lock); + } + + rtnl_lock(); + dev_put(dev); - mutex_lock(&devlink->lock); - ret = devlink->ops->flash_update(devlink, file_name, NULL, NULL); - mutex_unlock(&devlink->lock); return ret; } diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 1320e8dce559..47558ffae423 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -805,11 +805,9 @@ static noinline_for_stack int ethtool_get_drvinfo(struct net_device *dev, if (ops->get_eeprom_len) info.eedump_len = ops->get_eeprom_len(dev); - rtnl_unlock(); if (!info.fw_version[0]) devlink_compat_running_version(dev, info.fw_version, sizeof(info.fw_version)); - rtnl_lock(); if (copy_to_user(useraddr, &info, sizeof(info))) return -EFAULT; @@ -2040,15 +2038,8 @@ static noinline_for_stack int ethtool_flash_device(struct net_device *dev, return -EFAULT; efl.data[ETHTOOL_FLASH_MAX_FILENAME - 1] = 0; - if (!dev->ethtool_ops->flash_device) { - int ret; - - rtnl_unlock(); - ret = devlink_compat_flash_update(dev, efl.data); - rtnl_lock(); - - return ret; - } + if (!dev->ethtool_ops->flash_device) + return devlink_compat_flash_update(dev, efl.data); return dev->ethtool_ops->flash_device(dev, &efl); } From patchwork Fri Feb 22 22:07:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1047150 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="RPo13r9D"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 445lyP3GYSz9sBF for ; Sat, 23 Feb 2019 09:15:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726578AbfBVWPI (ORCPT ); Fri, 22 Feb 2019 17:15:08 -0500 Received: from mail-qk1-f195.google.com ([209.85.222.195]:44498 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726464AbfBVWPG (ORCPT ); Fri, 22 Feb 2019 17:15:06 -0500 Received: by mail-qk1-f195.google.com with SMTP id r21so2062526qkl.11 for ; Fri, 22 Feb 2019 14:15:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=u8MhsskZzBKyiuoQmXsZAlMqTqs6nWg2wrFMhyOUChc=; b=RPo13r9Dh8mhesDutvHANZrrUSgINX+a270rhCVdGHe8Nw3ULPnx5NB6Z8dXkv0Bns /2jhlAChL8CLvRSV9bBbgxNxsIkqf9FVgecOPiP7s9F9BSBVOz1wvSy71AK6rKFBgSUn 1UnMiFUStH54a1qOIBtuFzduBT8ZK0rtDh0tRaj4UMGS/3DsDGdRLkb8AaFO+GcVOA6w k+x17EIBYZlIdVHkcIPmPbWK1viaKR4hajGvjlY9XMSFc9FZRNh5TRQcMDvFTTTmavN9 c3GeLQd+fogQ2jKkn9AkpRk7SdMuggiDkQEmGB1jhWubr7jDmPhOFXlCo0x9+MCvsNEA F2AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=u8MhsskZzBKyiuoQmXsZAlMqTqs6nWg2wrFMhyOUChc=; b=C6Hf2Bla8N2q0/bEPU6Gb70v4xgs989fiuQ9KYYji4IUDWqhKVHS9ldE5pcas9+Trk Q1AZN69OUHzvlk9zcGIXnZFzFsfA+IxPcQSLhnLFifU2HQMA2ZLEoO+ObpuD6+5ii8Ha uepiO6v6/EEwnuMvISNXnOOX5DsbJn3/lfxK74Yuxg97ifOOXKNg+/Xz6YW9KwnRXiqN OfF1PHJs5GpXasRc5c10pNQ9Zfy/F8/rF3hnzyuP5uoWfPWA2XGWgogZGQzIbLt30B71 /6KLGEjNH9QCoTEQyB6adKjey+F8P7Zqxxi+Dz9wiL5+k+ZUGuUFwzK8D7skeTX1fTsQ snPA== X-Gm-Message-State: AHQUAuaFeedEt1QuvZjeDM5bsmE15OqNH5GNTdeiGuRYpSr4mg2LjGP4 0GCWt2RTiVPTZ9jcHhUeIzR1Qw== X-Google-Smtp-Source: AHgI3IZsVn5LOyqMGbky6jyPsJb4Clu1VK5wIYF/D9YOpm0mzQ11aF+q6ErzxRL14RxRTkpuSJzbHw== X-Received: by 2002:a37:2cc2:: with SMTP id s185mr4578779qkh.72.1550873705547; Fri, 22 Feb 2019 14:15:05 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id j66sm2707211qkj.27.2019.02.22.14.15.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 14:15:05 -0800 (PST) From: Jakub Kicinski To: davem@davemloft.net, jiri@resnulli.us Cc: mkubecek@suse.cz, andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [PATCH net-next v3 6/6] devlink: add missing NULL checks for devlink ops Date: Fri, 22 Feb 2019 14:07:57 -0800 Message-Id: <20190222220758.7117-7-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190222220758.7117-1-jakub.kicinski@netronome.com> References: <20190222220758.7117-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Commit 76726ccb7f46 ("devlink: add flash update command") and commit 2d8dc5bbf4e7 ("devlink: Add support for reload") access devlink ops without NULL-checking. Add the missing checks. Note that all drivers currently implementing devlink pass non-NULL ops, so this is not a problem. Reported-by: Florian Fainelli Signed-off-by: Jakub Kicinski --- net/core/devlink.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/core/devlink.c b/net/core/devlink.c index 78c6ea1870ca..38cb0239dede 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -2651,7 +2651,7 @@ static int devlink_nl_cmd_reload(struct sk_buff *skb, struct genl_info *info) struct devlink *devlink = info->user_ptr[0]; int err; - if (!devlink->ops->reload) + if (!devlink->ops || !devlink->ops->reload) return -EOPNOTSUPP; err = devlink_resources_validate(devlink, NULL, info); @@ -2669,7 +2669,7 @@ static int devlink_nl_cmd_flash_update(struct sk_buff *skb, const char *file_name, *component; struct nlattr *nla_component; - if (!devlink->ops->flash_update) + if (!devlink->ops || !devlink->ops->flash_update) return -EOPNOTSUPP; if (!info->attrs[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME])