From patchwork Thu Sep 29 07:28:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12993629 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 8F3CCC07E9D for ; Thu, 29 Sep 2022 07:29:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234912AbiI2H3K (ORCPT ); Thu, 29 Sep 2022 03:29:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45896 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234713AbiI2H3I (ORCPT ); Thu, 29 Sep 2022 03:29:08 -0400 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 24041133CA3 for ; Thu, 29 Sep 2022 00:29:07 -0700 (PDT) Received: by mail-wr1-x433.google.com with SMTP id v28so761272wrd.3 for ; Thu, 29 Sep 2022 00:29:07 -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=BRDELzk+x/f+hO9X05Gf0kRVvX17dR6l5BforSD1pc8MeLg86H88T2/0mWzISrgMWh HQgLd27fQFo3pQ458sen8Wy2420sk1PPqsN7O6AR4tNWNAdmYxyud0s53SOmHckzhZht 9luJVPlfgkDxbxTdx1rsQdHIu+e81OVKMAJq0aSQhiUND03Db6dkw9dmt3wLhSKTvbPP y6xrKEyLeiLJniogpZ5kWwRdgqvnJ3RcdWvMaAveXb9X0dDBTI3rKQocS/PL1zR7HeKS 5IJvZ24YO6HwMi7upDHq0HS4CeaViab0fKPU7Ri4LLTdmM21rsh1lkXJFcAzHnRGce1n mLww== 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=RpRx7t+ryhIwVQHUAu0ek1mTe0BdQ2H7AfmCPhvl335B19PLm/6TLaiutaMN9agNEK 6xQtYQo0/2kGVranCI4EXaEcdNxfCiZozp2lVgJ5FfKwZUENcpSGtZl9hzkS+WWk0evy QwhWpuVgXVdHCIJ76uANyUeffBE71nEmMrHPONIycKx+iNq18kR5z3HlYLVEVKECd+rD g3Y+EBahTAqP2QaRTx1SaFp7OTeby0freXYdcNPf0WVhwYq5aDk2VvjXHePDkyFpQfNx VjAO7O0trOwLqjfyPdmuNwz30c/zP9qbTwr2GY8dIH2S6pNJ7ostV5apQe6NWlil8rps OfYA== X-Gm-Message-State: ACrzQf3CBcTu9lMmlw8OERJGDNl33toLVxJICuCakmG1FjIyIyYa7Pvd JfK5ouu/LIZwERYzbb1vOHU65UKLgFuOR9ke X-Google-Smtp-Source: AMsMyM713KtE1MTrGtjm04mX7GqX2tnQquL4wFpvw0vHCfTs81OsgUPhDA0EVkslLUmMFfQbaipGDA== X-Received: by 2002:a05:6000:2c8:b0:22a:efdf:ecc0 with SMTP id o8-20020a05600002c800b0022aefdfecc0mr1145192wry.57.1664436545576; Thu, 29 Sep 2022 00:29:05 -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 e6-20020a05600c4b8600b003b482fbd93bsm3439030wmp.24.2022.09.29.00.29.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 00:29:05 -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 v3 1/7] net: devlink: introduce port registered assert helper and use it Date: Thu, 29 Sep 2022 09:28:56 +0200 Message-Id: <20220929072902.2986539-2-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220929072902.2986539-1-jiri@resnulli.us> References: <20220929072902.2986539-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 Thu Sep 29 07:28:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12993630 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 1FB3FC04A95 for ; Thu, 29 Sep 2022 07:29:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234948AbiI2H3L (ORCPT ); Thu, 29 Sep 2022 03:29:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232519AbiI2H3J (ORCPT ); Thu, 29 Sep 2022 03:29:09 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81EE31332EF for ; Thu, 29 Sep 2022 00:29:08 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id u10so628280wrq.2 for ; Thu, 29 Sep 2022 00:29:08 -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=EPGp6HQhy9OU4D9IVmnenHx6Vk66AnfMpxSne2CtFWlNdbPWcVh1O6411StIgl5VCL MJgNWq9rxXuyNoKIj7S+fUIQ3YabVJ3eGEDIFAsWsV5XJWneAdwDnhoNIi7QUw2dBnhW eeeyYFYiGF3feH62v5d39XTtiDzigiV6PV5TH3QTTktbYCeOrR2/CrrK97qs9I/sDIp0 +mcNcUsXxQ/pkEeFArDUYwQQfA/4fJrQBzo9S+3AEb45lr0D+lZzbufkDjd/BCsDZXIo jxqYpINzdWZ8gyMVJSyiBoCnDChaDzYSP2V4wW+1QNOmxMfB+jlUiOYxIZBW3jVc8K7A Kc9A== 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=tj7569Apvg1aYmZh5XsCnMz5tPtnQaeTZpr0QjECLhHyCN7ZztQCHGan+R7cUdrYlH 8jx4QPjV/W4paWXQ7O84pYRNfCG/8NyineBXJXpOFelnGnm1vPWXeiCN9jOaMsbAOhbm oA7ngCiqJpjzaqzhN9vR9cxhs3obcpbKEw8x/PNZ6n0ut8uR0CA4NxYS25hHyD2QRpnr eMlsgDcgjPl+rsPVOwQBjI/eVqV6W0qEtF0IivBmtnQxuG8iY4GP6mXggV0as8kApx5s wWB412F1Vh2vtmAD3xSz3EGQSElDT+Du6O8LKrfbTNfM2/2Yd/6R6N31Auy4WsEi4FB+ duwQ== X-Gm-Message-State: ACrzQf18hBlOAQJfmeCrbkpgkKgC0VvZ3jZvTgwsVzzKrt/4J5x3ORil x1BSCo99Hn1+xdB6KgmUX71loMkhWkKDBxiT X-Google-Smtp-Source: AMsMyM6ij420i60SZ+PjXaSLeNkqCbOkjroXUKCCI+i2IA+EHM9Sa+Q6eV1WZPH69WMwp52T/Ihltw== X-Received: by 2002:a05:6000:1f09:b0:22c:c6d9:5f42 with SMTP id bv9-20020a0560001f0900b0022cc6d95f42mr1155589wrb.84.1664436547147; Thu, 29 Sep 2022 00:29:07 -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 x14-20020adfec0e000000b0022a297950cesm6093087wrn.23.2022.09.29.00.29.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 00:29:06 -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 v3 2/7] net: devlink: introduce a flag to indicate devlink port being registered Date: Thu, 29 Sep 2022 09:28:57 +0200 Message-Id: <20220929072902.2986539-3-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220929072902.2986539-1-jiri@resnulli.us> References: <20220929072902.2986539-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 Thu Sep 29 07:28:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12993631 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 31508C04A95 for ; Thu, 29 Sep 2022 07:29:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235094AbiI2H3N (ORCPT ); Thu, 29 Sep 2022 03:29:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234939AbiI2H3L (ORCPT ); Thu, 29 Sep 2022 03:29:11 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2311E1332EF for ; Thu, 29 Sep 2022 00:29:10 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id h7so730922wru.10 for ; Thu, 29 Sep 2022 00:29:10 -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=naU6xDp+k/uBSUb3rG1BgZrheDdyIA3UTwQr7kseNxs=; b=0OoHbXzU3q10GKdQ19Wj6wlLIf8SMTTeynSFYRFxhj7DjnEmUU33d5+L71GZZdoYfK cdtY46/9+Zs1fIntsm9OeGAv+cGleBUWUXSr16yiAEikrSMEOesyL1vqCcDGgFniqHVP HHSuZg0L0CFWF+w/Q+OgTrPRPWCvU5Xu5e3ae9U6idOW/Ex4gHyOIUdbdOqUXgJwgXr5 bs2Uo7QQ6LDZqLiwbBSNRo7eRGvuyv64SLPTyxZ2I0W92iWKTA9qZkr7/CPXq4dBes0i R8oIBWCl06vH4IPDKIaIvIWHH5q/9R79zGI8TmDFxFlYCKdsyDI2RbpPUiGyEIYt5eLj uycg== 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=naU6xDp+k/uBSUb3rG1BgZrheDdyIA3UTwQr7kseNxs=; b=JnCDDxD/5yITbzvmA56HxU9GnDy/Zp0yG5dvL3oCx1zt5DI1QilUuRCExiysPFMa5K YnNu3vjoqink31lyfvrVZFDxV2G0uUy5boysrGMyLAaLImXPGz0Y17BwtKQTv2BZ46ht gTzjTj+nZJgm6zvT6O5/KbNAIV9E6RWHD5cJfuTjQzkZdESOEHKnXKABKPSJaQKJy+h6 3V3oactgr1pJiJ7RUSXjQhaIc/kquOG/78cLez7hWOzm8tv9jTLNhTipwXKWpeitV3Gp fmxpJO1oc8o9VDCzeGaXZsZysBrs09VIh2Q6wEigoroS7zzvoS+EU3dk3eLP+cjQHPqT 5PdA== X-Gm-Message-State: ACrzQf0PSfBrpZY6Dh1MJu61e8Zlx1gbJ4qJO48q0bmcVLKhD15qzXGB 9hKUV81pOL06PBBLXzSEh/IpuzaWWDIIuDqY X-Google-Smtp-Source: AMsMyM74r/GDY9Sahy+gUSybhpsZkROYcWWWbH2T4O8v5kFOalGjzJQdKvoLF66+vCJUfo0zhenkIA== X-Received: by 2002:a5d:5a14:0:b0:22a:25be:7f69 with SMTP id bq20-20020a5d5a14000000b0022a25be7f69mr1083426wrb.662.1664436548650; Thu, 29 Sep 2022 00:29:08 -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 w1-20020a5d5441000000b0022cc0a2cbecsm5593366wrv.15.2022.09.29.00.29.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 00:29:08 -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 v3 3/7] net: devlink: add port_init/fini() helpers to allow pre-register/post-unregister functions Date: Thu, 29 Sep 2022 09:28:58 +0200 Message-Id: <20220929072902.2986539-4-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220929072902.2986539-1-jiri@resnulli.us> References: <20220929072902.2986539-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 Lifetime of some of the devlink objects, like regions, is currently forced to be different for devlink instance and devlink port instance (per-port regions). The reason is that for devlink ports, the internal structures initialization happens only after devlink_port_register() is called. To resolve this inconsistency, 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 --- v2->v3: - fixed the patch description --- 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 Thu Sep 29 07:28:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12993632 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 07802C04A95 for ; Thu, 29 Sep 2022 07:29:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235112AbiI2H3Q (ORCPT ); Thu, 29 Sep 2022 03:29:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46056 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232519AbiI2H3M (ORCPT ); Thu, 29 Sep 2022 03:29:12 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B5B23135724 for ; Thu, 29 Sep 2022 00:29:11 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id iv17so340279wmb.4 for ; Thu, 29 Sep 2022 00:29:11 -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=1cMv7DPOtjP8YSzGS0am8sxqUxy9prA3yPjzxfNVQoMtQvwmsh5kFLn9t3nKQmHcUp 7n8M5COjP4DHaMkmwR8aEursLNoIv51/tfflaF2vqMMth0+QWOGyzAW2p12C3DG7wg/u e6JmkR/g3sgRC6G84AkTp9aiI2uWRnArtEZAzlqA1WDaOcwmIMdJG3H7EZO/lMM9IKIR rNboUSry8g30ZQ3xNenYUo1Lps0DLoisOe5wHDvbds48NL+zZ1vOnnxiBGVPes3dEM1a inmzmEi9oaL8cZE51WA27Y6izXdBra4PPxPYCHu8VxVTvsfpBv9PsMsR8QBEKHKJMHwt dJxA== 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=bEyKF+uedZKfXvBgaC1lPZCOu6W8XrFUapigaXyyBcCcsCu4FGrL6Ps3SRKMPIwuv7 jflWkA58FXBffhTiSpUajJn/zLYUtRLoDH1O8eD/+BKzJFgjLIOu34SGQyCFy6Dvc7JW NwyRYowT2jAKlXsvqjC18weNsgZpMM1/hRePXHs2dG/owsEB1cfz5tplYTqjUJSyPDof lRQ89tbJfLZ2nNpNXIgznLIWBTKv3w+YBc3/ApXW376IZ6o0M+Or6Su86CzXlm7JB4Qt 5mkggAhekOZlYUEltSQgpQ/DHSag2M2aHg2S6ay3isUPX91f6Aqeg0AXjT2U6xyLyj+U L4Yg== X-Gm-Message-State: ACrzQf1FbI56RVLJIzifQacNH8kSzibnmmDbqKqgSGri861M0uUj2xO0 yaRKirpfJakeJXLS2ecCLIfEQNGXpI7Lmlxc X-Google-Smtp-Source: AMsMyM4fHxD9RwZCS+nvbEWu3kCmyZ0StLFO328bWEs7zOW6ZbFjKwp5Tt/kmvQZ/w8FWbZHSukoXw== X-Received: by 2002:a05:600c:1990:b0:3b4:c326:d099 with SMTP id t16-20020a05600c199000b003b4c326d099mr1139539wmq.19.1664436550235; Thu, 29 Sep 2022 00:29:10 -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 f13-20020a7bc8cd000000b003a62052053csm4182985wml.18.2022.09.29.00.29.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 00:29:09 -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 v3 4/7] net: dsa: move port_setup/teardown to be called outside devlink port registered area Date: Thu, 29 Sep 2022 09:28:59 +0200 Message-Id: <20220929072902.2986539-5-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220929072902.2986539-1-jiri@resnulli.us> References: <20220929072902.2986539-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 Thu Sep 29 07:29:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12993633 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 C7BBBC07E9D for ; Thu, 29 Sep 2022 07:29:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235154AbiI2H3S (ORCPT ); Thu, 29 Sep 2022 03:29:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46120 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234939AbiI2H3O (ORCPT ); Thu, 29 Sep 2022 03:29:14 -0400 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4CD4213572D for ; Thu, 29 Sep 2022 00:29:13 -0700 (PDT) Received: by mail-wm1-x32d.google.com with SMTP id e10-20020a05600c4e4a00b003b4eff4ab2cso2667832wmq.4 for ; Thu, 29 Sep 2022 00:29:13 -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=MoyGVR/AzxppFX+vloCtGJN0OhTgZ35MCfp8jHhDCeuZtHRocHrNoAfys6sFc6zdVS KvwFaY51Y000eaEy8Aw922RwDeHDQ0tcivgjHQwlddJHR8Ax1Sb6t4RcTMHoxEWaVePS hHV9IpBHrMGruF1ImkmTIm09VPW5wvDhn3PGYPI3nOUvEoMa/eTRzXgRD5OvGPMrxr1x 2cCRmpEyF0sMcbqRPXdfvSjXLLOZwGCXywi/AIwJdbF0+q1C5TJSHdjdF5nEdRle4cRB reZGFutITfXXmSub3zo2k3e/0iUNN4l4+4ZiqEv5hfMzVzUZMqD0A+uIA1Hh0vy8Ckhj bnDw== 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=eMx2Nd/q9uoSHYMVSREie8Wf4XteMaK2U/zK/XQShhG9Z1lYMGszL/4wjWW41PLNni ojnMsq8KGqCJIdHxdLTK+I8lRmhNJZRUefI023ouztYCBVs2iGxycgTYc+aLWPqpMWOc Ksq5bp/haTMVlXkWpcMa5NlYCUM1KY77DXM0BMFiDlh4TX9slz67G0yKHog42jO44BA5 9uB3lQQcUCpRtTs1hPlsQW5qHU56Ruu7Yl2bRA7rrNCYSN92cJMqu3cFpcemsv1yxKu0 hfaGh9SAFXV1HqxbzP5OcefcUFE31up6UNROVGJwv5a8BHowZpkdoROLw3/phA5u6u6N dYzA== X-Gm-Message-State: ACrzQf1Jyd0B/6gr5i6roz2nLJuSQWCyY4xKcKJnPBL0bRr7YNqMnRrr TpfWA5Fju+FKSL4GvBZUzz6a0HJSjitrK6iA X-Google-Smtp-Source: AMsMyM4dw2pXEHye4QWnjOb1LOjADPl4jVIps5atuUcZdXYJCLRm7+XZNEH7gVgC2TLfefsEjnN6IQ== X-Received: by 2002:a7b:c447:0:b0:3b4:8977:4186 with SMTP id l7-20020a7bc447000000b003b489774186mr1193812wmi.74.1664436551767; Thu, 29 Sep 2022 00:29:11 -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-20020adfe389000000b00228daaa84aesm5857210wrm.25.2022.09.29.00.29.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 00:29:11 -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 v3 5/7] net: dsa: don't leave dangling pointers in dp->pl when failing Date: Thu, 29 Sep 2022 09:29:00 +0200 Message-Id: <20220929072902.2986539-6-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220929072902.2986539-1-jiri@resnulli.us> References: <20220929072902.2986539-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 Thu Sep 29 07:29:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12993634 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 B0002C07E9D for ; Thu, 29 Sep 2022 07:29:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235234AbiI2H33 (ORCPT ); Thu, 29 Sep 2022 03:29:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235117AbiI2H3R (ORCPT ); Thu, 29 Sep 2022 03:29:17 -0400 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F140D135067 for ; Thu, 29 Sep 2022 00:29:14 -0700 (PDT) Received: by mail-wm1-x32b.google.com with SMTP id d12-20020a05600c3acc00b003b4c12e47f3so278466wms.4 for ; Thu, 29 Sep 2022 00:29:14 -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=HUMLN1kImp1kqlK4H5X206mys2GS0FFM92UY6TjztayPsqELSavTRQHBKzR0T4zcz3 02naIj7+W2MjvkRLqJcbiQw17jChckjbldMKwg/aZjq2djZDRgsr5jqe4TfnGoBley29 WZLFLEZYyhcrI61mUf5JPHlDj5CcqWxZUQpopYft0AdFy+ymxNgIAKhIawwgM6TybZQr xk6x3yq3e5Sj0TBr8EPf2CzAojBbGwGioIGTevQ4/Y3YWANi5fOAihnTlfsT9wS6NCw4 mupfblRmPEMcUHUWpm9aBw5rrTltLjRQIdv3vqVfNHcUaE0nd2ML+98i/VS6tZ5kZTyq Rqsw== 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=oNeY5b9XkcKAWaJkedXP0AB8layJotWhrWRIGEeLGre6S/IY14nImpeeFxft7kjbgQ rctV/RxF86U1ER67oCUbuKO0xyhqeq7zshb2ckFFZrlm3bC2j7vT6grZxI5iEU1ocMLR 2hLu6PAiNX28SdkHNKwCXMDc2FYsmLKugKD911oDug11TXE3uQiWMKPVt+HiwjymbyLh BeVE8+p9nIhHOPzKfrUX33riTmTMgQurCWYvyR/56FTg9+h3ZgGa/EU/a43CLpWhCDtF P8qM0Ri+exwqxSa4heJmjC1txHX04eSmlAmUb7FaL/KE7wEvcErYRPr/oU0c3r6zO1vG 74Kg== X-Gm-Message-State: ACrzQf18eMIvkBOEYAY8F86MIbkPtrfNAYP/iyWEezXQM80oxB3OWgXq d+rhWZmR3UEe0RspQykXxWuKfwVvIB/zcwt4 X-Google-Smtp-Source: AMsMyM41zFteFidypyyE0Lasizuc+jw0mH9SYM+cWeVSWy1+gr8LN5+FeiM5f7xnDgDedhPIZFxvEA== X-Received: by 2002:a05:600c:42d4:b0:3b3:3de1:7564 with SMTP id j20-20020a05600c42d400b003b33de17564mr1199035wme.152.1664436553427; Thu, 29 Sep 2022 00:29:13 -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 j19-20020a05600c1c1300b003a5ca627333sm4164861wms.8.2022.09.29.00.29.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 00:29:12 -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 v3 6/7] net: dsa: don't do devlink port setup early Date: Thu, 29 Sep 2022 09:29:01 +0200 Message-Id: <20220929072902.2986539-7-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220929072902.2986539-1-jiri@resnulli.us> References: <20220929072902.2986539-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 Thu Sep 29 07:29:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12993635 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 39C86C04A95 for ; Thu, 29 Sep 2022 07:29:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235062AbiI2H3b (ORCPT ); Thu, 29 Sep 2022 03:29:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232519AbiI2H3R (ORCPT ); Thu, 29 Sep 2022 03:29:17 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94C10135724 for ; Thu, 29 Sep 2022 00:29:15 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id u10so628797wrq.2 for ; Thu, 29 Sep 2022 00:29:15 -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=co9Yq47x/Bl4h+GS0iCF/e99fxeGtPeSgLWIRpGB37q/bNL8u8+uetVUe74ktL3olT O44AauBcNRdULGvAZen00phBI6KosWxzx8nJqWnkH6WQ2sF87FO0JD7cAwB75RWTJA77 iCOHGYy5Pz44ooWPx1GoUwzQXDHPM5Zj+LPQS6l3qk5J59fkrdSZL1cNWaOFWhns809L q6v6Ei0+UUD7PQ1ykSmyzuoxatF4YNTaFkb3bNpu6b2Q4WayvxDPN5oiuduMZ/nEZ/r9 7kIIZeNvtz+mHI5uJp/vJ6jKLC6EQ4sctXwpwPvkUiuTkCJ2U0jGQkdEBWw/lF3BKrnY SFzg== 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=YatJJHJL/W3zI2mh8sRKR/jB3hwEiezQmd/QUK+74da9tMexcVkdvBXhIm6gJ2VXML 1zowrdvkArihKFcAjF87vDNg64vKrbXcgu7r/AJGpm0BGSISH7Svihzsb8h6k+STkiWH adc+wcSIKzWFEFQ9YJI5RWzHs3l1KsiAocQK/uYJIPhREAf8Kd4XO/aX6pp1il6y8jMo D9UKPzP3UK8aGaMBygGr7pQD47h2AytNg+h2fT3FU2Ng87pdAJkx2eJL8iooG4M03whE d0IdVj/WjvAZQW+kBEKqfaX+c+P+jtZb/OK7IdvE/lUXWCChbZDb6myI37I5yBpYPSyp w7rA== X-Gm-Message-State: ACrzQf07lW3bshNwwuhGJJe//KfeRVs5pOZmTXKatG8YamV9mH+p9cpK hdxQjXe5dfNZFcSwkdppnh5X3cNzsPhLQEfu X-Google-Smtp-Source: AMsMyM4T05elxSPYr0nGSHDxcD98muxXalJsFWHP3HdWArUlTB2X3mbghYg2DkF/J1255VkbDZa9hQ== X-Received: by 2002:adf:bc13:0:b0:228:6d28:d2cb with SMTP id s19-20020adfbc13000000b002286d28d2cbmr1109781wrg.375.1664436555002; Thu, 29 Sep 2022 00:29:15 -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 g15-20020a5d554f000000b0022cc7c32309sm2210886wrw.115.2022.09.29.00.29.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 00:29:14 -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 v3 7/7] net: dsa: remove bool devlink_port_setup Date: Thu, 29 Sep 2022 09:29:02 +0200 Message-Id: <20220929072902.2986539-8-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220929072902.2986539-1-jiri@resnulli.us> References: <20220929072902.2986539-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)