From patchwork Mon Jul 20 03:49:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1332011 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=MVvmIcHl; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B97681BSfz9sRf for ; Mon, 20 Jul 2020 13:50:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726666AbgGTDuF (ORCPT ); Sun, 19 Jul 2020 23:50:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726123AbgGTDuD (ORCPT ); Sun, 19 Jul 2020 23:50:03 -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 B3062C0619D2; Sun, 19 Jul 2020 20:50:03 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id 207so8386007pfu.3; Sun, 19 Jul 2020 20:50:03 -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=YH5Ac89Q4DpBjkm7EXUDOjaAGjnjWFyt277PJmQDNsE=; b=MVvmIcHlT557Sh1XefG+9U5EDY6JttOiXXx+c63j17II7CM6Y+PAzyUO8+IGTFUY5d lo6RtCcJYZ92zo4Ca3q09+CEEkxTsmFy41RtujrjqkWrHLrva/+25xyHgQdpddxkHC7L 5N2mtk9/d3F1oEk+GHY3ZRPBhvmpOOoqbkHEmHdBmid6hCafE8TibQVUvwSLf/3q4OOv Nx8h5h1u20IRLobl/y8W+ZRXJxM9Yj/6IVi5IslqDExclYwXuzuyNZ0VwxnF9OLzR/aF HqRJ7GspvgRmh8VKmM34BsnPveTVYePC+vyrUVoLYAnv8p1sDH458fX1x9eNmXefIF94 UDYA== 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=YH5Ac89Q4DpBjkm7EXUDOjaAGjnjWFyt277PJmQDNsE=; b=nUGcy4GrXZCs8i82JoZQNYOgWSGEn1PhIELid8kpCBzNXfevyBLxpGMRURe0GFrCXO o3p4QhMyWIEUcJP5CXiirO7XyaUQnbdLX0J1UQgk2VtqUaHQh4r4Gdyef+c3opW4wo9l 1lpR7WiCBWRYrzmUKR0fXrCh2l8TEQuz6BdgvS8EfOLvN0jqRVnq4aEB8fDWyYFclvYu NOOGNn90/rCYFtcT4gjVRswmZdhYcWrr1yEqVQX2i/Yng00prfkYX04ZqZRlhuxotkyO vQrpRl7E32cizh1EygBPWZLifg8n4DOhPi9oiEN5f/eYwd7HC1VxE1iewUViQa02CkBu UIYw== X-Gm-Message-State: AOAM533r6w1ZW2u+Kw+LkVq7o+TjeIHCi8auJ0R7Z3WS0BUpGboHjPJY t3FswAzDDMK13/TfJtrRY6Ufy5wt X-Google-Smtp-Source: ABdhPJztFOPl178CyUsEQCSSbKiiOUseHDDiIXb7XQnCW15wuySTsJafHE8jrhNgkXBoareZuvgsjA== X-Received: by 2002:a62:140e:: with SMTP id 14mr17284700pfu.196.1595217002470; Sun, 19 Jul 2020 20:50:02 -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 z11sm15183445pfj.104.2020.07.19.20.50.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2020 20:50:01 -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), olteanv@gmail.com Subject: [PATCH net-next v2 1/4] net: Wrap ndo_do_ioctl() to prepare for DSA stacked ops Date: Sun, 19 Jul 2020 20:49:51 -0700 Message-Id: <20200720034954.66895-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200720034954.66895-1-f.fainelli@gmail.com> References: <20200720034954.66895-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(). Reviewed-by: Andrew Lunn Signed-off-by: Florian Fainelli --- 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 Mon Jul 20 03:49:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1332013 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=kqt6EfId; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B976K167fz9sRW for ; Mon, 20 Jul 2020 13:50:17 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726712AbgGTDuJ (ORCPT ); Sun, 19 Jul 2020 23:50:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726677AbgGTDuF (ORCPT ); Sun, 19 Jul 2020 23:50:05 -0400 Received: from mail-pj1-x1043.google.com (mail-pj1-x1043.google.com [IPv6:2607:f8b0:4864:20::1043]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E193C0619D2; Sun, 19 Jul 2020 20:50:05 -0700 (PDT) Received: by mail-pj1-x1043.google.com with SMTP id gc9so9497035pjb.2; Sun, 19 Jul 2020 20:50:05 -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=Lw+oOKOJaV4TI1IElc9yfOKZ42IGzfQCZ2yv/p89pIs=; b=kqt6EfIddKPhgkHCJ75/E0ksSXaRBk9W9LuhO5ld6rboN0fXtk5YeIROqlLh5lZejH c+dMDbaozVkBx34iXYxxVLkywYfB0Z+eVqgtYa5goaRxj07XpvOmU7e8aR+iJKo2HIL3 eRGuDeYioNkZpDAnnQyah28HnrjCGU7ruMdVNDUQOOPjj59jGtXRC6ncVUxwEp/J8q48 9ivocaV1APnAbO1ESppbmJbgWE5ev5Z+QOQZJXVLaIDSQqHei7YskA0XKQAu4wg5PDkH qi0ESS4VpwzlxewjdeDwnSzQjbEEFqiDrIxkMBshYYSH1yY73p5ozY9GYACSzLGiepS6 OF7g== 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=Lw+oOKOJaV4TI1IElc9yfOKZ42IGzfQCZ2yv/p89pIs=; b=KR3XA0TaoGsYpvQVdW3fPj+rL4qkxWc6M8zDyWJPzRnS9524mH4vYCBAIwHwm0ibEm e3ZoC1xs/1vouXy3hT9yDdPhe3f292Sq1Oucm9WcmcpcNHOf2BMe1At9+y9mR0h5eQPr jFGCR9Zg5faOO3QryzlEz0yGoktQYZDqdDQi7umgYZMKiSm4Ve+T5pYoFMH95a7CkzjD aAla6+xjKb/TPnJ95N6ADW2OHb/yoevjaUDO5JdtCUm5U/YloWymJDCTsN+WL4unX/Uv s1FLGHnJZnuqojx/iySom6t8UgoDY7ghiVtiu+UU2ZcQS+d2lsbPADQIcpG9vCxNjar4 NAFQ== X-Gm-Message-State: AOAM532RdSOkrrFQbafVFgeTX1Cnh3Epmw/4jyrS06Bl2UyHPtqjk8QA helHQHyHjzJWKGKdd0x4GLHLudSm X-Google-Smtp-Source: ABdhPJxgMYNcDrPDnhYzDqhIK1CoVh64KeziRGoXqkOyMCOQViACnZR1JZyIT56u7f37vniG29BHQA== X-Received: by 2002:a17:90a:3769:: with SMTP id u96mr22310119pjb.198.1595217004362; Sun, 19 Jul 2020 20:50:04 -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 z11sm15183445pfj.104.2020.07.19.20.50.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2020 20:50:03 -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), olteanv@gmail.com Subject: [PATCH net-next v2 2/4] net: dsa: Add wrappers for overloaded ndo_ops Date: Sun, 19 Jul 2020 20:49:52 -0700 Message-Id: <20200720034954.66895-3-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200720034954.66895-1-f.fainelli@gmail.com> References: <20200720034954.66895-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 --- include/net/dsa.h | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/include/net/dsa.h b/include/net/dsa.h index 6fa418ff1175..343642ca4f63 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,63 @@ static inline bool dsa_can_decode(const struct sk_buff *skb, return false; } +#if IS_ENABLED(CONFIG_NET_DSA) +static inline int __dsa_netdevice_ops_check(struct net_device *dev) +{ + int err = -EOPNOTSUPP; + + if (!dev->dsa_ptr) + return err; + + if (!dev->dsa_ptr->netdev_ops) + return err; + + return 0; +} + +static inline int dsa_ndo_do_ioctl(struct net_device *dev, struct ifreq *ifr, + int cmd) +{ + const struct dsa_netdevice_ops *ops; + int err; + + err = __dsa_netdevice_ops_check(dev); + if (err) + return err; + + ops = dev->dsa_ptr->netdev_ops; + + return ops->ndo_do_ioctl(dev, ifr, cmd); +} + +static inline int dsa_ndo_get_phys_port_name(struct net_device *dev, + char *name, size_t len) +{ + const struct dsa_netdevice_ops *ops; + int err; + + err = __dsa_netdevice_ops_check(dev); + if (err) + return err; + + ops = dev->dsa_ptr->netdev_ops; + + return ops->ndo_get_phys_port_name(dev, name, len); +} +#else +static inline int dsa_ndo_do_ioctl(struct net_device *dev, struct ifreq *ifr, + int cmd) +{ + return -EOPNOTSUPP; +} + +static inline int dsa_ndo_get_phys_port_name(struct net_device *dev, + char *name, size_t len) +{ + return -EOPNOTSUPP; +} +#endif + 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 Mon Jul 20 03:49:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1332014 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=LMlDy9vt; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B976N41t1z9sRW for ; Mon, 20 Jul 2020 13:50:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726818AbgGTDuT (ORCPT ); Sun, 19 Jul 2020 23:50:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726123AbgGTDuH (ORCPT ); Sun, 19 Jul 2020 23:50:07 -0400 Received: from mail-pj1-x1041.google.com (mail-pj1-x1041.google.com [IPv6:2607:f8b0:4864:20::1041]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C28CC0619D2; Sun, 19 Jul 2020 20:50:07 -0700 (PDT) Received: by mail-pj1-x1041.google.com with SMTP id gc9so9497071pjb.2; Sun, 19 Jul 2020 20:50:07 -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=LMlDy9vthgMMQ247QmiXj3FQudMGnP1riki5Am5zx1I+yOgOKi/pmY2/LwDzrZ9xXC gdjAEKW2wNTvaeieD8gezVXCMCYutAlZeoTw3hOpLECG+U7mbYyUoqDpMJ7+3h6JlM7f K19mT7xQKequTi/ozMet0Y81HvGXfS0ys4cUvMPtPYht4icRXWpLZLOvWiKyzf74KjtV lwgKuKTOsrLBimxs1tsCua6htOddCqtWwroR2JKh+52oYayfR40qdfLB7HwnplXuGS+e OazKvUO19nVUAhTi5FNE24OHGJnuvY4NT5hgc1Glp2ivXNImRdTYOJZ4jxhV+LR8bH8W lDTQ== 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=XAtvo0R+VLHH/U4pjyuZLl4KNZquoWN27ksrV06UU44kPks0X08Iz9Ps7OEtqCFBtf 5ISS4tDDBra3ZO8aQGGOUhc2jPD/kkbibG5uc8cy+p7CiQ9alHB+ChHYp6e2z/maToOD CUwjG97J1YjvH6O74A8gkDXHziqQYZx+dTfaKIBVjx5eKGZL8Hf5LaflnA1269ERXzsK FzC9ujzdxFwKFBOEfdaFTDGAYRBaIDrndFyaHN3iK1Y4rysVCp8W1xNgsxiaTcXwBzmU JhY8kJb+e6lkeSbmLt+399sPCM0IknweqM6yk5+Kiy1JyWIH8PZCf63MFOKWtWWQgprb 1k9Q== X-Gm-Message-State: AOAM5326yLe3Mu1DQte9ZABcmb1C6FmrpbkMu7aCkTh1W2c9whTe1DB9 xXj+9tBUE/pnj0A8tn8LZurqP4w0 X-Google-Smtp-Source: ABdhPJxRR9n13AVDdTqGQQ1JQGXKrpmqqzAhDdjljuIhKtElgFuyWvR8pUW5i/QR0KEugRhvpu2gtw== X-Received: by 2002:a17:90a:fa09:: with SMTP id cm9mr8052824pjb.146.1595217006195; Sun, 19 Jul 2020 20:50:06 -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 z11sm15183445pfj.104.2020.07.19.20.50.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2020 20:50:05 -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), olteanv@gmail.com Subject: [PATCH net-next v2 3/4] net: Call into DSA netdevice_ops wrappers Date: Sun, 19 Jul 2020 20:49:53 -0700 Message-Id: <20200720034954.66895-4-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200720034954.66895-1-f.fainelli@gmail.com> References: <20200720034954.66895-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 Mon Jul 20 03:49:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 1332012 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=jViuHJvr; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4B976H1rGmz9sRk for ; Mon, 20 Jul 2020 13:50:15 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726775AbgGTDuM (ORCPT ); Sun, 19 Jul 2020 23:50:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41802 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726719AbgGTDuJ (ORCPT ); Sun, 19 Jul 2020 23:50:09 -0400 Received: from mail-pj1-x1042.google.com (mail-pj1-x1042.google.com [IPv6:2607:f8b0:4864:20::1042]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49AEBC0619D4; Sun, 19 Jul 2020 20:50:09 -0700 (PDT) Received: by mail-pj1-x1042.google.com with SMTP id gc9so9497102pjb.2; Sun, 19 Jul 2020 20:50:09 -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=nG0iPsD5QdkdQaph/ibFlBdWV0TfbW/UttIf3Q4vXdA=; b=jViuHJvrdhaQg3FS2W9I3rv84tB4aLPhLI24ZW+zHZOYroh3hmghwhhaWfmGcUhoEM EzDrkgOA0EtoZTqqCb8R/lkm9WTeNzQd6gvP8RmSqhs4l6WrxHb+0hwDW+Gyu9WJGlsU vyLDQ1ZCM3Qvk7yhttgnoC+uoD1rm2Ibf8RYSjwggtjDnAa/SnnxlGhPkVQBmS2eyxw0 QDjPaflW20UIuQdt9ijtJs2HSSaI2RUW13NqGIWILx21eGP0DNSzgXqpgNf9DjgSy0wx BcODhOpJIXvyIPMEUk1N8PsTAltTcbQIPMuOn71RCapv5JmulHHTE4DClOKK9989we70 VHWw== 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=nG0iPsD5QdkdQaph/ibFlBdWV0TfbW/UttIf3Q4vXdA=; b=st1jC5dGmpTRohJkenfuKAmLA3SWfMl8V1zRmpNYpUx9wLLSpt2fMXz7HqaRV210sb pwFjGluJmk35KxXP/jJz9u7xyUguFOBFrqWSSRbOvpnrsNp3s8EKG2qnBtEAKWD/8rV2 3+Nsd0DwxgjD1R2QgNvqMHPJsYQ9f832n3p/p+JQ6yW9UW3mXZOGkcs+6t3DCOUDkyaW kBqS+OfRX6eVGpfXKc93YAU7C/fDBQEanD5R6rlThudffhRhPKLJhK6mzIWuSnuA4g4f vEpjBZC6bJucJLHr5L0Arwl76GJuVKSWZwQzUIwhjP+2LUovS5qYVsq+L2RCQL9Sz4j5 0BWA== X-Gm-Message-State: AOAM533IvfHsptSwifORPSJNo54oBKa5YHCXmNbuv/eIGOsvb3OuvKD5 cpfpjwzGR3EOreZJC9+CKlhxJ/BT X-Google-Smtp-Source: ABdhPJwf8BzhJpEXLmJ/cI0ofcipsewX/PEGNwbcMs2ksgdgIZVORiXquhl5ZYtY2fUMnpcopdIi0A== X-Received: by 2002:a17:90b:4d0f:: with SMTP id mw15mr21480190pjb.68.1595217008347; Sun, 19 Jul 2020 20:50:08 -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 z11sm15183445pfj.104.2020.07.19.20.50.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2020 20:50:07 -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), olteanv@gmail.com Subject: [PATCH net-next v2 4/4] net: dsa: Setup dsa_netdev_ops Date: Sun, 19 Jul 2020 20:49:54 -0700 Message-Id: <20200720034954.66895-5-f.fainelli@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200720034954.66895-1-f.fainelli@gmail.com> References: <20200720034954.66895-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 have 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 343642ca4f63..f1b63d06d132 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);