From patchwork Thu Aug 25 10:33:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12954499 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 C0F88C28D13 for ; Thu, 25 Aug 2022 10:34:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238801AbiHYKeJ (ORCPT ); Thu, 25 Aug 2022 06:34:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41056 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237443AbiHYKeH (ORCPT ); Thu, 25 Aug 2022 06:34:07 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 131A09C1EB for ; Thu, 25 Aug 2022 03:34:06 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id k6-20020a05600c1c8600b003a54ecc62f6so2272622wms.5 for ; Thu, 25 Aug 2022 03:34:06 -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; bh=jbadOKHsJiXw9xqfvBoy7XonB2y7MRIlK9J5e3qad3w=; b=VgXS5aNFO+QMf7vcB9Yak6QnFiUym/4IFMRfgS0tYM1wZvwqG6RMfKdjVz1OGGFPga Tsv+LmXAOzMazubdjW4d9bG2uE0wR6j2hZyhMWawuEn23kDI9fQOHbBplA3cunL74xFc 9PWff6weKJColI9mZW6ScM4jStQUQnmgyI9T829DE/gjV1C2j79NgbkmrEyvlN1pEU0x NnJ+Q91E9EojJI3foDyNZVAZlymDCldbB51a/Q7VlrSPANq/ixTbSZy5vQF1QWADwhQ6 mfR62E/FoBAzhUJUitAthkWoZzONPH0cv68lPzCjTM4npeXo6zM/OSz19cthSq3VePWn 1mWg== 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; bh=jbadOKHsJiXw9xqfvBoy7XonB2y7MRIlK9J5e3qad3w=; b=EKwqxiJ1zjcQc3pZFrff2ASpa7xbBraUn5skH9Hvx9UMbrSmkErbb4zxeI7ikTV+pP IPUT2ubSSS83up5fQBMDRdrgDVofS2q4huR7Ac5yCy7PFQO3geY6s5PE9vEqUFEJJsmK b++Bw57U/eS6ucJF7GQJRC++K+6sxjL2Cc5Sy2kEHXXGAkGr5chTc5wl/C9P9ndRaQDN roR3jNFV39IZCgUOJfV02j6HCNVwu+a6kYSpP4Zk7WZsOKw6HH5RC85AN1ooVfeKQTHq xDVmUHP/syS6fWk1FLtSSv+voXilL2otkhdb9LInMGUMIRc4tTkOdxZ0jEEOKTUkeFlw Zq2g== X-Gm-Message-State: ACgBeo20wXoh7Ve/8l0sPpSo/Nc5iABiHf4AB+RVaJr8NTWsBmIdixit 361H1CfWSc2YFox/RpXbpVL9CE6gaG5haKnU X-Google-Smtp-Source: AA6agR7Ug+pMhNYQELJdQbg2klYpNCEbWYsDaqBLU5F+UPGXI3/oOd3yOkcQ4vfgZgRS+OdK3E5QlA== X-Received: by 2002:a05:600c:4591:b0:3a6:755b:8e6 with SMTP id r17-20020a05600c459100b003a6755b08e6mr7415915wmo.147.1661423644644; Thu, 25 Aug 2022 03:34:04 -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 w6-20020adfde86000000b002253d162491sm16467890wrl.52.2022.08.25.03.34.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 03:34:04 -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 1/7] netdevsim: don't re-create dummy region during devlink reload Date: Thu, 25 Aug 2022 12:33:54 +0200 Message-Id: <20220825103400.1356995-2-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220825103400.1356995-1-jiri@resnulli.us> References: <20220825103400.1356995-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 Follow the pattern of other drivers and do not create/destroy region for registered devlink instance. Signed-off-by: Jiri Pirko --- drivers/net/netdevsim/dev.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index e88f783c297e..cd3debc9921a 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -1460,13 +1460,9 @@ static int nsim_dev_reload_create(struct nsim_dev *nsim_dev, nsim_devlink_param_load_driverinit_values(devlink); - err = nsim_dev_dummy_region_init(nsim_dev, devlink); - if (err) - return err; - err = nsim_dev_traps_init(devlink); if (err) - goto err_dummy_region_exit; + return err; nsim_dev->fib_data = nsim_fib_create(devlink, extack); if (IS_ERR(nsim_dev->fib_data)) { @@ -1507,8 +1503,6 @@ static int nsim_dev_reload_create(struct nsim_dev *nsim_dev, nsim_fib_destroy(devlink, nsim_dev->fib_data); err_traps_exit: nsim_dev_traps_exit(devlink); -err_dummy_region_exit: - nsim_dev_dummy_region_exit(nsim_dev); return err; } @@ -1648,7 +1642,6 @@ static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev) nsim_dev_health_exit(nsim_dev); nsim_fib_destroy(devlink, nsim_dev->fib_data); nsim_dev_traps_exit(devlink); - nsim_dev_dummy_region_exit(nsim_dev); } void nsim_drv_remove(struct nsim_bus_dev *nsim_bus_dev) @@ -1662,6 +1655,7 @@ void nsim_drv_remove(struct nsim_bus_dev *nsim_bus_dev) nsim_bpf_dev_exit(nsim_dev); nsim_dev_debugfs_exit(nsim_dev); + nsim_dev_dummy_region_exit(nsim_dev); devlink_params_unregister(devlink, nsim_devlink_params, ARRAY_SIZE(nsim_devlink_params)); devl_resources_unregister(devlink); From patchwork Thu Aug 25 10:33:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 12954500 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 DE2F5C04AA5 for ; Thu, 25 Aug 2022 10:34:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240841AbiHYKeL (ORCPT ); Thu, 25 Aug 2022 06:34:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239174AbiHYKeJ (ORCPT ); Thu, 25 Aug 2022 06:34:09 -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 D078F9F74B for ; Thu, 25 Aug 2022 03:34:07 -0700 (PDT) Received: by mail-wr1-x42c.google.com with SMTP id bs25so24050247wrb.2 for ; Thu, 25 Aug 2022 03:34: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; bh=tvAgG0qyftoep/Nfoaw+TcQW5VODOZjYX3BdjDUZn84=; b=spZ6qzZpsngzXAJ+4RYXMF5bJnsXl7yCuRsvSdyw7pd+Ss0lrE8kaZWuaJ9fd9lmil sl/Vt2eXBj8KMQDtYTaGGeEZ2CRHgqKUmGNx8M9ktgsrSQBR93gleWERFtrcVgYphD0m Ks4oC4XZTbHX94oMIBakJFtAVSZRY4AKnuNLdTezAtnx32w9BdZiMAqplDUM9bv4s2LQ xNs3DNWx5JLtSTxQN8nOT5ST4AHVaodED3lP3UHeZ8+H+L3tsbkRjBw6DK5BQ675KP2t n9PMTSeu40RAES22RrhzELRkHxG89eEHJA+3hIM+6ppCA8NMgQr2AovZpQUh+360IWNz 3t+Q== 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; bh=tvAgG0qyftoep/Nfoaw+TcQW5VODOZjYX3BdjDUZn84=; b=SCeZ6flMMlqPf14Mx3KXiYyhD2W10eg/NUx97xtcqkVghg3Gdx2UUsHhWOIaHksvr1 cGvcDsMyfk3cV63fcY1YY+aOmdgGEVGaJiFB6c1ZsF6cKxcBZXI49lDQ2BCyLVyRgH7f at12PtcXI70yvz8Wknt6vTpccEnndmWNevwgjzZ868Y0I59FsD3Sd3QQAxJ4xk8te+fh ZABpup5mWUXVfPyTwk+XtEEmDBJ80mgOjrn1J9fT1DGSpoo2o7HR4SG0PsPxgqOb0KEf WUfstNFaQP4JBOG47b4BrH/T22SMIWYjavSI+6yNL7yROLKwfDi9vbdZWs3rsIM2m/JJ Hkkg== X-Gm-Message-State: ACgBeo0QevPBJtp783BMRa7fUlWzaaEoI4dmpPvyjfLcxJPv5puctTO8 ldMov892s+jqiHKRZzTfV4nMZ7QtXq0758Ko X-Google-Smtp-Source: AA6agR46zboCickPVy+EoYv+23uFzCq+mXuPiHKQeFBYpJKKL7C0cK3s7lfppvKbf3xEfL/AHuZ7ww== X-Received: by 2002:a5d:67c6:0:b0:225:2a3e:6384 with SMTP id n6-20020a5d67c6000000b002252a3e6384mr1811397wrw.23.1661423646409; Thu, 25 Aug 2022 03:34:06 -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 cc19-20020a5d5c13000000b0022571d43d32sm4338900wrb.21.2022.08.25.03.34.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 03:34: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 2/7] net: devlink: introduce port registered assert helper and use it Date: Thu, 25 Aug 2022 12:33:55 +0200 Message-Id: <20220825103400.1356995-3-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220825103400.1356995-1-jiri@resnulli.us> References: <20220825103400.1356995-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 6854f574e3ae..2737dad89f51 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) { @@ -9771,7 +9776,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); @@ -9854,8 +9860,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; @@ -9974,8 +9980,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) @@ -9998,8 +10004,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) @@ -10025,8 +10031,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) @@ -10053,8 +10059,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) @@ -10169,8 +10175,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 Aug 25 10:33: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: 12954501 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 94273C04AA5 for ; Thu, 25 Aug 2022 10:34:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240869AbiHYKeN (ORCPT ); Thu, 25 Aug 2022 06:34:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41162 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240846AbiHYKeL (ORCPT ); Thu, 25 Aug 2022 06:34:11 -0400 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E22499F74B for ; Thu, 25 Aug 2022 03:34:09 -0700 (PDT) Received: by mail-wr1-x42a.google.com with SMTP id h24so24028063wrb.8 for ; Thu, 25 Aug 2022 03:34:09 -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; bh=idvMtG1XnDDbT6TMYpq+ApZNAfs6S2lrCtyZaUzz36c=; b=0PMaF2Z7hIJDBKnaxmTgxyRNrJUWqekalLrUKDdJ3wxw/Mx4+RHvMfscRIaXI6nosl Hylg2lSJcNP6HoX9Y73uzpQ62LZX8Kfs7gAIPmCk5bFTZk2ZxKMfabyT99JNuGhK9YG1 VGaKAiTF3OYW9Tt1VkdRS+6w4D39L3jkbgVrq/Oh2oFzdOVAvV+KABkk6Ihy5nbYWgqx umsaHl/gbkBTc3K6Tm2GCSKCzfhSacpaksiVSGgueyUJDsFeFUcf/rIql2C+OCtVovBv RP5km/vBxua09iXVqkq5dX9cbiiUzHFGASzNSYZdo7JrhRd9f6O2WFQdxpwblfQY5wgS AwmQ== 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; bh=idvMtG1XnDDbT6TMYpq+ApZNAfs6S2lrCtyZaUzz36c=; b=tYdH+ieJoUI4iaBV2MGVDn0KiMMekNmnE9Ui330fHGpVAfYVKOBTjPqxK/gEJyJs/c MFg01mudJxR1KucHI6kzxYXJyocFKdANKPUjBdFL8ch9W2LEZxiMKlKQrWtVMpEsl5Vw uw2evdm9oWLdFoCz3stQW2eAeuY7qC3j+tTUDiyR6DAOgxhl+qPmVm8menw4gEqkwzOH MDDhTq/jZUfU1ZJ72mR3F3vxaCyoQmf7aO328XRNe1OB5izwK7kHpXOUiCFqdSUmttO9 TDA2Fjh5bGfakWyErCPXn938ulF9cSoghEnBWSdZvMqXxCpaUUGtKAdj3Nik1VE3iL5K rFFw== X-Gm-Message-State: ACgBeo1yuZ0JE7zfcOFFkyHqD0HlZfKBJj9TWFNCdhNy4xMkCLyzYOdN ZRaenQAvzWctwSl/PIgtM6DKKwozTCUpXYAz X-Google-Smtp-Source: AA6agR5QEu0vvdbqqdSvBJin+tfIsZSbBKOcuqNObOb9sFoWb/tAuuNgni0bOZBSkskh8d7qpwjR2A== X-Received: by 2002:a05:6000:15c1:b0:225:332e:2741 with SMTP id y1-20020a05600015c100b00225332e2741mr1952474wry.652.1661423648413; Thu, 25 Aug 2022 03:34: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 m13-20020a05600c4f4d00b003a3561d4f3fsm5175381wmq.43.2022.08.25.03.34.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 03:34:07 -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 3/7] net: devlink: introduce a flag to indicate devlink port being registered Date: Thu, 25 Aug 2022 12:33:56 +0200 Message-Id: <20220825103400.1356995-4-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220825103400.1356995-1-jiri@resnulli.us> References: <20220825103400.1356995-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 0b45d44a3348..7b41ebbaf379 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 2737dad89f51..af13f95384d9 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) @@ -9778,6 +9778,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); @@ -9836,6 +9837,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 Aug 25 10:33: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: 12954502 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 38882C04AA5 for ; Thu, 25 Aug 2022 10:34:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240881AbiHYKeV (ORCPT ); Thu, 25 Aug 2022 06:34:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41272 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240846AbiHYKeO (ORCPT ); Thu, 25 Aug 2022 06:34:14 -0400 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 576FFA3D63 for ; Thu, 25 Aug 2022 03:34:12 -0700 (PDT) Received: by mail-wr1-x42b.google.com with SMTP id u5so16225298wrt.11 for ; Thu, 25 Aug 2022 03:34:12 -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; bh=Mgn/UMq9Tran0+zvWQuUcnqY1WcLgrUXupcVmqZnAmE=; b=7I6prp3ouOKn7j4MgxfJEtPNNZU6fwgmejOmsokYgtmmTybj3p3H1G88U0vYD6/WKN txbY6S47BGrwS4+tKogoD7Z5RPW/zUNOYsYyQrJ2KIkU+gpIP/sQ8CKc6bNlvJdicvL8 EXDMvcFTdPj9qwnVOgv3/VRFbdTBRNkqnzD+OuD0DF8OBFxumMcdaAiA4KZP6lX/WYJ9 KtlOQiUpN8VNjL/G4bUPRFUU8hLxbJvy9j+QfBQtgrnr1fz0hY1aeFQyLRTcOMbA9Zg+ 6GXIk/RSX/We65gSpKW/0krLWIh2fjl80+aqOEckhPa753YgPD72sXspPeKl8rEaS5uF 2Ctw== 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; bh=Mgn/UMq9Tran0+zvWQuUcnqY1WcLgrUXupcVmqZnAmE=; b=Ys3t26wju6AA0FlUc177xDJHjN9kYh8qSmj/sOzzIilR8hd0cUkHBZnWp0GWZlleQz gJ/l1GbWEJROOLfxsXPAGjE1e14fhPPWDYdGXf4JV7e8N2xzByRrTL0r2VSDOTCk0TYu KIoCvetQtuVoPmxtjdOMk1Lo/4EIFm7+hmWyAz0xe39BCCQ6q/2JL8Bk+jCsgmcpm1/s tQyzRHweLXiP+s7QLfqkYapGtqw4tUuddiFfPpONQf5cEpC+dAh/USFGdZWzozfUGvQE INKWc/volpQPF8p1UxmfBTo4TGePYbf6pxTVmjEUN6ORAmx+nRNSbDYIR88op1xVW4QS WP3A== X-Gm-Message-State: ACgBeo24BFei9gseoJdmMrqvrZc1tKtRwkzEFnGdQVbvhlf3K5qv5jy6 grkuI0TZYjPcNgOSBay7oXRKz81I8Wy1d5Xi X-Google-Smtp-Source: AA6agR6Ynw2K5lxxNDki4qCK8lbRR4JZrTWdkjgdxBgPUA1SZzQ2XAAgxOS6+VfgKwyDFzz3u/+obA== X-Received: by 2002:a5d:4302:0:b0:225:5303:39e5 with SMTP id h2-20020a5d4302000000b00225530339e5mr1881878wrq.380.1661423650509; Thu, 25 Aug 2022 03:34: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 j9-20020adff549000000b0022586045c89sm288831wrp.69.2022.08.25.03.34.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 03:34: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 4/7] net: devlink: add port_init/fini() helpers to allow pre-register/post-unregister functions Date: Thu, 25 Aug 2022 12:33:57 +0200 Message-Id: <20220825103400.1356995-5-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220825103400.1356995-1-jiri@resnulli.us> References: <20220825103400.1356995-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 7b41ebbaf379..bc7c423891c2 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 */ @@ -1564,6 +1565,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 af13f95384d9..a9b31a05d611 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) @@ -9754,6 +9756,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 * @@ -9778,14 +9818,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); @@ -9835,7 +9874,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; } @@ -11249,6 +11287,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 Aug 25 10:33: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: 12954503 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 D9DABC04AA5 for ; Thu, 25 Aug 2022 10:34:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241025AbiHYKeX (ORCPT ); Thu, 25 Aug 2022 06:34:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240917AbiHYKeU (ORCPT ); Thu, 25 Aug 2022 06:34:20 -0400 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E2E1A3D0A for ; Thu, 25 Aug 2022 03:34:14 -0700 (PDT) Received: by mail-wm1-x330.google.com with SMTP id s23so10043898wmj.4 for ; Thu, 25 Aug 2022 03:34: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; bh=dVQVHFix4pVjdA5WT6dRzaINYMtb7RgRlTsdHBGHExk=; b=xlVluPE1DqGzH5NPstKXthUaK25zBUq9SQriBXip2i7OM6zMQEWPz3hXj530hLpL3P 5HrkeUWj03I7T82Q1Ml2jqZEvRb0ZhjKZgQBiCjLA1noJY/eaVIW9ibWoys0Bx3Dzpgn Aa5YlHVdRFP2E2opabiVB/ROABGQ26upbl7rcvXOuZDMfjVyAxA/npK+QRSgIY0iHsGf h95DrIx0nnulwy7hBZBKu0sK5cT2xTy/FoWKe8aaTui7+6T0kKpvfqV2MNDIskaEszwB IPLK9kAgduGCafZo1WTSGnk/tCYWl3PoA3OBZOSwtgXZdLhhdp2GmhrjiNlvGzH1v1qd e9pg== 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; bh=dVQVHFix4pVjdA5WT6dRzaINYMtb7RgRlTsdHBGHExk=; b=JIUog0hbSYRMw+2lFeAXD9wiwaymt4Z/ufmrjeNqfRjqz8zBfxOoBcgMXw7DC9l/tK R5xTX6uGSNnzQVWpKsokUxrO31VooNqUoHf1qD4AyPC6SLMI/t+PFPbptke9Mn1mVnZT ZU0uq1d94xjm1sx3z84zek+7NkQMsf7XHziU2dXhA9wMvlYCKZks8Swtg80wVRSasaov JAZ0Z+XjnQfuax4qwh3JLZfnQ9mzK7yoVCzJt6XXwZjnvI33V/+JmacpZC0ybEHp+jSt 3Rb86PVKSVqz6qhbC4wfQ9ANSS7/+Zq+gSpAz5KnTmbnpsf7pS3TIgKdpDT2QdFm7TFu pOqQ== X-Gm-Message-State: ACgBeo1C7RqBDPGHqViBh6xyU5IEfYrY+GwsbZdfgbjfaXKxfDA+nVY8 DRFdRLm58lRvFnkCKXsE9qEWcod79yjMCc4l X-Google-Smtp-Source: AA6agR4WhNmqL4Psoyj8cb8eQwMxK+0i3iFK7Fl5ZsML2ey7Nf6Y8Qr3at3ky6GLYwGVzUk7pVgP7A== X-Received: by 2002:a05:600c:198e:b0:3a5:d4a2:8896 with SMTP id t14-20020a05600c198e00b003a5d4a28896mr7509531wmq.140.1661423652823; Thu, 25 Aug 2022 03:34:12 -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 x11-20020a05600c2d0b00b003a5f3f5883dsm4380005wmf.17.2022.08.25.03.34.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 03:34: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 5/7] net: dsa: move port_setup/teardown to be called outside devlink port registered area Date: Thu, 25 Aug 2022 12:33:58 +0200 Message-Id: <20220825103400.1356995-6-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220825103400.1356995-1-jiri@resnulli.us> References: <20220825103400.1356995-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 ed56c7a554b8..644aecbe79a0 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -458,12 +458,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); @@ -518,11 +512,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; @@ -535,17 +526,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: @@ -564,24 +564,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) { @@ -611,40 +610,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 Aug 25 10:33: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: 12954504 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 C6A36C04AA5 for ; Thu, 25 Aug 2022 10:34:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241046AbiHYKe2 (ORCPT ); Thu, 25 Aug 2022 06:34:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240997AbiHYKeU (ORCPT ); Thu, 25 Aug 2022 06:34:20 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B6DF8A894E for ; Thu, 25 Aug 2022 03:34:16 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id bd26-20020a05600c1f1a00b003a5e82a6474so2271949wmb.4 for ; Thu, 25 Aug 2022 03:34:16 -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; bh=77g2Vx/dCFDAwFCz9/acum/oN/5yDeobm9I7mn1PpYI=; b=xGF3y90IYLDPTrrAmoPxZxcsA3GvnKZ9dQyoGGZPj6Cd99TIaDa9W3hKdzauci4eXI fNXJm/6IZ9eu80D8s1fBh1t29qwojBFQAO8Ys/Zjm/J6bvp1JUNdff6n5kXwsdcPW6ws 6vsfnNkncQ1NMFA6WWuTazt8m/a/4MmvJoU6oS0/vZA5xKYig8cQ52au9Oz/M9g8B0Ph yp+4pOLEvqn39sYC0SEyMdfCN7fSEQApWrVV9PXKZm4BNZry4ybhypot/kf3htGgWnUJ Pz7SCF74PiRbAsG3uFMpmdBshUdtaOiSwZTFd72f5+ad29wYKFx1/5MaEwISI4evQHXk 1HAw== 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; bh=77g2Vx/dCFDAwFCz9/acum/oN/5yDeobm9I7mn1PpYI=; b=GJRYJaw4bUCOTPVjwJgnZx6eS3P8YiIZLEMEdLbHhhA4XUumUIHmW88+1djGI4cpNd SBYRtNqUm/wAARTg7qOWFZ2u5ESvF7cBAzuijjl37Si7g//SsjJDLK3PK5lZbw5rJjiB YOj0HzxBFIcSiZjhFOy3YU911dwRyEfDqNpjSh9Sa2EPolUz0skMRCF151JOfqLVp7Ma t4CWPrw2VTKkSGhaGtFDWiw+WZeavVPdD7syh+qDLhUmYVJdYW0nOjSBOkQ84ZaKTmDo 4gP5pURh+tGHELCYGgwmKszbU/TmtCsndU5wCGWkGtec8LNZTmQgCeE4KEcyFZtrQmnG l31w== X-Gm-Message-State: ACgBeo1eZ5UYOAgSP+T2bl5UC/7J3aaWcGqwulBEidUbk1CMkidgKn0E oXzEU/8UOmfVVLj2C8vs2Jee5SS+amzLJBws X-Google-Smtp-Source: AA6agR6BqWDE3yIPbgB3nfa0i5RA1xgNaZ6/c1YLQROuqVdGpgmmAwNSVgvtgEf3ak0EoWMrDL2YMQ== X-Received: by 2002:a1c:4c18:0:b0:3a6:9e0:7c2a with SMTP id z24-20020a1c4c18000000b003a609e07c2amr8050298wmf.42.1661423655055; Thu, 25 Aug 2022 03:34: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 p7-20020a5d48c7000000b00223a50b1be8sm19234017wrs.50.2022.08.25.03.34.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 03:34: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 6/7] net: dsa: don't do devlink port setup early Date: Thu, 25 Aug 2022 12:33:59 +0200 Message-Id: <20220825103400.1356995-7-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220825103400.1356995-1-jiri@resnulli.us> References: <20220825103400.1356995-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 --- net/dsa/dsa2.c | 183 ++++++++++++++++++++++--------------------------- 1 file changed, 81 insertions(+), 102 deletions(-) diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 644aecbe79a0..b53bc1a1aa83 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -447,6 +447,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; @@ -458,6 +526,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); @@ -512,64 +584,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; } @@ -604,31 +624,9 @@ 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; - - 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. - */ -static int dsa_port_reinit_as_unused(struct dsa_port *dp) -{ dsa_port_devlink_teardown(dp); - dp->type = DSA_PORT_TYPE_UNUSED; - return dsa_port_devlink_setup(dp); + + dp->setup = false; } static int dsa_devlink_info_get(struct devlink *dl, @@ -852,7 +850,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) @@ -875,18 +872,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; @@ -927,9 +915,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; @@ -937,8 +923,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; @@ -957,8 +941,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; } @@ -1010,11 +992,8 @@ static int dsa_tree_setup_ports(struct dsa_switch_tree *dst) list_for_each_entry(dp, &dst->ports, list) { 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); - if (err) - goto teardown; - } + if (err) + goto teardown; } } From patchwork Thu Aug 25 10:34: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: 12954505 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 2B9D8C3F6B0 for ; Thu, 25 Aug 2022 10:34:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240709AbiHYKea (ORCPT ); Thu, 25 Aug 2022 06:34:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241008AbiHYKeW (ORCPT ); Thu, 25 Aug 2022 06:34:22 -0400 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB686A3D42 for ; Thu, 25 Aug 2022 03:34:18 -0700 (PDT) Received: by mail-wr1-x42b.google.com with SMTP id u14so24012861wrq.9 for ; Thu, 25 Aug 2022 03:34:18 -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; bh=tACOXL4/qhEsoJ4REcCtn13WGBEbq7Q9mW7ATugpK38=; b=J9AgNmOEZ85/KcIp5SPHqJ8yebvhtHcRsoyweDHPnzQ1lrokIFDFyx56TSGD5ZC11A /aUHi5yadv5/NlQotDDQwYZ+40c/r6jH8eLG4SnEk6FOxaL0DEBb+e2LClm/ICrhAL2m 3Q2465x4BK7ZsIPedH8yOeTeuSBTDkq5U9MOFRDsp7ruidrkOMAp9pciV+DZsghouulB eSgWU+rVLJw+zaLpvmQ1snvXOlPdVooYOqSpK82Hfq8hAjv0lAhnU8I8pZSBgylUxRMY thNh253tmBaKx0l/0F4XoMt8AZ/xBAqfMxgcsqk6ZjMlNzl8bkBxto/bRInpzPPj6K44 Bgpg== 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; bh=tACOXL4/qhEsoJ4REcCtn13WGBEbq7Q9mW7ATugpK38=; b=jWzY5oTzGNV5Izxh5sQpVlgPYkEoVT5c91a2X9KYjI8ergrHA8SjOA1L23PeZDsD0r 5mhTC13CQZEhh9+thdRQHQ5rxTgYgmlie82+W2QzHAd9aANDsbxfu/6LK9RYQExtNV0J CBdyQouOuqP10JzUgawUinIdbCgk6HzWegdcdAW/VqdO9JKgNNtylbG1EopKLDmAAxJQ zTzGyWev2HBY8bA79XN+vSUR9NMMCj2X6xgHCDJ30TzRFWB+nbDIOuceZMpBV16UAQ7G EXubfyHZP6HQo7EdbUnJ8d//VD5clv6c6QH+VwK8us5APE5aiTtiQ+J+6J3KXulj7eVz zt/Q== X-Gm-Message-State: ACgBeo2d7agYVh3dA6+uyJRxK4KzdBdTM5eqbxJDb6n6yIDOnKT8CSE/ xI35A7c6EuKSLN6v8iu1+2V9N9RdwLjGpLXu X-Google-Smtp-Source: AA6agR6lhxZA6/9pgTPibo49EAX97mrkA85CNdhyLhUwrJvXLCmFHk9TQ2z/oMZL8zQ44k+qDKft9g== X-Received: by 2002:a5d:45c4:0:b0:225:4320:1401 with SMTP id b4-20020a5d45c4000000b0022543201401mr1835431wrs.474.1661423657127; Thu, 25 Aug 2022 03:34:17 -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 d24-20020adfa358000000b0021ea1bcc300sm20141239wrb.56.2022.08.25.03.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Aug 2022 03:34:16 -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 7/7] net: devlink: convert region create/destroy() to be forbidden on registered devlink/port Date: Thu, 25 Aug 2022 12:34:00 +0200 Message-Id: <20220825103400.1356995-8-jiri@resnulli.us> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220825103400.1356995-1-jiri@resnulli.us> References: <20220825103400.1356995-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 No need to create or destroy region when devlink or devlink ports are registered. Limit the possibility to call the region create/destroy() only for non-registered devlink or devlink port. Benefit from that and avoid need to take devl_lock. Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlx4/crdump.c | 20 +++--- drivers/net/netdevsim/dev.c | 8 +-- include/net/devlink.h | 5 -- net/core/devlink.c | 74 +++++---------------- 4 files changed, 29 insertions(+), 78 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/crdump.c b/drivers/net/ethernet/mellanox/mlx4/crdump.c index 82a07a31cde7..ac5468b77488 100644 --- a/drivers/net/ethernet/mellanox/mlx4/crdump.c +++ b/drivers/net/ethernet/mellanox/mlx4/crdump.c @@ -226,10 +226,10 @@ int mlx4_crdump_init(struct mlx4_dev *dev) /* Create cr-space region */ crdump->region_crspace = - devl_region_create(devlink, - ®ion_cr_space_ops, - MAX_NUM_OF_DUMPS_TO_STORE, - pci_resource_len(pdev, 0)); + devlink_region_create(devlink, + ®ion_cr_space_ops, + MAX_NUM_OF_DUMPS_TO_STORE, + pci_resource_len(pdev, 0)); if (IS_ERR(crdump->region_crspace)) mlx4_warn(dev, "crdump: create devlink region %s err %ld\n", region_cr_space_str, @@ -237,10 +237,10 @@ int mlx4_crdump_init(struct mlx4_dev *dev) /* Create fw-health region */ crdump->region_fw_health = - devl_region_create(devlink, - ®ion_fw_health_ops, - MAX_NUM_OF_DUMPS_TO_STORE, - HEALTH_BUFFER_SIZE); + devlink_region_create(devlink, + ®ion_fw_health_ops, + MAX_NUM_OF_DUMPS_TO_STORE, + HEALTH_BUFFER_SIZE); if (IS_ERR(crdump->region_fw_health)) mlx4_warn(dev, "crdump: create devlink region %s err %ld\n", region_fw_health_str, @@ -253,6 +253,6 @@ void mlx4_crdump_end(struct mlx4_dev *dev) { struct mlx4_fw_crdump *crdump = &dev->persist->crdump; - devl_region_destroy(crdump->region_fw_health); - devl_region_destroy(crdump->region_crspace); + devlink_region_destroy(crdump->region_fw_health); + devlink_region_destroy(crdump->region_crspace); } diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index cd3debc9921a..a5c69888dfa6 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -557,15 +557,15 @@ static int nsim_dev_dummy_region_init(struct nsim_dev *nsim_dev, struct devlink *devlink) { nsim_dev->dummy_region = - devl_region_create(devlink, &dummy_region_ops, - NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX, - NSIM_DEV_DUMMY_REGION_SIZE); + devlink_region_create(devlink, &dummy_region_ops, + NSIM_DEV_DUMMY_REGION_SNAPSHOT_MAX, + NSIM_DEV_DUMMY_REGION_SIZE); return PTR_ERR_OR_ZERO(nsim_dev->dummy_region); } static void nsim_dev_dummy_region_exit(struct nsim_dev *nsim_dev) { - devl_region_destroy(nsim_dev->dummy_region); + devlink_region_destroy(nsim_dev->dummy_region); } static int diff --git a/include/net/devlink.h b/include/net/devlink.h index bc7c423891c2..e8e7eb386acc 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -1692,10 +1692,6 @@ int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id, int devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id, union devlink_param_value init_val); void devlink_param_value_changed(struct devlink *devlink, u32 param_id); -struct devlink_region *devl_region_create(struct devlink *devlink, - const struct devlink_region_ops *ops, - u32 region_max_snapshots, - u64 region_size); struct devlink_region * devlink_region_create(struct devlink *devlink, const struct devlink_region_ops *ops, @@ -1704,7 +1700,6 @@ struct devlink_region * devlink_port_region_create(struct devlink_port *port, const struct devlink_port_region_ops *ops, u32 region_max_snapshots, u64 region_size); -void devl_region_destroy(struct devlink_region *region); void devlink_region_destroy(struct devlink_region *region); void devlink_port_region_destroy(struct devlink_region *region); diff --git a/net/core/devlink.c b/net/core/devlink.c index a9b31a05d611..988476f44900 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -5765,8 +5765,7 @@ static void devlink_nl_region_notify(struct devlink_region *region, struct sk_buff *msg; WARN_ON(cmd != DEVLINK_CMD_REGION_NEW && cmd != DEVLINK_CMD_REGION_DEL); - if (!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED)) - return; + ASSERT_DEVLINK_REGISTERED(devlink); msg = devlink_nl_region_notify_build(region, snapshot, cmd, 0, 0); if (IS_ERR(msg)) @@ -11204,21 +11203,22 @@ void devlink_param_value_changed(struct devlink *devlink, u32 param_id) EXPORT_SYMBOL_GPL(devlink_param_value_changed); /** - * devl_region_create - create a new address region + * devlink_region_create - create a new address region * * @devlink: devlink * @ops: region operations and name * @region_max_snapshots: Maximum supported number of snapshots for region * @region_size: size of region */ -struct devlink_region *devl_region_create(struct devlink *devlink, - const struct devlink_region_ops *ops, - u32 region_max_snapshots, - u64 region_size) +struct devlink_region * +devlink_region_create(struct devlink *devlink, + const struct devlink_region_ops *ops, + u32 region_max_snapshots, + u64 region_size) { struct devlink_region *region; - devl_assert_locked(devlink); + ASSERT_DEVLINK_NOT_REGISTERED(devlink); if (WARN_ON(!ops) || WARN_ON(!ops->destructor)) return ERR_PTR(-EINVAL); @@ -11237,35 +11237,9 @@ struct devlink_region *devl_region_create(struct devlink *devlink, INIT_LIST_HEAD(®ion->snapshot_list); mutex_init(®ion->snapshot_lock); list_add_tail(®ion->list, &devlink->region_list); - devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW); return region; } -EXPORT_SYMBOL_GPL(devl_region_create); - -/** - * devlink_region_create - create a new address region - * - * @devlink: devlink - * @ops: region operations and name - * @region_max_snapshots: Maximum supported number of snapshots for region - * @region_size: size of region - * - * Context: Takes and release devlink->lock . - */ -struct devlink_region * -devlink_region_create(struct devlink *devlink, - const struct devlink_region_ops *ops, - u32 region_max_snapshots, u64 region_size) -{ - struct devlink_region *region; - - devl_lock(devlink); - region = devl_region_create(devlink, ops, region_max_snapshots, - region_size); - devl_unlock(devlink); - return region; -} EXPORT_SYMBOL_GPL(devlink_region_create); /** @@ -11275,8 +11249,6 @@ EXPORT_SYMBOL_GPL(devlink_region_create); * @ops: region operations and name * @region_max_snapshots: Maximum supported number of snapshots for region * @region_size: size of region - * - * Context: Takes and release devlink->lock . */ struct devlink_region * devlink_port_region_create(struct devlink_port *port, @@ -11288,6 +11260,7 @@ devlink_port_region_create(struct devlink_port *port, int err = 0; ASSERT_DEVLINK_PORT_INITIALIZED(port); + ASSERT_DEVLINK_PORT_NOT_REGISTERED(port); if (WARN_ON(!ops) || WARN_ON(!ops->destructor)) return ERR_PTR(-EINVAL); @@ -11313,7 +11286,6 @@ devlink_port_region_create(struct devlink_port *port, INIT_LIST_HEAD(®ion->snapshot_list); mutex_init(®ion->snapshot_lock); list_add_tail(®ion->list, &port->region_list); - devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_NEW); devl_unlock(devlink); return region; @@ -11325,16 +11297,18 @@ devlink_port_region_create(struct devlink_port *port, EXPORT_SYMBOL_GPL(devlink_port_region_create); /** - * devl_region_destroy - destroy address region + * devlink_region_destroy - destroy address region * * @region: devlink region to destroy */ -void devl_region_destroy(struct devlink_region *region) +void devlink_region_destroy(struct devlink_region *region) { - struct devlink *devlink = region->devlink; struct devlink_snapshot *snapshot, *ts; - devl_assert_locked(devlink); + if (region->port) + ASSERT_DEVLINK_PORT_NOT_REGISTERED(region->port); + else + ASSERT_DEVLINK_NOT_REGISTERED(region->devlink); /* Free all snapshots of region */ list_for_each_entry_safe(snapshot, ts, ®ion->snapshot_list, list) @@ -11343,26 +11317,8 @@ void devl_region_destroy(struct devlink_region *region) list_del(®ion->list); mutex_destroy(®ion->snapshot_lock); - devlink_nl_region_notify(region, NULL, DEVLINK_CMD_REGION_DEL); kfree(region); } -EXPORT_SYMBOL_GPL(devl_region_destroy); - -/** - * devlink_region_destroy - destroy address region - * - * @region: devlink region to destroy - * - * Context: Takes and release devlink->lock . - */ -void devlink_region_destroy(struct devlink_region *region) -{ - struct devlink *devlink = region->devlink; - - devl_lock(devlink); - devl_region_destroy(region); - devl_unlock(devlink); -} EXPORT_SYMBOL_GPL(devlink_region_destroy); /**