From patchwork Tue Mar 26 12:02:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 1065472 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=resnulli.us Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="KMpS49ni"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44T8sc0prqz9sSR for ; Tue, 26 Mar 2019 23:03:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731453AbfCZMDO (ORCPT ); Tue, 26 Mar 2019 08:03:14 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:33391 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726140AbfCZMDN (ORCPT ); Tue, 26 Mar 2019 08:03:13 -0400 Received: by mail-wr1-f65.google.com with SMTP id q1so14039478wrp.0 for ; Tue, 26 Mar 2019 05:03:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Wm7Myl9bab91DsCtzMKvhxkuWmlersX3Mui8e8QCz0Q=; b=KMpS49niUM3v8SoCXF1u1EIHuBVpXATx7Nnd8jOXZkj+g6aaNvcb6zncHsSnA2Gyol 2//cXtCKLreELPezJLYQEz76j+BO0g9TSxAQnlz5Mn4etEE/In3ikf3ym0qd+PUHsXdu QB9qYEIMjP4df8eCgqa5Y6kJL6GJvtpZOu7y2uaNMtZpk9n4YSousqTJjtDbETCFu+py Vk4Jmqwr0eTMXT9cj5SUYkuhKyO7i/RbbbvbnpViUOGkxBFmZwyKdFsowWouV3drIdtH 22flM8dZX8fv8AUYfXw+KXHS4qg58HgIVnNSs5vQ99S1vaKq/c7hh0E1pVWlAD2etc19 VZKw== 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; bh=Wm7Myl9bab91DsCtzMKvhxkuWmlersX3Mui8e8QCz0Q=; b=VCEpmSHASaCd4zjPk9PKwB0lCx8pkh9oKfSrM8r7rruMzDhb8PNpMj/7TgxoThsP1J bksTBwQsj8RIJUd2TiQ66DUzfvQ2JkUADQzt/saeWg5MNdMEAgsyLKaLIHfsjtAKmmAi nlObf8f4tghz8jNMVmLS3Et813LsfePWQgf04h+BDUgNQP2YwLTa7CDxP3c01wa299Na gQlm+gdR0794w2/o4sSN0Mglws/6xrl6dc0pSa2dtRSZxwIQFrNudykM6XzE+6f5nXxE e23tq1kR1vN0HkO4uHbiwOGdFHpcAzO0oeS72JgY+zlWMRA2ti32YA/Da6hKOT1wP4yx ALjA== X-Gm-Message-State: APjAAAWtob2kT4Vtq1zjrio/xXaVoOSVhR/g9rxGpNAGf//WT4vF6i6v nBbUB2Z7CBBmIvtvuYItmg+a20Q7Nvk= X-Google-Smtp-Source: APXvYqynLSYbnJEEDIgvekv7HgYSigb3Cq1ekx7Pk+mpJYfhJ/GyzjwJ5XtNxEzTOuEnDqsxj0M30A== X-Received: by 2002:adf:f011:: with SMTP id j17mr17033144wro.330.1553601790522; Tue, 26 Mar 2019 05:03:10 -0700 (PDT) Received: from localhost (mail.chocen-mesto.cz. [85.163.43.2]) by smtp.gmail.com with ESMTPSA id n4sm28462068wrx.39.2019.03.26.05.03.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Mar 2019 05:03:10 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, mlxsw@mellanox.com, idosch@mellanox.com, jakub.kicinski@netronome.com, f.fainelli@gmail.com, andrew@lunn.ch, vivien.didelot@gmail.com, michael.chan@broadcom.com Subject: [patch net-next v2 02/12] net: devlink: introduce devlink_compat_phys_port_name_get() Date: Tue, 26 Mar 2019 13:02:57 +0100 Message-Id: <20190326120307.2953-3-jiri@resnulli.us> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20190326120307.2953-1-jiri@resnulli.us> References: <20190326120307.2953-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Introduce devlink_compat_phys_port_name_get() helper that gets the physical port name for specified netdevice according to devlink port attributes. Call this helper from dev_get_phys_port_name() in case ndo_get_phys_port_name is not defined. Signed-off-by: Jiri Pirko Reviewed-by: Jakub Kicinski --- v1->v2: - don't take devlink locks - try ndo first and if it returns EOPNOTSUPP fallback to devlink - rebase --- include/net/devlink.h | 9 +++++++++ net/core/dev.c | 11 ++++++++--- net/core/devlink.c | 28 ++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/include/net/devlink.h b/include/net/devlink.h index 81b5ed04a341..85e577d6ec3b 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -739,6 +739,8 @@ devlink_health_reporter_state_update(struct devlink_health_reporter *reporter, 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); +int devlink_compat_phys_port_name_get(struct net_device *dev, + char *name, size_t len); #else @@ -753,6 +755,13 @@ devlink_compat_flash_update(struct net_device *dev, const char *file_name) return -EOPNOTSUPP; } +static inline int +devlink_compat_phys_port_name_get(struct net_device *dev, + char *name, size_t len) +{ + return -EOPNOTSUPP; +} + #endif #endif /* _NET_DEVLINK_H_ */ diff --git a/net/core/dev.c b/net/core/dev.c index 9ca2d3abfd1a..9823b7713f79 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -146,6 +146,7 @@ #include #include #include +#include #include "net-sysfs.h" @@ -7877,10 +7878,14 @@ int dev_get_phys_port_name(struct net_device *dev, char *name, size_t len) { const struct net_device_ops *ops = dev->netdev_ops; + int err; - if (!ops->ndo_get_phys_port_name) - return -EOPNOTSUPP; - return ops->ndo_get_phys_port_name(dev, name, len); + if (ops->ndo_get_phys_port_name) { + err = ops->ndo_get_phys_port_name(dev, name, len); + if (err != -EOPNOTSUPP) + return err; + } + return devlink_compat_phys_port_name_get(dev, name, len); } EXPORT_SYMBOL(dev_get_phys_port_name); diff --git a/net/core/devlink.c b/net/core/devlink.c index 37d01c39071e..8bb2c3e3f202 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -5414,8 +5414,8 @@ void devlink_port_attrs_set(struct devlink_port *devlink_port, } EXPORT_SYMBOL_GPL(devlink_port_attrs_set); -int devlink_port_get_phys_port_name(struct devlink_port *devlink_port, - char *name, size_t len) +static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port, + char *name, size_t len) { struct devlink_port_attrs *attrs = &devlink_port->attrs; int n = 0; @@ -5445,6 +5445,12 @@ int devlink_port_get_phys_port_name(struct devlink_port *devlink_port, return 0; } + +int devlink_port_get_phys_port_name(struct devlink_port *devlink_port, + char *name, size_t len) +{ + return __devlink_port_phys_port_name_get(devlink_port, name, len); +} EXPORT_SYMBOL_GPL(devlink_port_get_phys_port_name); int devlink_sb_register(struct devlink *devlink, unsigned int sb_index, @@ -6459,6 +6465,24 @@ int devlink_compat_flash_update(struct net_device *dev, const char *file_name) return ret; } +int devlink_compat_phys_port_name_get(struct net_device *dev, + char *name, size_t len) +{ + struct devlink_port *devlink_port; + + /* RTNL mutex is held here which ensures that devlink_port + * instance cannot disappear in the middle. No need to take + * any devlink lock as only permanent values are accessed. + */ + ASSERT_RTNL(); + + devlink_port = netdev_to_devlink_port(dev); + if (!devlink_port) + return -EOPNOTSUPP; + + return __devlink_port_phys_port_name_get(devlink_port, name, len); +} + static int __init devlink_init(void) { return genl_register_family(&devlink_nl_family);