From patchwork Tue Sep 27 07:56:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12990011 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5E7F1C6FA86 for ; Tue, 27 Sep 2022 08:01:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231651AbiI0IBE (ORCPT ); Tue, 27 Sep 2022 04:01:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231645AbiI0IAN (ORCPT ); Tue, 27 Sep 2022 04:00:13 -0400 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4D53B0B36 for ; Tue, 27 Sep 2022 00:56:49 -0700 (PDT) Received: by mail-wr1-x42c.google.com with SMTP id x18so13673641wrm.7 for ; Tue, 27 Sep 2022 00:56:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=4dPMWhRmVPQSB9Jj6g8AUp8OQc0k0NdxHflXHucvzWY=; b=zfvPUua/tqfRcQWkvDbPvRThHk60O+hsZgk6ahX55R8eyYf9GLw9kyPN1oDSNcZU7F BGfwkxzZRDepJ/+n6TLLOnaRckmZ1H6pSE2wXEKOx7NJ6BY9sYMtlvBVPfzhA+4E9tS1 zRnOTRO1dEd5Fet6iduQunlS1cVH5hyBn4dY/x13etuhVkX/tY2zU6LhwbBsrnEa686u 6DO3vwxL02cRNtU/C9OOzSJOWPvDi4Wi2ZqC6meQO9BcvbqgkZ+zO595hc6DrxpJfYET gKiVpPcwOuvaKOHU71AfXGAr7Njv+D5gYSrVhIaeHDyLIwabaR9CMWiXtLHOaNxCGgu5 QRCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=4dPMWhRmVPQSB9Jj6g8AUp8OQc0k0NdxHflXHucvzWY=; b=XKG6BJD6sZ8cUIfdOdaRQjmM+eV1ohWWwHuqyTl2vX405SdTuxnyYbKkz7sq3JGsPo PA0rC/MzrgBEfFS2iAsE1Z5442KJGZx0YBCxWJF9Rm++H1nsfS6ReuKbnkLAplU4+yxo +rlfKgdIEhgC5jceklYwy+EcTH6phNuz2XIlSK32hLl/QTNrE1X/DgtG0M3oID26Qof8 reEc8dG6K1tLek561ykkelh8kOAA5YpaqcfxOqEIouKT3mK7ANwPjztCr6/KX3is4Ad7 3lrwdtFiAo6Vy3ga9yEaP8zfEElQW/nY9+6erAMCdI8nFJhS/ZZGoy9ByymVhXUpSTVb Fj7A== X-Gm-Message-State: ACrzQf1r1gCcllmW3E7D418IXWgduamR5m21GR3PMwczSjDD+BwQubVX GxWnVvWTAyE48/N9xhH+h3HFk5ve1DjsrKJh X-Google-Smtp-Source: AMsMyM41CVSb+InihPQYk6kJtycajjTVNDTDs51kG+Jr+UZJHW5Nr5Rvbz8aP5hwkw/WxiBjrR2W6g== X-Received: by 2002:a05:6000:1541:b0:22a:3b77:6ef4 with SMTP id 1-20020a056000154100b0022a3b776ef4mr15733554wry.303.1664265408933; Tue, 27 Sep 2022 00:56:48 -0700 (PDT) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id d3-20020a5d4f83000000b0022cc157bf26sm531583wru.85.2022.09.27.00.56.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Sep 2022 00:56:48 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, tariqt@nvidia.com, moshe@nvidia.com, saeedm@nvidia.com Subject: [patch net-next v2 1/7] net: devlink: introduce port registered assert helper and use it Date: Tue, 27 Sep 2022 09:56:39 +0200 Message-Id: <20220927075645.2874644-2-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220927075645.2874644-1-jiri@resnulli.us> References: <20220927075645.2874644-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko Instead of checking devlink_port->devlink pointer for not being NULL which indicates that devlink port is registered, put this check to new pair of helpers similar to what we have for devlink and use them in other functions. Signed-off-by: Jiri Pirko --- net/core/devlink.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/net/core/devlink.c b/net/core/devlink.c index 7776dc82f88d..f5bfbdb0301e 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -371,6 +371,11 @@ static struct devlink *devlink_get_from_attrs(struct net *net, return ERR_PTR(-ENODEV); } +#define ASSERT_DEVLINK_PORT_REGISTERED(devlink_port) \ + WARN_ON_ONCE(!(devlink_port)->devlink) +#define ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port) \ + WARN_ON_ONCE((devlink_port)->devlink) + static struct devlink_port *devlink_port_get_by_index(struct devlink *devlink, unsigned int port_index) { @@ -9869,7 +9874,8 @@ int devl_port_register(struct devlink *devlink, if (devlink_port_index_exists(devlink, port_index)) return -EEXIST; - WARN_ON(devlink_port->devlink); + ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + devlink_port->devlink = devlink; devlink_port->index = port_index; spin_lock_init(&devlink_port->type_lock); @@ -9952,8 +9958,8 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port, enum devlink_port_type type, void *type_dev) { - if (WARN_ON(!devlink_port->devlink)) - return; + ASSERT_DEVLINK_PORT_REGISTERED(devlink_port); + devlink_port_type_warn_cancel(devlink_port); spin_lock_bh(&devlink_port->type_lock); devlink_port->type = type; @@ -10072,8 +10078,8 @@ void devlink_port_attrs_set(struct devlink_port *devlink_port, { int ret; - if (WARN_ON(devlink_port->devlink)) - return; + ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + devlink_port->attrs = *attrs; ret = __devlink_port_attrs_set(devlink_port, attrs->flavour); if (ret) @@ -10096,8 +10102,8 @@ void devlink_port_attrs_pci_pf_set(struct devlink_port *devlink_port, u32 contro struct devlink_port_attrs *attrs = &devlink_port->attrs; int ret; - if (WARN_ON(devlink_port->devlink)) - return; + ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + ret = __devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PCI_PF); if (ret) @@ -10123,8 +10129,8 @@ void devlink_port_attrs_pci_vf_set(struct devlink_port *devlink_port, u32 contro struct devlink_port_attrs *attrs = &devlink_port->attrs; int ret; - if (WARN_ON(devlink_port->devlink)) - return; + ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + ret = __devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PCI_VF); if (ret) @@ -10151,8 +10157,8 @@ void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port, u32 contro struct devlink_port_attrs *attrs = &devlink_port->attrs; int ret; - if (WARN_ON(devlink_port->devlink)) - return; + ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + ret = __devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PCI_SF); if (ret) @@ -10267,8 +10273,8 @@ EXPORT_SYMBOL_GPL(devl_rate_nodes_destroy); void devlink_port_linecard_set(struct devlink_port *devlink_port, struct devlink_linecard *linecard) { - if (WARN_ON(devlink_port->devlink)) - return; + ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + devlink_port->linecard = linecard; } EXPORT_SYMBOL_GPL(devlink_port_linecard_set); From patchwork Tue Sep 27 07:56:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12990078 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E403CC07E9D for ; Tue, 27 Sep 2022 08:02:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231712AbiI0ICn (ORCPT ); Tue, 27 Sep 2022 04:02:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231633AbiI0ICX (ORCPT ); Tue, 27 Sep 2022 04:02:23 -0400 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6237AB2CF5 for ; Tue, 27 Sep 2022 00:57:28 -0700 (PDT) Received: by mail-wr1-x42f.google.com with SMTP id t14so13669371wrx.8 for ; Tue, 27 Sep 2022 00:57:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=9+xMapSF679p96gL9vU+Omt/7DAfC+pmm5Ktf8c3i1k=; b=t5xE2KTr9b8bivdmxpOzRhIc3AhLx87IKskpEP5SvfrJo3CgA00pLFwq+I/uRqE65u /FZgPZnA+MzIrdt/2Tkxq9cBlcYhKPyDciecUBkOdTrK4GfiNG+zsPUe97u0yxhzbqpw Sg5P7rrj9ZXddE2f0QK/ryjNiV6sb6Hq8/AQraLjmBTUjcmTbRlVvJwMzMBe9hGj805w Glj+lAZWVaWHa/pF2ek5Tmdr0utBX6F06h9wvEQ/JgTRNoUC0k7Z3S3qrK/koZqwVD1L EsE7/qzGcq9h1c8uANDh2XDgL1d2MMyvrRnTQ7cWxl+0uAMXTNiG+4nooC5Fd4dQZw94 navg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=9+xMapSF679p96gL9vU+Omt/7DAfC+pmm5Ktf8c3i1k=; b=CS0eaLfV6aGSXEdd0cndMHzcyzSMe0QRJ0dTZcPW9ZmCT4xYIjX3IpR0bd7J8RTX5I jSoR4Z4Fx3phAxWhsYDdV1to9Ft8jyPRcoxJsT3QJGCzQn612aTxoov3iNn4rqno3fig ra4ZB+xsEJ35St+u/u8aVA0McPU3ldt7+U+iQQgDELUh898b64jvm0UanjZlMdI+gGL3 QTaOgHxjRveI4748zBCXKzWmtR0NwOhkcP0CVmFDyPXbqTn5QIBaSrWV/k8EYEONrO8u +ti+NCcHLGO4KiMVlxmGkHqg4GLxv5Ws9tBWRbKnfQzTDqBqKi/KbvtIs/LcqDmPIggE KmJQ== X-Gm-Message-State: ACrzQf2+L85ggF+lDBMau0XZSG5TyPxpgT54nKjPq1HaVGn9gb8LZXTe 7qsvlYZLBPT5LJDhH4trXi5gS5Gn1MEPkqqH X-Google-Smtp-Source: AMsMyM5dKRGGtxclgrH6VoUTy06rxcV/bYSduPBt/XOlbgGLKEfBxkjXEWaBwnkhK9MlXfXO4n8YFw== X-Received: by 2002:a05:6000:1565:b0:22b:3057:ba63 with SMTP id 5-20020a056000156500b0022b3057ba63mr16060207wrz.259.1664265410435; Tue, 27 Sep 2022 00:56:50 -0700 (PDT) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id u15-20020a05600c210f00b003a845621c5bsm927638wml.34.2022.09.27.00.56.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Sep 2022 00:56:49 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, tariqt@nvidia.com, moshe@nvidia.com, saeedm@nvidia.com Subject: [patch net-next v2 2/7] net: devlink: introduce a flag to indicate devlink port being registered Date: Tue, 27 Sep 2022 09:56:40 +0200 Message-Id: <20220927075645.2874644-3-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220927075645.2874644-1-jiri@resnulli.us> References: <20220927075645.2874644-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko Instead of relying on devlink pointer not being initialized, introduce an extra flag to indicate if devlink port is registered. This is needed as later on devlink pointer is going to be initialized even in case devlink port is not registered yet. Signed-off-by: Jiri Pirko --- include/net/devlink.h | 3 ++- net/core/devlink.c | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/net/devlink.h b/include/net/devlink.h index 264aa98e6da6..bcacd8dab297 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -129,7 +129,8 @@ struct devlink_port { void *type_dev; struct devlink_port_attrs attrs; u8 attrs_set:1, - switch_port:1; + switch_port:1, + registered:1; struct delayed_work type_warn_dw; struct list_head reporter_list; struct mutex reporters_lock; /* Protects reporter_list */ diff --git a/net/core/devlink.c b/net/core/devlink.c index f5bfbdb0301e..17529e6b2bbf 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -372,9 +372,9 @@ static struct devlink *devlink_get_from_attrs(struct net *net, } #define ASSERT_DEVLINK_PORT_REGISTERED(devlink_port) \ - WARN_ON_ONCE(!(devlink_port)->devlink) + WARN_ON_ONCE(!(devlink_port)->registered) #define ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port) \ - WARN_ON_ONCE((devlink_port)->devlink) + WARN_ON_ONCE((devlink_port)->registered) static struct devlink_port *devlink_port_get_by_index(struct devlink *devlink, unsigned int port_index) @@ -9876,6 +9876,7 @@ int devl_port_register(struct devlink *devlink, ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + devlink_port->registered = true; devlink_port->devlink = devlink; devlink_port->index = port_index; spin_lock_init(&devlink_port->type_lock); @@ -9934,6 +9935,7 @@ void devl_port_unregister(struct devlink_port *devlink_port) WARN_ON(!list_empty(&devlink_port->reporter_list)); WARN_ON(!list_empty(&devlink_port->region_list)); mutex_destroy(&devlink_port->reporters_lock); + devlink_port->registered = false; } EXPORT_SYMBOL_GPL(devl_port_unregister); From patchwork Tue Sep 27 07:56:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12990012 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C3991C6FA83 for ; Tue, 27 Sep 2022 08:01:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231524AbiI0IB3 (ORCPT ); Tue, 27 Sep 2022 04:01:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42912 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231618AbiI0IAZ (ORCPT ); Tue, 27 Sep 2022 04:00:25 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB451B14D7 for ; Tue, 27 Sep 2022 00:56:52 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id s14so13773855wro.0 for ; Tue, 27 Sep 2022 00:56:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=uVlYMwxUZmUiLO0mqm9NPaCo3OwuW8oSwVqJKpysQNY=; b=JptOo60gFjdWNgzFwg4yu11/jJDIAbNzeNXCRuGb38PvIgsMXYFLibudDHPd6bHkcQ Gnuqc1dLfzID3otKdvFNh7+k7NWqGqQYUYuLu1HnmYO96Ngxbi+6z3b+McvX0b6/CsKe GJTzl257a2YgwVkAltzhXqEFnTrrfiiY0rbkymSg6ZFgRqS6BC48kwnv+NgUPKekdzxr G00W7kTNDxCgOQsndSVqZk/c833gMSQ/GLTZrsuKgiA6GjWGd33nTXQSXEncdBpzLAl5 A34AS9y5tBB7CFS6Zj8AjQoIjTSA+awdtBjR6XWscqC+KeIcTXYyhy7MgFZyzF4BV2F+ dPuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=uVlYMwxUZmUiLO0mqm9NPaCo3OwuW8oSwVqJKpysQNY=; b=56Pir9OrDfsK8ZTTTfozQGv7bQ+vO1piHfjv3OesNlbt8q5dmJuYkSWJdYjFWHYTcU IbsoPs41dXIzDK8xxItQ73Z4mlopDIiMeKy49ZJT73Q3t1zuabgN0EqX0mVtomDwUer/ O6V3tI0y7bHX3//2BVZbHgDw0h2vt1IZ871T64ASNAI2ibG6iJ5xcW34zzmRtU17UszF QOngpYdnf7VFsS54YFs2gEcIkdQgyMLLHIE2Bpdemh3Z9Yrpx4Ebh2sRNL5hheH8NTEq pbf/nFay6+e7lC1xsBc/3ceM0NS0U5LQovmbCo7b3ROxNUvCz4e5woqtcNPNpr7jIZYk RZCA== X-Gm-Message-State: ACrzQf26EPt88f1pqZ+a3T9SROSMaB1YUeGMP4tOGdV4TFbWYFt9FPwd VyYTUhcd8jb3TBkXUFCDowOtU1IrlS7l8h4B X-Google-Smtp-Source: AMsMyM4aSHbod+7GXRKRNdM8wHiDfUHPJ3AmCiYxC+f5jjq0b2oeLAB5Tel4d4DwxmDE1zB7On16fw== X-Received: by 2002:a5d:457b:0:b0:22b:24d6:1a9f with SMTP id a27-20020a5d457b000000b0022b24d61a9fmr15292421wrc.201.1664265412020; Tue, 27 Sep 2022 00:56:52 -0700 (PDT) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id e9-20020adfe389000000b00228daaa84aesm1097857wrm.25.2022.09.27.00.56.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Sep 2022 00:56:51 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, tariqt@nvidia.com, moshe@nvidia.com, saeedm@nvidia.com Subject: [patch net-next v2 3/7] net: devlink: add port_init/fini() helpers to allow pre-register/post-unregister functions Date: Tue, 27 Sep 2022 09:56:41 +0200 Message-Id: <20220927075645.2874644-4-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220927075645.2874644-1-jiri@resnulli.us> References: <20220927075645.2874644-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko To be consistent with devlink regions, devlink port regions are going to be forbidden to be created once devlink port is registered. Prepare for this and introduce new set of helpers to allow driver to initialize devlink pointer and region list before devlink_register() is called That allows port regions to be created before devlink port registration and destroyed after devlink port unregistration. Signed-off-by: Jiri Pirko --- include/net/devlink.h | 6 +++++- net/core/devlink.c | 46 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/include/net/devlink.h b/include/net/devlink.h index bcacd8dab297..ba6b8b094943 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -130,7 +130,8 @@ struct devlink_port { struct devlink_port_attrs attrs; u8 attrs_set:1, switch_port:1, - registered:1; + registered:1, + initialized:1; struct delayed_work type_warn_dw; struct list_head reporter_list; struct mutex reporters_lock; /* Protects reporter_list */ @@ -1563,6 +1564,9 @@ void devlink_set_features(struct devlink *devlink, u64 features); void devlink_register(struct devlink *devlink); void devlink_unregister(struct devlink *devlink); void devlink_free(struct devlink *devlink); +void devlink_port_init(struct devlink *devlink, + struct devlink_port *devlink_port); +void devlink_port_fini(struct devlink_port *devlink_port); int devl_port_register(struct devlink *devlink, struct devlink_port *devlink_port, unsigned int port_index); diff --git a/net/core/devlink.c b/net/core/devlink.c index 17529e6b2bbf..89baa7c0938b 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -375,6 +375,8 @@ static struct devlink *devlink_get_from_attrs(struct net *net, WARN_ON_ONCE(!(devlink_port)->registered) #define ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port) \ WARN_ON_ONCE((devlink_port)->registered) +#define ASSERT_DEVLINK_PORT_INITIALIZED(devlink_port) \ + WARN_ON_ONCE(!(devlink_port)->initialized) static struct devlink_port *devlink_port_get_by_index(struct devlink *devlink, unsigned int port_index) @@ -9852,6 +9854,44 @@ static void devlink_port_type_warn_cancel(struct devlink_port *devlink_port) cancel_delayed_work_sync(&devlink_port->type_warn_dw); } +/** + * devlink_port_init() - Init devlink port + * + * @devlink: devlink + * @devlink_port: devlink port + * + * Initialize essencial stuff that is needed for functions + * that may be called before devlink port registration. + * Call to this function is optional and not needed + * in case the driver does not use such functions. + */ +void devlink_port_init(struct devlink *devlink, + struct devlink_port *devlink_port) +{ + if (devlink_port->initialized) + return; + devlink_port->devlink = devlink; + INIT_LIST_HEAD(&devlink_port->region_list); + devlink_port->initialized = true; +} +EXPORT_SYMBOL_GPL(devlink_port_init); + +/** + * devlink_port_fini() - Deinitialize devlink port + * + * @devlink_port: devlink port + * + * Deinitialize essencial stuff that is in use for functions + * that may be called after devlink port unregistration. + * Call to this function is optional and not needed + * in case the driver does not use such functions. + */ +void devlink_port_fini(struct devlink_port *devlink_port) +{ + WARN_ON(!list_empty(&devlink_port->region_list)); +} +EXPORT_SYMBOL_GPL(devlink_port_fini); + /** * devl_port_register() - Register devlink port * @@ -9876,14 +9916,13 @@ int devl_port_register(struct devlink *devlink, ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port); + devlink_port_init(devlink, devlink_port); devlink_port->registered = true; - devlink_port->devlink = devlink; devlink_port->index = port_index; spin_lock_init(&devlink_port->type_lock); INIT_LIST_HEAD(&devlink_port->reporter_list); mutex_init(&devlink_port->reporters_lock); list_add_tail(&devlink_port->list, &devlink->port_list); - INIT_LIST_HEAD(&devlink_port->region_list); INIT_DELAYED_WORK(&devlink_port->type_warn_dw, &devlink_port_type_warn); devlink_port_type_warn_schedule(devlink_port); @@ -9933,7 +9972,6 @@ void devl_port_unregister(struct devlink_port *devlink_port) devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_DEL); list_del(&devlink_port->list); WARN_ON(!list_empty(&devlink_port->reporter_list)); - WARN_ON(!list_empty(&devlink_port->region_list)); mutex_destroy(&devlink_port->reporters_lock); devlink_port->registered = false; } @@ -11347,6 +11385,8 @@ devlink_port_region_create(struct devlink_port *port, struct devlink_region *region; int err = 0; + ASSERT_DEVLINK_PORT_INITIALIZED(port); + if (WARN_ON(!ops) || WARN_ON(!ops->destructor)) return ERR_PTR(-EINVAL); From patchwork Tue Sep 27 07:56:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12990013 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E220C54EE9 for ; Tue, 27 Sep 2022 08:01:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231575AbiI0IBb (ORCPT ); Tue, 27 Sep 2022 04:01:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231396AbiI0IAj (ORCPT ); Tue, 27 Sep 2022 04:00:39 -0400 Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49765B0294 for ; Tue, 27 Sep 2022 00:56:54 -0700 (PDT) Received: by mail-wr1-x434.google.com with SMTP id s14so13773951wro.0 for ; Tue, 27 Sep 2022 00:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=5AC9rhXKlJRRXdUWnUqHjLPZfMA6XqruzQhBmxQFAM0=; b=sCka1ueglsjWEyqpSc3LDBfGfN3aF35FDGH1XPEu6PbR7YrYioqBeWTzYpB35TcUZU 105NshwqadXIaJ7UNGmIO6p2k2+Z1btmAxLhylwAWuA5tN7X1gLi1Xq3eecnlhYz88aA czcnzdGgaW+TdNXYxcdHgUpKv85bSzrpYwLd9FMtdkJ4TYTuIgf7AYg/prTj5WZS8F9w y0IvL8cOQagi+R4TSUnYbk/7g6YaOffj01ucT9y1eUOmn6jiGyCOtniFSnKfrhWI9ra+ FGg4aD9YRExOOmUw5f+QfVYnVcQ/J4Q2asyfJ7z4tNB+3Q0UKXoIbT6/NrXtuyofE39m hmgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=5AC9rhXKlJRRXdUWnUqHjLPZfMA6XqruzQhBmxQFAM0=; b=lK95pkwuW9sigkuVe2lUaekjZiK12nYns3we6AhbfPQECObkxKO7JZtVDvhRvQA6iV PDi6cMVVIfaWkl0dq1bD8jXm33+uMN711baaJBak7/MhCxbfuonV1/QeKImNijI/sb7c GLRIfl6kgyDdANed/yr4o0A3QgQmSl81odoTegzKIpHKfAf4CKaYb1M5dAHeFogEo/Fr No60PhQa6hHvPsiJzgX1iwNMQrDRY6ShWXALdwc/08z92rBQsPUcp0qOSp6FlBb8h44U rPKyrQlkbIctVXNH0gf/TB8UM0ZWJf7qxvG3zQ86cRWvLx1//eyGlkojWeJ5/o6b/jkY h0kA== X-Gm-Message-State: ACrzQf3D1fvNTCQsiOK725CQ2/lb3gcw+Ox1hGwumyuZsyyGQ/wgdFBK c3WHNGGwib/6O1aTPY5MaC5MHlaszsSkBW22 X-Google-Smtp-Source: AMsMyM4xAXqaK5Db285tzmcgXTCTFkoKBaGSuEYeA2LJFeA1Btybiix2ldUrnysXUcdWG7b9pO8NnA== X-Received: by 2002:a5d:457b:0:b0:22b:24d6:1a9f with SMTP id a27-20020a5d457b000000b0022b24d61a9fmr15292471wrc.201.1664265413578; Tue, 27 Sep 2022 00:56:53 -0700 (PDT) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id bg8-20020a05600c3c8800b003a5c999cd1asm1161242wmb.14.2022.09.27.00.56.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Sep 2022 00:56:53 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, tariqt@nvidia.com, moshe@nvidia.com, saeedm@nvidia.com Subject: [patch net-next v2 4/7] net: dsa: move port_setup/teardown to be called outside devlink port registered area Date: Tue, 27 Sep 2022 09:56:42 +0200 Message-Id: <20220927075645.2874644-5-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220927075645.2874644-1-jiri@resnulli.us> References: <20220927075645.2874644-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko Move port_setup() op to be called before devlink_port_register() and port_teardown() after devlink_port_unregister(). Note it makes sense to move this alongside the rest of the devlink port code, the reinit() function also gets much nicer, as clearly the fact that port_setup()->devlink_port_region_create() was called in dsa_port_setup did not fit the flow. Signed-off-by: Jiri Pirko --- net/dsa/dsa2.c | 68 +++++++++++++++++++------------------------------- 1 file changed, 26 insertions(+), 42 deletions(-) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 7024e2120de1..6f555b1bb483 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -472,12 +472,6 @@ static int dsa_port_setup(struct dsa_port *dp) if (dp->setup) return 0; - if (ds->ops->port_setup) { - err = ds->ops->port_setup(ds, dp->index); - if (err) - return err; - } - switch (dp->type) { case DSA_PORT_TYPE_UNUSED: dsa_port_disable(dp); @@ -532,11 +526,8 @@ static int dsa_port_setup(struct dsa_port *dp) dsa_port_disable(dp); if (err && dsa_port_link_registered) dsa_shared_port_link_unregister_of(dp); - if (err) { - if (ds->ops->port_teardown) - ds->ops->port_teardown(ds, dp->index); + if (err) return err; - } dp->setup = true; @@ -549,17 +540,26 @@ static int dsa_port_devlink_setup(struct dsa_port *dp) struct dsa_switch_tree *dst = dp->ds->dst; struct devlink_port_attrs attrs = {}; struct devlink *dl = dp->ds->devlink; + struct dsa_switch *ds = dp->ds; const unsigned char *id; unsigned char len; int err; + memset(dlp, 0, sizeof(*dlp)); + devlink_port_init(dl, dlp); + + if (ds->ops->port_setup) { + err = ds->ops->port_setup(ds, dp->index); + if (err) + return err; + } + id = (const unsigned char *)&dst->index; len = sizeof(dst->index); attrs.phys.port_number = dp->index; memcpy(attrs.switch_id.id, id, len); attrs.switch_id.id_len = len; - memset(dlp, 0, sizeof(*dlp)); switch (dp->type) { case DSA_PORT_TYPE_UNUSED: @@ -578,24 +578,23 @@ static int dsa_port_devlink_setup(struct dsa_port *dp) devlink_port_attrs_set(dlp, &attrs); err = devlink_port_register(dl, dlp, dp->index); + if (err) { + if (ds->ops->port_teardown) + ds->ops->port_teardown(ds, dp->index); + return err; + } + dp->devlink_port_setup = true; - if (!err) - dp->devlink_port_setup = true; - - return err; + return 0; } static void dsa_port_teardown(struct dsa_port *dp) { struct devlink_port *dlp = &dp->devlink_port; - struct dsa_switch *ds = dp->ds; if (!dp->setup) return; - if (ds->ops->port_teardown) - ds->ops->port_teardown(ds, dp->index); - devlink_port_type_clear(dlp); switch (dp->type) { @@ -625,40 +624,25 @@ static void dsa_port_teardown(struct dsa_port *dp) static void dsa_port_devlink_teardown(struct dsa_port *dp) { struct devlink_port *dlp = &dp->devlink_port; + struct dsa_switch *ds = dp->ds; - if (dp->devlink_port_setup) + if (dp->devlink_port_setup) { devlink_port_unregister(dlp); + if (ds->ops->port_teardown) + ds->ops->port_teardown(ds, dp->index); + devlink_port_fini(dlp); + } dp->devlink_port_setup = false; } /* Destroy the current devlink port, and create a new one which has the UNUSED - * flavour. At this point, any call to ds->ops->port_setup has been already - * balanced out by a call to ds->ops->port_teardown, so we know that any - * devlink port regions the driver had are now unregistered. We then call its - * ds->ops->port_setup again, in order for the driver to re-create them on the - * new devlink port. + * flavour. */ static int dsa_port_reinit_as_unused(struct dsa_port *dp) { - struct dsa_switch *ds = dp->ds; - int err; - dsa_port_devlink_teardown(dp); dp->type = DSA_PORT_TYPE_UNUSED; - err = dsa_port_devlink_setup(dp); - if (err) - return err; - - if (ds->ops->port_setup) { - /* On error, leave the devlink port registered, - * dsa_switch_teardown will clean it up later. - */ - err = ds->ops->port_setup(ds, dp->index); - if (err) - return err; - } - - return 0; + return dsa_port_devlink_setup(dp); } static int dsa_devlink_info_get(struct devlink *dl, From patchwork Tue Sep 27 07:56:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12990079 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2325DC07E9D for ; Tue, 27 Sep 2022 08:02:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231671AbiI0ICw (ORCPT ); Tue, 27 Sep 2022 04:02:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231669AbiI0ICZ (ORCPT ); Tue, 27 Sep 2022 04:02:25 -0400 Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76FEDAD9B7 for ; Tue, 27 Sep 2022 00:57:30 -0700 (PDT) Received: by mail-wr1-x434.google.com with SMTP id bk15so5931095wrb.13 for ; Tue, 27 Sep 2022 00:57:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=afxhdEeIWZKBb7fbjvmfLtmjQY+YpZyKcmvAKwBHZIU=; b=VQ3ZJo/6YXJv++1oQ+eUwByhQYM1PEXlaaz4NXN2Fo1K2yrYSjwSEzt9IF8aNTXjsd Hk5bgxz91fk6XTwevzeLMpUGEbEkU6+k0GVwDhmP5QS/JIC5tqChVSUirYBsiNSKhIvZ Qzt1BKkIz5JZI1A5/X4ciAr9I+ZDYPfDDOKDlmCDUS/pkXtKCVJZnoUIixdOfGXVngWe Br9HvChbX/Xhc7ysVpUUp8CfWhnwy2qglRJ6yllqZ8m3ZuEnqnwAUL1gjQSWkq9mTfHh GO0W/X/yvKgqqkPD+BjL4/gxzFcR/scoycsJWSJ1GqwefEXlE5sF346Raq9qJjcJcPLf wzZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=afxhdEeIWZKBb7fbjvmfLtmjQY+YpZyKcmvAKwBHZIU=; b=3y2rNmhs1AgJw1mw50g8sRcTGpf8A0EqmmeSB82WgXww6cLpXc+Irs8YTv00Ouv8db VhczBh/iinOMVKEjUzeyruWd11sCl7Xy0G1kPJgMUGvVPOuJJb8lBfy9NfV8FBVmk0WK uyCFnkG5wwxrsbsFpoLSG7/W3lAyjQ1LkvsnL03VfoO5yEr40EZ1lDp6/9ITVrFCTMmq mBJIxyGx9fzmbt/xsshZEPLTN2GQ0M0lBM0Yp421w3ingPXRx5Dxg6MIxgFC0XfMFq72 KdR8pV9SH9MgorSMQQP8ZE3u1e/aR7YJ5g7pGg0Zf/f0UB94LCLfZei9Un63TkkIHjC5 wdnA== X-Gm-Message-State: ACrzQf3XoZCx8bte26jr85FNjlpTaavA8jhqZ6qkPXNE5NjzVbEC/K41 yIM1aG2/Tvx5TRglkeo/6SQ7jZI/Uy0fQk92 X-Google-Smtp-Source: AMsMyM6JPd52i2KwH6Qk4y31QpDrFnPLozyG6ijsshjTSLubQLLSx850tU2Qj1x/6nROnlP+JfdtBw== X-Received: by 2002:a5d:6485:0:b0:226:ecf9:359c with SMTP id o5-20020a5d6485000000b00226ecf9359cmr16539078wri.17.1664265415165; Tue, 27 Sep 2022 00:56:55 -0700 (PDT) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id b8-20020a5d45c8000000b0022ca921dc67sm1026316wrs.88.2022.09.27.00.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Sep 2022 00:56:54 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, tariqt@nvidia.com, moshe@nvidia.com, saeedm@nvidia.com Subject: [patch net-next v2 5/7] net: dsa: don't leave dangling pointers in dp->pl when failing Date: Tue, 27 Sep 2022 09:56:43 +0200 Message-Id: <20220927075645.2874644-6-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220927075645.2874644-1-jiri@resnulli.us> References: <20220927075645.2874644-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Vladimir Oltean There is a desire to simplify the dsa_port registration path with devlink, and this involves reworking a bit how user ports which fail to connect to their PHY (because it's missing) get reinitialized as UNUSED devlink ports. The desire is for the change to look something like this; basically dsa_port_setup() has failed, we just change dp->type and call dsa_port_setup() again. -/* Destroy the current devlink port, and create a new one which has the UNUSED - * flavour. - */ -static int dsa_port_reinit_as_unused(struct dsa_port *dp) +static int dsa_port_setup_as_unused(struct dsa_port *dp) { - dsa_port_devlink_teardown(dp); dp->type = DSA_PORT_TYPE_UNUSED; - return dsa_port_devlink_setup(dp); + return dsa_port_setup(dp); } For an UNUSED port, dsa_port_setup() mostly only calls dsa_port_devlink_setup() anyway, so we could get away with calling just that. But if we call the full blown dsa_port_setup(dp) (which will be needed to properly set dp->setup = true), the callee will have the tendency to go through this code block too, and call dsa_port_disable(dp): switch (dp->type) { case DSA_PORT_TYPE_UNUSED: dsa_port_disable(dp); break; That is not very good, because dsa_port_disable() has this hidden inside of it: if (dp->pl) phylink_stop(dp->pl); Fact is, we are not prepared to handle a call to dsa_port_disable() with a struct dsa_port that came from a previous (and failed) call to dsa_port_setup(). We do not clean up dp->pl, and this will make the second call to dsa_port_setup() call phylink_stop() on a dangling dp->pl pointer. Solve this by creating an API for phylink destruction which is symmetric to the phylink creation, and never leave dp->pl set to anything except NULL or a valid phylink structure. Signed-off-by: Vladimir Oltean Signed-off-by: Jiri Pirko --- net/dsa/dsa_priv.h | 1 + net/dsa/port.c | 22 +++++++++++++++------- net/dsa/slave.c | 6 +++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 129e4a649c7e..6e65c7ffd6f3 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -294,6 +294,7 @@ int dsa_port_mrp_add_ring_role(const struct dsa_port *dp, int dsa_port_mrp_del_ring_role(const struct dsa_port *dp, const struct switchdev_obj_ring_role_mrp *mrp); int dsa_port_phylink_create(struct dsa_port *dp); +void dsa_port_phylink_destroy(struct dsa_port *dp); int dsa_shared_port_link_register_of(struct dsa_port *dp); void dsa_shared_port_link_unregister_of(struct dsa_port *dp); int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr); diff --git a/net/dsa/port.c b/net/dsa/port.c index e6289a1db0a0..e4a0513816bb 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -1661,6 +1661,7 @@ int dsa_port_phylink_create(struct dsa_port *dp) { struct dsa_switch *ds = dp->ds; phy_interface_t mode; + struct phylink *pl; int err; err = of_get_phy_mode(dp->dn, &mode); @@ -1677,16 +1678,24 @@ int dsa_port_phylink_create(struct dsa_port *dp) if (ds->ops->phylink_get_caps) ds->ops->phylink_get_caps(ds, dp->index, &dp->pl_config); - dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn), - mode, &dsa_port_phylink_mac_ops); - if (IS_ERR(dp->pl)) { + pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn), + mode, &dsa_port_phylink_mac_ops); + if (IS_ERR(pl)) { pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl)); - return PTR_ERR(dp->pl); + return PTR_ERR(pl); } + dp->pl = pl; + return 0; } +void dsa_port_phylink_destroy(struct dsa_port *dp) +{ + phylink_destroy(dp->pl); + dp->pl = NULL; +} + static int dsa_shared_port_setup_phy_of(struct dsa_port *dp, bool enable) { struct dsa_switch *ds = dp->ds; @@ -1781,7 +1790,7 @@ static int dsa_shared_port_phylink_register(struct dsa_port *dp) return 0; err_phy_connect: - phylink_destroy(dp->pl); + dsa_port_phylink_destroy(dp); return err; } @@ -1983,8 +1992,7 @@ void dsa_shared_port_link_unregister_of(struct dsa_port *dp) rtnl_lock(); phylink_disconnect_phy(dp->pl); rtnl_unlock(); - phylink_destroy(dp->pl); - dp->pl = NULL; + dsa_port_phylink_destroy(dp); return; } diff --git a/net/dsa/slave.c b/net/dsa/slave.c index aa47ddc19fdf..1a59918d3b30 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -2304,7 +2304,7 @@ static int dsa_slave_phy_setup(struct net_device *slave_dev) if (ret) { netdev_err(slave_dev, "failed to connect to PHY: %pe\n", ERR_PTR(ret)); - phylink_destroy(dp->pl); + dsa_port_phylink_destroy(dp); } return ret; @@ -2476,7 +2476,7 @@ int dsa_slave_create(struct dsa_port *port) rtnl_lock(); phylink_disconnect_phy(p->dp->pl); rtnl_unlock(); - phylink_destroy(p->dp->pl); + dsa_port_phylink_destroy(p->dp); out_gcells: gro_cells_destroy(&p->gcells); out_free: @@ -2499,7 +2499,7 @@ void dsa_slave_destroy(struct net_device *slave_dev) phylink_disconnect_phy(dp->pl); rtnl_unlock(); - phylink_destroy(dp->pl); + dsa_port_phylink_destroy(dp); gro_cells_destroy(&p->gcells); free_percpu(slave_dev->tstats); free_netdev(slave_dev); From patchwork Tue Sep 27 07:56:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12990080 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6878FC54EE9 for ; Tue, 27 Sep 2022 08:02:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231718AbiI0IC4 (ORCPT ); Tue, 27 Sep 2022 04:02:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231406AbiI0IC1 (ORCPT ); Tue, 27 Sep 2022 04:02:27 -0400 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 394E2B2844 for ; Tue, 27 Sep 2022 00:57:32 -0700 (PDT) Received: by mail-wm1-x32c.google.com with SMTP id r10-20020a1c440a000000b003b494ffc00bso771038wma.0 for ; Tue, 27 Sep 2022 00:57:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=6QNNmB1KrlRdIoS5VOtMx6+GOMit4lATyDU2M5Q3WeE=; b=7hqVfZ+0oMRw0Fq0bDYCWczTYgM+0l8TSCD1DLkE5w3dpbIq9q09rvm3TB4HNsRNXz D1Hbmt+WEb1nX4s52OtAy6LaHrtzriC3/rb/cW5soyBo178psnHx4ylNCajC9JVY375l kTVEB0iKppgNVPeGOwNxn2CJIQYoUF9sRULNIz0T4QEZR/HKg+onOGmrkA09pgtdCHyD YHMq1tn31hI6OUsya3h9Kvu/HlTL/Xb5zpHMEFsInMxrpQ5rMX9aqgMwQjclfVWE88Fj lF50u/IUZwWuUjJgvHUdgDGjcsvyQnydBX5DfyB15kuy0KBI55jEUdDe8ilj9Zh38fsR yVCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=6QNNmB1KrlRdIoS5VOtMx6+GOMit4lATyDU2M5Q3WeE=; b=N10pVwl3jHc4uh7vN2p8XuCR3F9vT2t+zi/y5MKKvIpZpFDCgPNi/ZJaiAZ4p3A0Tt pxrNVvs95P6weghWeAXXcQaRqRyKTG1GdaEsKaRLFUr1C9+DWUKClGbcEReNdwnyz62S B9/nDcl8RsD7/deK1xXIJjt9Dsms8vT74giQOSw0ggCK2gp42UUnbHTrtE0l36Rj/L3m 150hvkXBdTvTgdFkHPsw/AbK0qtE5H17t5TUABp5qF49H4135xljL08HPZCRPN47nIQX MLh1ba8XM/8bPEtEshTzs0n+S84agadP+rmSc6nDisXk7H4cdEfZmIpSnYkdE4r2Mca+ FaVg== X-Gm-Message-State: ACrzQf33NlznE3VUgZclPC+ADelbmJ2lVOtYxBOP4k0lLEEKeK4dil+8 K+GwjT6mUc805QUw1Dv1t/HklegAJyYKst4k X-Google-Smtp-Source: AMsMyM6LdZt1vYQ6V2lOOY78sCwCgLHaIXr0KiLDyPZAn/xYhZgP1lq2wS8la7GrU6XdUm0WZHqhog== X-Received: by 2002:a7b:c848:0:b0:3b4:73f4:2320 with SMTP id c8-20020a7bc848000000b003b473f42320mr1596275wml.124.1664265416750; Tue, 27 Sep 2022 00:56:56 -0700 (PDT) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id f9-20020adff8c9000000b0022ac12fff29sm1029010wrq.65.2022.09.27.00.56.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Sep 2022 00:56:56 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, tariqt@nvidia.com, moshe@nvidia.com, saeedm@nvidia.com Subject: [patch net-next v2 6/7] net: dsa: don't do devlink port setup early Date: Tue, 27 Sep 2022 09:56:44 +0200 Message-Id: <20220927075645.2874644-7-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220927075645.2874644-1-jiri@resnulli.us> References: <20220927075645.2874644-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Jiri Pirko Commit 3122433eb533 ("net: dsa: Register devlink ports before calling DSA driver setup()") moved devlink port setup to be done early before driver setup() was called. That is no longer needed, so move the devlink port initialization back to dsa_port_setup(), as the first thing done there. Note there is no longer needed to reinit port as unused if dsa_port_setup() fails, as it unregisters the devlink port instance on the error path. Signed-off-by: Jiri Pirko --- v1->v2: - added back the reinit as unused in case port setup fails --- net/dsa/dsa2.c | 176 +++++++++++++++++++++++-------------------------- 1 file changed, 82 insertions(+), 94 deletions(-) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 6f555b1bb483..747c0364fb0f 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -461,6 +461,74 @@ static void dsa_tree_teardown_cpu_ports(struct dsa_switch_tree *dst) dp->cpu_dp = NULL; } +static int dsa_port_devlink_setup(struct dsa_port *dp) +{ + struct devlink_port *dlp = &dp->devlink_port; + struct dsa_switch_tree *dst = dp->ds->dst; + struct devlink_port_attrs attrs = {}; + struct devlink *dl = dp->ds->devlink; + struct dsa_switch *ds = dp->ds; + const unsigned char *id; + unsigned char len; + int err; + + memset(dlp, 0, sizeof(*dlp)); + devlink_port_init(dl, dlp); + + if (ds->ops->port_setup) { + err = ds->ops->port_setup(ds, dp->index); + if (err) + return err; + } + + id = (const unsigned char *)&dst->index; + len = sizeof(dst->index); + + attrs.phys.port_number = dp->index; + memcpy(attrs.switch_id.id, id, len); + attrs.switch_id.id_len = len; + + switch (dp->type) { + case DSA_PORT_TYPE_UNUSED: + attrs.flavour = DEVLINK_PORT_FLAVOUR_UNUSED; + break; + case DSA_PORT_TYPE_CPU: + attrs.flavour = DEVLINK_PORT_FLAVOUR_CPU; + break; + case DSA_PORT_TYPE_DSA: + attrs.flavour = DEVLINK_PORT_FLAVOUR_DSA; + break; + case DSA_PORT_TYPE_USER: + attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL; + break; + } + + devlink_port_attrs_set(dlp, &attrs); + err = devlink_port_register(dl, dlp, dp->index); + if (err) { + if (ds->ops->port_teardown) + ds->ops->port_teardown(ds, dp->index); + return err; + } + dp->devlink_port_setup = true; + + return 0; +} + +static void dsa_port_devlink_teardown(struct dsa_port *dp) +{ + struct devlink_port *dlp = &dp->devlink_port; + struct dsa_switch *ds = dp->ds; + + if (dp->devlink_port_setup) { + devlink_port_unregister(dlp); + if (ds->ops->port_teardown) + ds->ops->port_teardown(ds, dp->index); + devlink_port_fini(dlp); + } + dp->devlink_port_setup = false; +} + static int dsa_port_setup(struct dsa_port *dp) { struct devlink_port *dlp = &dp->devlink_port; @@ -472,6 +540,10 @@ static int dsa_port_setup(struct dsa_port *dp) if (dp->setup) return 0; + err = dsa_port_devlink_setup(dp); + if (err) + return err; + switch (dp->type) { case DSA_PORT_TYPE_UNUSED: dsa_port_disable(dp); @@ -526,64 +598,12 @@ static int dsa_port_setup(struct dsa_port *dp) dsa_port_disable(dp); if (err && dsa_port_link_registered) dsa_shared_port_link_unregister_of(dp); - if (err) - return err; - - dp->setup = true; - - return 0; -} - -static int dsa_port_devlink_setup(struct dsa_port *dp) -{ - struct devlink_port *dlp = &dp->devlink_port; - struct dsa_switch_tree *dst = dp->ds->dst; - struct devlink_port_attrs attrs = {}; - struct devlink *dl = dp->ds->devlink; - struct dsa_switch *ds = dp->ds; - const unsigned char *id; - unsigned char len; - int err; - - memset(dlp, 0, sizeof(*dlp)); - devlink_port_init(dl, dlp); - - if (ds->ops->port_setup) { - err = ds->ops->port_setup(ds, dp->index); - if (err) - return err; - } - - id = (const unsigned char *)&dst->index; - len = sizeof(dst->index); - - attrs.phys.port_number = dp->index; - memcpy(attrs.switch_id.id, id, len); - attrs.switch_id.id_len = len; - - switch (dp->type) { - case DSA_PORT_TYPE_UNUSED: - attrs.flavour = DEVLINK_PORT_FLAVOUR_UNUSED; - break; - case DSA_PORT_TYPE_CPU: - attrs.flavour = DEVLINK_PORT_FLAVOUR_CPU; - break; - case DSA_PORT_TYPE_DSA: - attrs.flavour = DEVLINK_PORT_FLAVOUR_DSA; - break; - case DSA_PORT_TYPE_USER: - attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL; - break; - } - - devlink_port_attrs_set(dlp, &attrs); - err = devlink_port_register(dl, dlp, dp->index); if (err) { - if (ds->ops->port_teardown) - ds->ops->port_teardown(ds, dp->index); + dsa_port_devlink_teardown(dp); return err; } - dp->devlink_port_setup = true; + + dp->setup = true; return 0; } @@ -618,31 +638,15 @@ static void dsa_port_teardown(struct dsa_port *dp) break; } - dp->setup = false; -} - -static void dsa_port_devlink_teardown(struct dsa_port *dp) -{ - struct devlink_port *dlp = &dp->devlink_port; - struct dsa_switch *ds = dp->ds; + dsa_port_devlink_teardown(dp); - if (dp->devlink_port_setup) { - devlink_port_unregister(dlp); - if (ds->ops->port_teardown) - ds->ops->port_teardown(ds, dp->index); - devlink_port_fini(dlp); - } - dp->devlink_port_setup = false; + dp->setup = false; } -/* Destroy the current devlink port, and create a new one which has the UNUSED - * flavour. - */ -static int dsa_port_reinit_as_unused(struct dsa_port *dp) +static int dsa_port_setup_as_unused(struct dsa_port *dp) { - dsa_port_devlink_teardown(dp); dp->type = DSA_PORT_TYPE_UNUSED; - return dsa_port_devlink_setup(dp); + return dsa_port_setup(dp); } static int dsa_devlink_info_get(struct devlink *dl, @@ -866,7 +870,6 @@ static int dsa_switch_setup(struct dsa_switch *ds) { struct dsa_devlink_priv *dl_priv; struct device_node *dn; - struct dsa_port *dp; int err; if (ds->setup) @@ -889,18 +892,9 @@ static int dsa_switch_setup(struct dsa_switch *ds) dl_priv = devlink_priv(ds->devlink); dl_priv->ds = ds; - /* Setup devlink port instances now, so that the switch - * setup() can register regions etc, against the ports - */ - dsa_switch_for_each_port(dp, ds) { - err = dsa_port_devlink_setup(dp); - if (err) - goto unregister_devlink_ports; - } - err = dsa_switch_register_notifier(ds); if (err) - goto unregister_devlink_ports; + goto devlink_free; ds->configure_vlan_while_not_filtering = true; @@ -941,9 +935,7 @@ static int dsa_switch_setup(struct dsa_switch *ds) ds->ops->teardown(ds); unregister_notifier: dsa_switch_unregister_notifier(ds); -unregister_devlink_ports: - dsa_switch_for_each_port(dp, ds) - dsa_port_devlink_teardown(dp); +devlink_free: devlink_free(ds->devlink); ds->devlink = NULL; return err; @@ -951,8 +943,6 @@ static int dsa_switch_setup(struct dsa_switch *ds) static void dsa_switch_teardown(struct dsa_switch *ds) { - struct dsa_port *dp; - if (!ds->setup) return; @@ -971,8 +961,6 @@ static void dsa_switch_teardown(struct dsa_switch *ds) dsa_switch_unregister_notifier(ds); if (ds->devlink) { - dsa_switch_for_each_port(dp, ds) - dsa_port_devlink_teardown(dp); devlink_free(ds->devlink); ds->devlink = NULL; } @@ -1025,7 +1013,7 @@ static int dsa_tree_setup_ports(struct dsa_switch_tree *dst) if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) { err = dsa_port_setup(dp); if (err) { - err = dsa_port_reinit_as_unused(dp); + err = dsa_port_setup_as_unused(dp); if (err) goto teardown; } From patchwork Tue Sep 27 07:56:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12990081 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A150BC6FA83 for ; Tue, 27 Sep 2022 08:03:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231270AbiI0IC7 (ORCPT ); Tue, 27 Sep 2022 04:02:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231657AbiI0IC3 (ORCPT ); Tue, 27 Sep 2022 04:02:29 -0400 Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D3D00B2854 for ; Tue, 27 Sep 2022 00:57:32 -0700 (PDT) Received: by mail-wm1-x336.google.com with SMTP id t4so5976008wmj.5 for ; Tue, 27 Sep 2022 00:57:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=XvmaiymTmJNoWno9o8jMIYcjUDwPb215/dnmXOiq+S8=; b=31sUqlV1a2aw88fOvIZBHHbjHNkX86ayp5JO2DQkJAFlaxH6yDfTRcijii/KgkZKhV PrcLk+nWlR7NVtuQ3VGbteaAtWMOuEjU7cOK6XHmNFMIYiLB+HStc8S7g2//+42ayBs+ 9cagD5JdAMsY0cnVRsORn4EM1eRCzT57btqYNeKj9R8rHgJAoJabeUP0h2aJXCmEJpac WywZrQ0upMzdYWlN6VnS5/3CQJwDIGGQ7VlAsZ8lOCYR5sDfX1yXrjywT1z2Q/yzdDHs Zl0v8aKKyXwSNFUlxACxKEY253ucRa5vfDy/Cj2waeV2+y0CSHOxaVQwAVN2/rEhpw3S gbkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=XvmaiymTmJNoWno9o8jMIYcjUDwPb215/dnmXOiq+S8=; b=OO4Uf8huDm8Hc+P23tAFTVuz4G8AmIZqeBYwJDFuQXLFXXUPCdZtZNLU6pT9VSOI9W OX6aFyIKCg4eWpgLrk3/TVuNHOUKkuwbzkk3QChzXA+ksNrdbDs27lOIpfOBe9XKpt74 OwlecZziwbZrjtR6YVQuqDX0SQha2nakrO9jTSJqzu6lDnJsT7FxI5p+FRjyqDvCwfeM pCeIT9dy17Z6d2NSgA65rC5bPv3A3litio0XSar1Ug789qmSHCz9b72EpqpybRG3WYjk A5SmSYIkna27ulLA7I7bpcHhqbXrVjttg6IZxKpk6KiA4asdCq9/3IT9WnpZtKl1TBBA uraQ== X-Gm-Message-State: ACrzQf2/sqUEh4MlLoheuHoZfK2kol0IeIP7KppXAxKk23twfa6G23Ky rxOrBbyu9XABCefjc3N0urrvIUReUo40Ings X-Google-Smtp-Source: AMsMyM6+qSWVwSQTRr7XHjDlI554uKO80faoUznRHEcLEfUj6n77Sufy+Bng8MaI73LoXRrop3+uZg== X-Received: by 2002:a05:600c:500d:b0:3b5:234:d7e9 with SMTP id n13-20020a05600c500d00b003b50234d7e9mr1612205wmr.57.1664265418306; Tue, 27 Sep 2022 00:56:58 -0700 (PDT) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id m20-20020a05600c4f5400b003b47e75b401sm14432213wmq.37.2022.09.27.00.56.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Sep 2022 00:56:57 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, tariqt@nvidia.com, moshe@nvidia.com, saeedm@nvidia.com Subject: [patch net-next v2 7/7] net: dsa: remove bool devlink_port_setup Date: Tue, 27 Sep 2022 09:56:45 +0200 Message-Id: <20220927075645.2874644-8-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220927075645.2874644-1-jiri@resnulli.us> References: <20220927075645.2874644-1-jiri@resnulli.us> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Vladimir Oltean Since dsa_port_devlink_setup() and dsa_port_devlink_teardown() are already called from code paths which only execute once per port (due to the existing bool dp->setup), keeping another dp->devlink_port_setup is redundant, because we can already manage to balance the calls properly (and not call teardown when setup was never called, or call setup twice, or things like that). Signed-off-by: Vladimir Oltean Signed-off-by: Jiri Pirko --- include/net/dsa.h | 2 -- net/dsa/dsa2.c | 14 ++++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index d777eac5694f..ee369670e20e 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -294,8 +294,6 @@ struct dsa_port { u8 lag_tx_enabled:1; - u8 devlink_port_setup:1; - /* Master state bits, valid only on CPU ports */ u8 master_admin_up:1; u8 master_oper_up:1; diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 747c0364fb0f..af0e2c0394ac 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -510,7 +510,6 @@ static int dsa_port_devlink_setup(struct dsa_port *dp) ds->ops->port_teardown(ds, dp->index); return err; } - dp->devlink_port_setup = true; return 0; } @@ -520,13 +519,12 @@ static void dsa_port_devlink_teardown(struct dsa_port *dp) struct devlink_port *dlp = &dp->devlink_port; struct dsa_switch *ds = dp->ds; - if (dp->devlink_port_setup) { - devlink_port_unregister(dlp); - if (ds->ops->port_teardown) - ds->ops->port_teardown(ds, dp->index); - devlink_port_fini(dlp); - } - dp->devlink_port_setup = false; + devlink_port_unregister(dlp); + + if (ds->ops->port_teardown) + ds->ops->port_teardown(ds, dp->index); + + devlink_port_fini(dlp); } static int dsa_port_setup(struct dsa_port *dp)