From patchwork Sat Jul 18 03:05:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1331476 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=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Qw3FHzHN; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B7tD472fRz9sSn for ; Sat, 18 Jul 2020 13:05:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728924AbgGRDFr (ORCPT ); Fri, 17 Jul 2020 23:05:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47662 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726262AbgGRDFq (ORCPT ); Fri, 17 Jul 2020 23:05:46 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E6DBC0619D2; Fri, 17 Jul 2020 20:05:46 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id j20so6270360pfe.5; Fri, 17 Jul 2020 20:05:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+QIZiS6mr/TwrYTrY5S1CUMAvOM+aBt0rbCkTcpL/Zk=; b=Qw3FHzHNXn53dwXGATc+cgkVQ0VI9JZ8ZvbDf9I+iVAudvjl1sfggEqr4MmaSlsT7F F94ds1HwwkGvpBgAFo+XUIN9UWO2gccgCfsiYwon5IWvoXOE3Q6KIlro+vpXHQ2zeQsj 5juPvYPapZlmonXzIpXlNCXDonFAg9Mx56jIwWFkio5msyFs8DWycsAPAchKmXGFw98j UgoezROxrV+2x6blmdVS3qWlkvM5LA1/yCrLwdD2SefhZ9Vxpm00UAArI5sGNDvt/SrT hFvR0I4e3PkuURqu6d+1ZnLBRZh/+xnEOGHBq+ZPFDDgYn95WxBbAeFtAFNPuiaolfDZ YUnQ== 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=+QIZiS6mr/TwrYTrY5S1CUMAvOM+aBt0rbCkTcpL/Zk=; b=j4Lq8j1sXEyCitE6dGzKM/W+Jcu6vsswJA8Alq9c1iZVcxlVxgcrBGfH/bLJ5i/fqc VaDWaSYRCt9HytM1ZqivOYJs4WL3DHp1A7zFei18bSmw7JZnar4UQs4pRkbM+RmUH+j3 YIaZjQKjFqrtZq/ZxnHsi6kJ+DvqukNxc/UYbMlbBObOcOSMYFlGT54y4PLlPWOtzBXS 8Ka211TXHyGUMGZppJTVoSbRI2fE2YHBKd2DBjhIxRysxyarxONWIy5snFbbCrhVvLnU 9QYHmhAX5oGlnCfSv/JnZkGHhYS4wWJHfU3z/z+L9OdhIaXABnBYoNfR/SFOilSqgwEc XNqw== X-Gm-Message-State: AOAM533+iphVknms4hVRiIEL8B8NbnI+q2p/MJzQ4syDCEFanyY/Rfty IEN8HDAA4ekaMwulHUnRM9QGo0z3 X-Google-Smtp-Source: ABdhPJwnpwR5W8DgJX/CzBi2EGq1EyP3rQbR18mIyrgYtccz/GBFcRfOHx52ti+7YeY4qMpn0u8nYA== X-Received: by 2002:a62:3204:: with SMTP id y4mr10147026pfy.50.1595041545294; Fri, 17 Jul 2020 20:05:45 -0700 (PDT) Received: from localhost.localdomain (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id c9sm617331pjr.35.2020.07.17.20.05.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2020 20:05:44 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , Andrew Lunn , Vivien Didelot , "David S. Miller" , Jakub Kicinski , Jiri Pirko , Eric Dumazet , Taehee Yoo , Cong Wang , Maxim Mikityanskiy , Richard Cochran , Michal Kubecek , linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 1/4] net: Wrap ndo_do_ioctl() to prepare for DSA stacked ops Date: Fri, 17 Jul 2020 20:05:30 -0700 Message-Id: <20200718030533.171556-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200718030533.171556-1-f.fainelli@gmail.com> References: <20200718030533.171556-1-f.fainelli@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org In preparation for adding another layer of call into a DSA stacked ops singleton, wrap the ndo_do_ioctl() call into dev_do_ioctl(). Signed-off-by: Florian Fainelli Reviewed-by: Andrew Lunn --- net/core/dev_ioctl.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c index 547b587c1950..a213c703c90a 100644 --- a/net/core/dev_ioctl.c +++ b/net/core/dev_ioctl.c @@ -225,6 +225,22 @@ static int net_hwtstamp_validate(struct ifreq *ifr) return 0; } +static int dev_do_ioctl(struct net_device *dev, + struct ifreq *ifr, unsigned int cmd) +{ + const struct net_device_ops *ops = dev->netdev_ops; + int err = -EOPNOTSUPP; + + if (ops->ndo_do_ioctl) { + if (netif_device_present(dev)) + err = ops->ndo_do_ioctl(dev, ifr, cmd); + else + err = -ENODEV; + } + + return err; +} + /* * Perform the SIOCxIFxxx calls, inside rtnl_lock() */ @@ -323,13 +339,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd) cmd == SIOCSHWTSTAMP || cmd == SIOCGHWTSTAMP || cmd == SIOCWANDEV) { - err = -EOPNOTSUPP; - if (ops->ndo_do_ioctl) { - if (netif_device_present(dev)) - err = ops->ndo_do_ioctl(dev, ifr, cmd); - else - err = -ENODEV; - } + err = dev_do_ioctl(dev, ifr, cmd); } else err = -EINVAL; From patchwork Sat Jul 18 03:05:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1331477 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=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=eaOjvQYY; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B7tD55vqFz9sSt for ; Sat, 18 Jul 2020 13:05:57 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728955AbgGRDFt (ORCPT ); Fri, 17 Jul 2020 23:05:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726262AbgGRDFs (ORCPT ); Fri, 17 Jul 2020 23:05:48 -0400 Received: from mail-pj1-x1044.google.com (mail-pj1-x1044.google.com [IPv6:2607:f8b0:4864:20::1044]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 150BDC0619D2; Fri, 17 Jul 2020 20:05:48 -0700 (PDT) Received: by mail-pj1-x1044.google.com with SMTP id ls15so7346602pjb.1; Fri, 17 Jul 2020 20:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W20ytYA3X/k7rmwSz93Mvopa1eYrBMJqygg51JZZkkM=; b=eaOjvQYYSV4X5A4iQRH/J2gq9tXMSCxuyLPa7JrRUT4AIgzM2+K6SZJTrEJK1ehoWm fYc0EybySRMaSbjWsyE8Wh8gikZGJ4ZeNoSIxTiJzOAiW8Nhdb4yBHWdTbkMHHLrWBcr Dk1Fch+9NZIq4UpwoVjBb1vDqzimitjO6f6LYEMyabrRvZd7AdYVEO/8kXQUOoWsdbtA Vqe3wGDLRzvOyBWVy9l/wlVmhBdv44QJId4zM3hu3uhhCX/vm9YbrknRSEyfL/foSqv0 LGhLaS0Q3k3+npt16S93E2kigDvq7zp9iNNP6LGkBIaThXbRuMci7Q7u6IYHMhmqAzlj ae8w== 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=W20ytYA3X/k7rmwSz93Mvopa1eYrBMJqygg51JZZkkM=; b=jjOCNoeCvdhSR6noQXlrasH7AcYixcuCmQiXMTQf8bh1jXPKx8XcDBzkluWrit35Mj VpzLkw00E1dS3hBfikFcmuOGom33gUDLxPTUAw1XZ2x6C93wM4lqFcEbXzTLljPfEE75 gFQLPih10YODxBiY81+hRbV6JHiVwmU22RPaegH1u162/TBw2PyXQdCuB0FUk5djF03S UIKGda/desQBVtgnmkznLuk/AC/5PJpDZPIWk3s4svYhcOLQmOPgALBUaykhAUI/tVIM s2k1GTRrfiW2w9NoJ9YYmu1/ydn+H44+yO2BKIZz3XPiQZak8yMLVgXZHGVRo6s1WKNa G9jg== X-Gm-Message-State: AOAM530Tjvwh2zAT/Dnsx8XZvbzogFegMRhDJHwKY76g6GwXGdIkRIZf dwbnc7cE62o38InAXmjrQpeN9Vc5 X-Google-Smtp-Source: ABdhPJwwuDIvsFbj9d2rF7m4bZ9DvYfGFDbyRDDv3SH1Xsi378gV983IiFpU6eJ4B8IHIhxh8DDttQ== X-Received: by 2002:a17:902:547:: with SMTP id 65mr9802481plf.191.1595041547190; Fri, 17 Jul 2020 20:05:47 -0700 (PDT) Received: from localhost.localdomain (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id c9sm617331pjr.35.2020.07.17.20.05.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2020 20:05:46 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , Andrew Lunn , Vivien Didelot , "David S. Miller" , Jakub Kicinski , Jiri Pirko , Eric Dumazet , Taehee Yoo , Cong Wang , Maxim Mikityanskiy , Richard Cochran , Michal Kubecek , linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 2/4] net: dsa: Add wrappers for overloaded ndo_ops Date: Fri, 17 Jul 2020 20:05:31 -0700 Message-Id: <20200718030533.171556-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200718030533.171556-1-f.fainelli@gmail.com> References: <20200718030533.171556-1-f.fainelli@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add definitions for the dsa_netdevice_ops structure which is a subset of the net_device_ops structure for the specific operations that we care about overlaying on top of the DSA CPU port net_device and provide inline stubs that take core managing whether DSA code is reachable. Signed-off-by: Florian Fainelli Reported-by: kernel test robot --- include/net/dsa.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/include/net/dsa.h b/include/net/dsa.h index 6fa418ff1175..681ba2752514 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -86,6 +86,18 @@ struct dsa_device_ops { enum dsa_tag_protocol proto; }; +/* This structure defines the control interfaces that are overlayed by the + * DSA layer on top of the DSA CPU/management net_device instance. This is + * used by the core net_device layer while calling various net_device_ops + * function pointers. + */ +struct dsa_netdevice_ops { + int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, + int cmd); + int (*ndo_get_phys_port_name)(struct net_device *dev, char *name, + size_t len); +}; + #define DSA_TAG_DRIVER_ALIAS "dsa_tag-" #define MODULE_ALIAS_DSA_TAG_DRIVER(__proto) \ MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS __stringify(__proto##_VALUE)) @@ -217,6 +229,7 @@ struct dsa_port { /* * Original copy of the master netdev net_device_ops */ + const struct dsa_netdevice_ops *netdev_ops; const struct net_device_ops *orig_ndo_ops; bool setup; @@ -679,6 +692,34 @@ static inline bool dsa_can_decode(const struct sk_buff *skb, return false; } +#if IS_ENABLED(CONFIG_NET_DSA) +#define dsa_build_ndo_op(name, arg1_type, arg1_name, arg2_type, arg2_name) \ +static int inline dsa_##name(struct net_device *dev, arg1_type arg1_name, \ + arg2_type arg2_name) \ +{ \ + const struct dsa_netdevice_ops *ops; \ + int err = -EOPNOTSUPP; \ + \ + if (!dev->dsa_ptr) \ + return err; \ + \ + ops = dev->dsa_ptr->netdev_ops; \ + if (!ops || !ops->name) \ + return err; \ + \ + return ops->name(dev, arg1_name, arg2_name); \ +} +#else +#define dsa_build_ndo_op(name, ...) \ +static inline int dsa_##name(struct net_device *dev, ...) \ +{ \ + return -EOPNOTSUPP; \ +} +#endif + +dsa_build_ndo_op(ndo_do_ioctl, struct ifreq *, ifr, int, cmd); +dsa_build_ndo_op(ndo_get_phys_port_name, char *, name, size_t, len); + void dsa_unregister_switch(struct dsa_switch *ds); int dsa_register_switch(struct dsa_switch *ds); struct dsa_switch *dsa_switch_find(int tree_index, int sw_index); From patchwork Sat Jul 18 03:05:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1331478 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=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=LyQgXwWe; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B7tD61X3kz9sSn for ; Sat, 18 Jul 2020 13:05:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728973AbgGRDFw (ORCPT ); Fri, 17 Jul 2020 23:05:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47676 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726262AbgGRDFt (ORCPT ); Fri, 17 Jul 2020 23:05:49 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF58AC0619D2; Fri, 17 Jul 2020 20:05:49 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id q17so6262124pfu.8; Fri, 17 Jul 2020 20:05:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=s0bPXMdX/gLeZJkA8kYL9ZRzdQQF5fbDlom5NC+jb10=; b=LyQgXwWeMz66AYtzZPLQN7XJ8zJJ7GIpcEuVShlLxAy10Ovh2OKkzQyq3iE0HcYmFR pArR97N3ZWU2dQDJTd3+LAvkCO7VmsK0QkfQkGQkH7szDiz9nycdZXDBLsRu/MYNtxnu c8uXaYmwVaSj+6+SN66vmBi51raoFnTg3OBezOa2XBPQyappXarOcgnkkL3EI9aDotxk VXXSTO1sBPXqCSiBC5Dndi1h3jfX7tcdPUwVYUvV+qRYwdhLhunNefQ4GrD6DrwnQYG5 ua3W03pYYyRawCWfMwWVc3zINk+z03iq6G/U/2hjxjfbda5xaf5sIFQaWYo4thcYGF3E lBuA== 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=s0bPXMdX/gLeZJkA8kYL9ZRzdQQF5fbDlom5NC+jb10=; b=pTtKbnNMCfnpQM3zYe7OrAj1wSLSJGLzZ6v7YmTxsJ7wYTvJp8UsrTNazfBRVxshgx LSTFmP/yJzwZ19q1kLvjV2kYz7vXN06No05p2VRKde5W0P8jYNjcD3XMgNqAa5OSDdev 7VH1ldEnJnnsU+ASN7VPBRDXdBGXD4NlIbEUOZ82zep7jKusg54vLTip64RSOYA6yYCW dvhgJs1Vpb/13awpRyjBneOKn7lMV41cc39I5I1dVptu3AkU4DHc+eS4/rGBdp9d7hCI zl3v4WhLCqRvaxn6ysNTedsdrGIOwjHYP/7Me6oSdE3vW9SlX5BhOndy0aCiBFIgpAwq b7hQ== X-Gm-Message-State: AOAM530N/r+TmKcqVXX1fTUXf9hvCqgMqnZX4vigh0GdW/lF9CeWBXf/ UnWWzJsruUDqyxQNVgIkCGtWk4jf X-Google-Smtp-Source: ABdhPJxb13oZtxiCIm6ZTbuuVOzEZAb1CZyNjdVipyblB6s1d4r3UsQcVirfl3YtRzRC7mCB7pwcyQ== X-Received: by 2002:a62:7e51:: with SMTP id z78mr10587547pfc.3.1595041548972; Fri, 17 Jul 2020 20:05:48 -0700 (PDT) Received: from localhost.localdomain (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id c9sm617331pjr.35.2020.07.17.20.05.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2020 20:05:48 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , Andrew Lunn , Vivien Didelot , "David S. Miller" , Jakub Kicinski , Jiri Pirko , Eric Dumazet , Taehee Yoo , Cong Wang , Maxim Mikityanskiy , Richard Cochran , Michal Kubecek , linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 3/4] net: Call into DSA netdevice_ops wrappers Date: Fri, 17 Jul 2020 20:05:32 -0700 Message-Id: <20200718030533.171556-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200718030533.171556-1-f.fainelli@gmail.com> References: <20200718030533.171556-1-f.fainelli@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Make the core net_device code call into our ndo_do_ioctl() and ndo_get_phys_port_name() functions via the wrappers defined previously Signed-off-by: Florian Fainelli --- net/core/dev.c | 5 +++++ net/core/dev_ioctl.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/net/core/dev.c b/net/core/dev.c index 062a00fdca9b..19f1abc26fcd 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -98,6 +98,7 @@ #include #include #include +#include #include #include #include @@ -8602,6 +8603,10 @@ int dev_get_phys_port_name(struct net_device *dev, const struct net_device_ops *ops = dev->netdev_ops; int err; + err = dsa_ndo_get_phys_port_name(dev, name, len); + if (err == 0 || err != -EOPNOTSUPP) + return err; + if (ops->ndo_get_phys_port_name) { err = ops->ndo_get_phys_port_name(dev, name, len); if (err != -EOPNOTSUPP) diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c index a213c703c90a..b2cf9b7bb7b8 100644 --- a/net/core/dev_ioctl.c +++ b/net/core/dev_ioctl.c @@ -5,6 +5,7 @@ #include #include #include +#include #include /* @@ -231,6 +232,10 @@ static int dev_do_ioctl(struct net_device *dev, const struct net_device_ops *ops = dev->netdev_ops; int err = -EOPNOTSUPP; + err = dsa_ndo_do_ioctl(dev, ifr, cmd); + if (err == 0 || err != -EOPNOTSUPP) + return err; + if (ops->ndo_do_ioctl) { if (netif_device_present(dev)) err = ops->ndo_do_ioctl(dev, ifr, cmd); From patchwork Sat Jul 18 03:05:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1331479 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=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=HoniX5Yx; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B7tD651Rkz9sT6 for ; Sat, 18 Jul 2020 13:05:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728985AbgGRDFy (ORCPT ); Fri, 17 Jul 2020 23:05:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728970AbgGRDFw (ORCPT ); Fri, 17 Jul 2020 23:05:52 -0400 Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 03172C0619D2; Fri, 17 Jul 2020 20:05:52 -0700 (PDT) Received: by mail-pf1-x443.google.com with SMTP id s26so6266672pfm.4; Fri, 17 Jul 2020 20:05:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IwiSc8ny1eiqFoZFL5UVikvl9/Kv6xkm+XtoA/y4ccI=; b=HoniX5YxiN+/rdvP/6xfbQHUK5ubUPWgsAMQf85wATqoauNmTPR03IkbUsoOFzBxYD 6t5VU+ynh6FV7GsLQnDWNBDVKaP+cLk7WBxCATaXLs3t2xTQPq+kDYrrsZU8Kyz3qL90 B4C5r4lTH97ibG7tq7dyfCccAtqmTjoeSQDU3DAhoyS4oM337CNWgp++j/P/CYwBOskS 5WTsO8xSiVVYXYv5G2fraq0varfzCjmI9RKg17RjXmVr6jCOQd1ADOVEb7tS5kK/LdhD BURun2TKckqhWKHYjsyCIFTxERdTizPTWP/8ExMqi83j/rEHj35z5NbIKn5EJoiKc8Yy y1Dg== 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=IwiSc8ny1eiqFoZFL5UVikvl9/Kv6xkm+XtoA/y4ccI=; b=KxoJZAldSL8/EylpU7/G30a+nyP+xm94bKivglG8egKDtZFNhiUxqchqlOPilEKOrO wRWPsYK9OHJhjGNFPo06DQNJxUzZDwyRlgKPd4V2zdmdgDgdxuHQH3WU83hfjJltK2Vo EdmKhCm7SwB+7V1MOB0o0FzReDLZWPIVUixU/mHBLcG9+16rjRNQQa10R4pkM804K5ZD b7b1L352u3n5Q1tAIgeDx4OAdjPVqctO8F1OfoExA+rgnfUCMh+Ya6igM+qR+Rn62Vo6 wIY6mhEMLpOejbd3T12qalcwc8BRqLP716rMYGgJS8/2EYwBR20NZk7az2Xn+1CIWfTP t8Gw== X-Gm-Message-State: AOAM5304NmV8XcBySDTZBxo9QQfMPVhf8Tq6z/cP13oGwwM0UkdSvvyt qNqRaNzCt13lYiIn0F2c9V67R8ME X-Google-Smtp-Source: ABdhPJwBSyti78al7Z9WVBUxUhtUwxeX+t2Y91nI/T9uOnPC8zG3je1GXa4klFoyTAE7iTNJoxwmsg== X-Received: by 2002:a62:834c:: with SMTP id h73mr10908926pfe.221.1595041551056; Fri, 17 Jul 2020 20:05:51 -0700 (PDT) Received: from localhost.localdomain (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id c9sm617331pjr.35.2020.07.17.20.05.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2020 20:05:50 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , Andrew Lunn , Vivien Didelot , "David S. Miller" , Jakub Kicinski , Jiri Pirko , Eric Dumazet , Taehee Yoo , Cong Wang , Maxim Mikityanskiy , Richard Cochran , Michal Kubecek , linux-kernel@vger.kernel.org (open list) Subject: [PATCH net-next 4/4] net: dsa: Setup dsa_netdev_ops Date: Fri, 17 Jul 2020 20:05:33 -0700 Message-Id: <20200718030533.171556-5-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200718030533.171556-1-f.fainelli@gmail.com> References: <20200718030533.171556-1-f.fainelli@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Now that we hav all the infrastructure in place for calling into the dsa_ptr->netdev_ops function pointers, install them when we configure the DSA CPU/management interface and tear them down. The flow is unchanged from before, but now we preserve equality of tests when network device drivers do tests like dev->netdev_ops == &foo_ops which was not the case before since we were allocating an entirely new structure. Signed-off-by: Florian Fainelli --- include/net/dsa.h | 1 - net/dsa/master.c | 52 ++++++++++++----------------------------------- 2 files changed, 13 insertions(+), 40 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index 681ba2752514..c9f350303947 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -230,7 +230,6 @@ struct dsa_port { * Original copy of the master netdev net_device_ops */ const struct dsa_netdevice_ops *netdev_ops; - const struct net_device_ops *orig_ndo_ops; bool setup; }; diff --git a/net/dsa/master.c b/net/dsa/master.c index 480a61460c23..0a90911ae31b 100644 --- a/net/dsa/master.c +++ b/net/dsa/master.c @@ -220,12 +220,17 @@ static int dsa_master_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) break; } - if (cpu_dp->orig_ndo_ops && cpu_dp->orig_ndo_ops->ndo_do_ioctl) - err = cpu_dp->orig_ndo_ops->ndo_do_ioctl(dev, ifr, cmd); + if (dev->netdev_ops->ndo_do_ioctl) + err = dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd); return err; } +static const struct dsa_netdevice_ops dsa_netdev_ops = { + .ndo_do_ioctl = dsa_master_ioctl, + .ndo_get_phys_port_name = dsa_master_get_phys_port_name, +}; + static int dsa_master_ethtool_setup(struct net_device *dev) { struct dsa_port *cpu_dp = dev->dsa_ptr; @@ -260,38 +265,10 @@ static void dsa_master_ethtool_teardown(struct net_device *dev) cpu_dp->orig_ethtool_ops = NULL; } -static int dsa_master_ndo_setup(struct net_device *dev) -{ - struct dsa_port *cpu_dp = dev->dsa_ptr; - struct dsa_switch *ds = cpu_dp->ds; - struct net_device_ops *ops; - - if (dev->netdev_ops->ndo_get_phys_port_name) - return 0; - - ops = devm_kzalloc(ds->dev, sizeof(*ops), GFP_KERNEL); - if (!ops) - return -ENOMEM; - - cpu_dp->orig_ndo_ops = dev->netdev_ops; - if (cpu_dp->orig_ndo_ops) - memcpy(ops, cpu_dp->orig_ndo_ops, sizeof(*ops)); - - ops->ndo_get_phys_port_name = dsa_master_get_phys_port_name; - ops->ndo_do_ioctl = dsa_master_ioctl; - - dev->netdev_ops = ops; - - return 0; -} - -static void dsa_master_ndo_teardown(struct net_device *dev) +static void dsa_netdev_ops_set(struct net_device *dev, + const struct dsa_netdevice_ops *ops) { - struct dsa_port *cpu_dp = dev->dsa_ptr; - - if (cpu_dp->orig_ndo_ops) - dev->netdev_ops = cpu_dp->orig_ndo_ops; - cpu_dp->orig_ndo_ops = NULL; + dev->dsa_ptr->netdev_ops = ops; } static ssize_t tagging_show(struct device *d, struct device_attribute *attr, @@ -353,9 +330,7 @@ int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp) if (ret) return ret; - ret = dsa_master_ndo_setup(dev); - if (ret) - goto out_err_ethtool_teardown; + dsa_netdev_ops_set(dev, &dsa_netdev_ops); ret = sysfs_create_group(&dev->dev.kobj, &dsa_group); if (ret) @@ -364,8 +339,7 @@ int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp) return ret; out_err_ndo_teardown: - dsa_master_ndo_teardown(dev); -out_err_ethtool_teardown: + dsa_netdev_ops_set(dev, NULL); dsa_master_ethtool_teardown(dev); return ret; } @@ -373,7 +347,7 @@ int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp) void dsa_master_teardown(struct net_device *dev) { sysfs_remove_group(&dev->dev.kobj, &dsa_group); - dsa_master_ndo_teardown(dev); + dsa_netdev_ops_set(dev, NULL); dsa_master_ethtool_teardown(dev); dsa_master_reset_mtu(dev);