From patchwork Thu Dec 1 16:46: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: 13061566 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 F2485C4708D for ; Thu, 1 Dec 2022 16:46:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229845AbiLAQq2 (ORCPT ); Thu, 1 Dec 2022 11:46:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229750AbiLAQqT (ORCPT ); Thu, 1 Dec 2022 11:46:19 -0500 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 875BFB0DD8 for ; Thu, 1 Dec 2022 08:46:13 -0800 (PST) Received: by mail-ed1-x52a.google.com with SMTP id s5so3094181edc.12 for ; Thu, 01 Dec 2022 08:46:13 -0800 (PST) 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 :message-id:reply-to; bh=k1CqhJ+IEn0Y3eZimXaaShqn5A+Zf1N2q0dtDg8Htr8=; b=2LWOkhGBS/ZQgkt5NoPEVB/j37B21qAVZOkG+/15CxXKc9bBlCeuLFbLt7N//2zhlC m07AjATRox0ezeqUWDRM0S1lyzBJ7Qkpr8hhJZjKJhE0BoqOoSn2bHJ5ar0j8Ql5xBwA JFveuGs52Q1zAQpuQYL971PESSEmc4I0Stx0Hbvo4QkW7uFXdljoNaoH+cSNvOOUkgYD 2njx0mgRp2XfEDSGpJT5zdr16c0u/vtBWuu9vIBZz3RJegRUAQc38mrvIQG+nKPD94FM tGq7NrGVJ8F7jaxfUe/Qn21tk/JJ4swgq5ruCoAK+vWlN26d2bk9nVfnkV2WYpkR5nVg NCxw== 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:message-id:reply-to; bh=k1CqhJ+IEn0Y3eZimXaaShqn5A+Zf1N2q0dtDg8Htr8=; b=PDfMzZ29xG1azirnkNg2JssqhBpKBq4qa40DQqJ96gl1Ran1YBfZUBr+ApLARLZGPp QkG2C5Z3c7mtaltQDDtvmbA3yDqEBvQ7zothxZoHS1g/2zgrmAhoC2Y0AMgBvoG46O1t gcyLyYBMUdR1okCwOReVk7xxsQPfR6/v5yYB6U6WB/Bzc6KwuQ0tOE2hwEJmnDLq44LJ wv1HCKbawqdNLe5yfZV5kiAzGgdKgtyTky5P/bJXTjNIr6urfeOZWPZTap5WG/SXvN/4 DiVi1tvf+XZQ9HsamSCFY8O2qtqMI6rAnP0O+J1XfV77N8qPQxh3L3LKLFQBrf7VU3g7 xrWg== X-Gm-Message-State: ANoB5plwwLSAeua8yk3zD7FbjLmVuZdBNulbo4UENjn6q+WPQES9L0xK JAfOTXwuQX5r4h+RkQ2sRVpg0aLvbr/ts27P X-Google-Smtp-Source: AA0mqf5MnkBWRSYmYRrMJEHXJwfVmPOf05ZS0ce6fdQta+L17avgxNBod0udao+F2+yCCfbGVI0yiw== X-Received: by 2002:a05:6402:2409:b0:45c:935b:ae15 with SMTP id t9-20020a056402240900b0045c935bae15mr38187974eda.357.1669913171998; Thu, 01 Dec 2022 08:46:11 -0800 (PST) Received: from localhost ([86.61.181.4]) by smtp.gmail.com with ESMTPSA id kx16-20020a170907775000b007c0934db0e0sm1966624ejc.141.2022.12.01.08.46.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:46:11 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, yangyingliang@huawei.com, leon@kernel.org Subject: [patch net-next RFC 1/7] devlink: Reorder devlink_port_register/unregister() calls to be done when devlink is registered Date: Thu, 1 Dec 2022 17:46:02 +0100 Message-Id: <20221201164608.209537-2-jiri@resnulli.us> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221201164608.209537-1-jiri@resnulli.us> References: <20221201164608.209537-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 X-Patchwork-State: RFC From: Jiri Pirko Change the drivers that use devlink_port_register/unregister() to call these functions only in case devlink is registered. Signed-off-by: Jiri Pirko --- .../net/ethernet/broadcom/bnxt/bnxt_devlink.c | 29 ++++++++++--------- .../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 7 +++-- .../ethernet/fungible/funeth/funeth_main.c | 17 +++++++---- drivers/net/ethernet/intel/ice/ice_main.c | 21 ++++++++------ .../ethernet/marvell/prestera/prestera_main.c | 6 ++-- drivers/net/ethernet/mscc/ocelot_vsc7514.c | 10 +++---- .../ethernet/pensando/ionic/ionic_devlink.c | 6 ++-- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 7 +++-- 8 files changed, 60 insertions(+), 43 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c index 26913dc816d3..c2600ce7313c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c @@ -1285,8 +1285,15 @@ int bnxt_dl_register(struct bnxt *bp) bp->hwrm_spec_code > 0x10803) bp->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY; + if (BNXT_PF(bp)) { + rc = bnxt_dl_params_register(bp); + if (rc) + goto err_dl_free; + } + + devlink_register(dl); if (!BNXT_PF(bp)) - goto out; + return 0; attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL; attrs.phys.port_number = bp->pf.port_id; @@ -1296,20 +1303,16 @@ int bnxt_dl_register(struct bnxt *bp) rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id); if (rc) { netdev_err(bp->dev, "devlink_port_register failed\n"); - goto err_dl_free; + goto err_dl_unreg; } - rc = bnxt_dl_params_register(bp); - if (rc) - goto err_dl_port_unreg; - devlink_set_features(dl, DEVLINK_F_RELOAD); -out: - devlink_register(dl); return 0; -err_dl_port_unreg: - devlink_port_unregister(&bp->dl_port); +err_dl_unreg: + devlink_unregister(dl); + if (BNXT_PF(bp)) + bnxt_dl_params_unregister(bp); err_dl_free: devlink_free(dl); return rc; @@ -1319,10 +1322,10 @@ void bnxt_dl_unregister(struct bnxt *bp) { struct devlink *dl = bp->dl; + if (BNXT_PF(bp)) + devlink_port_unregister(&bp->dl_port); devlink_unregister(dl); - if (BNXT_PF(bp)) { + if (BNXT_PF(bp)) bnxt_dl_params_unregister(bp); - devlink_port_unregister(&bp->dl_port); - } devlink_free(dl); } diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index 0c35abb7d065..4e468c4c20e0 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -4954,6 +4954,8 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev) if (err) goto err_dl_trap_register; + dpaa2_eth_dl_register(priv); + err = dpaa2_eth_dl_port_add(priv); if (err) goto err_dl_port_add; @@ -4968,12 +4970,12 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev) dpaa2_dbg_add(priv); #endif - dpaa2_eth_dl_register(priv); dev_info(dev, "Probed interface %s\n", net_dev->name); return 0; err_netdev_reg: dpaa2_eth_dl_port_del(priv); + dpaa2_eth_dl_unregister(priv); err_dl_port_add: dpaa2_eth_dl_traps_unregister(priv); err_dl_trap_register: @@ -5026,8 +5028,6 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev) net_dev = dev_get_drvdata(dev); priv = netdev_priv(net_dev); - dpaa2_eth_dl_unregister(priv); - #ifdef CONFIG_DEBUG_FS dpaa2_dbg_remove(priv); #endif @@ -5035,6 +5035,7 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev) unregister_netdev(net_dev); dpaa2_eth_dl_port_del(priv); + dpaa2_eth_dl_unregister(priv); dpaa2_eth_dl_traps_unregister(priv); dpaa2_eth_dl_free(priv); diff --git a/drivers/net/ethernet/fungible/funeth/funeth_main.c b/drivers/net/ethernet/fungible/funeth/funeth_main.c index b4cce30e526a..e335071bf530 100644 --- a/drivers/net/ethernet/fungible/funeth/funeth_main.c +++ b/drivers/net/ethernet/fungible/funeth/funeth_main.c @@ -2018,17 +2018,22 @@ static int funeth_probe(struct pci_dev *pdev, const struct pci_device_id *id) if (rc) goto free_devlink; + fun_devlink_register(devlink); + rc = fun_get_res_count(fdev, FUN_ADMIN_OP_PORT); - if (rc > 0) - rc = fun_create_ports(ed, rc); if (rc < 0) - goto disable_dev; + goto unregister_devlink; + if (rc > 0) { + rc = fun_create_ports(ed, rc); + if (rc < 0) + goto unregister_devlink; + } fun_serv_restart(fdev); - fun_devlink_register(devlink); return 0; -disable_dev: +unregister_devlink: + fun_devlink_unregister(devlink); fun_dev_disable(fdev); free_devlink: mutex_destroy(&ed->state_mutex); @@ -2044,7 +2049,6 @@ static void funeth_remove(struct pci_dev *pdev) ed = to_fun_ethdev(fdev); devlink = priv_to_devlink(ed); - fun_devlink_unregister(devlink); #ifdef CONFIG_PCI_IOV funeth_sriov_configure(pdev, 0); @@ -2052,6 +2056,7 @@ static void funeth_remove(struct pci_dev *pdev) fun_serv_stop(fdev); fun_destroy_ports(ed); + fun_devlink_unregister(devlink); fun_dev_disable(fdev); mutex_destroy(&ed->state_mutex); diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index 2b23b4714a26..f47d5b87f99b 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -4919,11 +4919,13 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent) pcie_print_link_status(pf->pdev); probe_done: - err = ice_register_netdev(pf); + err = ice_devlink_register_params(pf); if (err) - goto err_netdev_reg; + goto err_devlink_reg_param; - err = ice_devlink_register_params(pf); + ice_devlink_register(pf); + + err = ice_register_netdev(pf); if (err) goto err_netdev_reg; @@ -4934,7 +4936,7 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent) if (pf->aux_idx < 0) { dev_err(dev, "Failed to allocate device ID for AUX driver\n"); err = -ENOMEM; - goto err_devlink_reg_param; + goto err_ida_alloc; } err = ice_init_rdma(pf); @@ -4947,15 +4949,16 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent) dev_warn(dev, "RDMA is not supported on this device\n"); } - ice_devlink_register(pf); return 0; err_init_aux_unroll: pf->adev = NULL; ida_free(&ice_aux_ida, pf->aux_idx); -err_devlink_reg_param: - ice_devlink_unregister_params(pf); +err_ida_alloc: err_netdev_reg: + ice_devlink_unregister(pf); + ice_devlink_unregister_params(pf); +err_devlink_reg_param: err_send_version_unroll: ice_vsi_release_all(pf); err_alloc_sw_unroll: @@ -5051,7 +5054,6 @@ static void ice_remove(struct pci_dev *pdev) struct ice_pf *pf = pci_get_drvdata(pdev); int i; - ice_devlink_unregister(pf); for (i = 0; i < ICE_MAX_RESET_WAIT; i++) { if (!ice_is_reset_in_progress(pf->state)) break; @@ -5071,7 +5073,6 @@ static void ice_remove(struct pci_dev *pdev) ice_unplug_aux_dev(pf); if (pf->aux_idx >= 0) ida_free(&ice_aux_ida, pf->aux_idx); - ice_devlink_unregister_params(pf); set_bit(ICE_DOWN, pf->state); ice_deinit_lag(pf); @@ -5083,6 +5084,8 @@ static void ice_remove(struct pci_dev *pdev) ice_remove_arfs(pf); ice_setup_mc_magic_wake(pf); ice_vsi_release_all(pf); + ice_devlink_unregister(pf); + ice_devlink_unregister_params(pf); mutex_destroy(&(&pf->hw)->fdir_fltr_lock); ice_set_wake(pf); ice_free_irq_msix_misc(pf); diff --git a/drivers/net/ethernet/marvell/prestera/prestera_main.c b/drivers/net/ethernet/marvell/prestera/prestera_main.c index 9d504142e51a..815056a130d9 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_main.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_main.c @@ -1421,14 +1421,16 @@ static int prestera_switch_init(struct prestera_switch *sw) if (err) goto err_lag_init; + prestera_devlink_register(sw); + err = prestera_create_ports(sw); if (err) goto err_ports_create; - prestera_devlink_register(sw); return 0; err_ports_create: + prestera_devlink_unregister(sw); prestera_lag_fini(sw); err_lag_init: prestera_devlink_traps_unregister(sw); @@ -1455,8 +1457,8 @@ static int prestera_switch_init(struct prestera_switch *sw) static void prestera_switch_fini(struct prestera_switch *sw) { - prestera_devlink_unregister(sw); prestera_destroy_ports(sw); + prestera_devlink_unregister(sw); prestera_lag_fini(sw); prestera_devlink_traps_unregister(sw); prestera_span_fini(sw); diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ethernet/mscc/ocelot_vsc7514.c index b097fd4a4061..69adde1da2a0 100644 --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c @@ -562,10 +562,6 @@ static int mscc_ocelot_probe(struct platform_device *pdev) if (err) goto out_put_ports; - err = mscc_ocelot_init_ports(pdev, ports); - if (err) - goto out_ocelot_devlink_unregister; - if (ocelot->fdma) ocelot_fdma_start(ocelot); @@ -589,6 +585,10 @@ static int mscc_ocelot_probe(struct platform_device *pdev) of_node_put(ports); devlink_register(devlink); + err = mscc_ocelot_init_ports(pdev, ports); + if (err) + goto out_ocelot_devlink_unregister; + dev_info(&pdev->dev, "Ocelot switch probed\n"); return 0; @@ -611,10 +611,10 @@ static int mscc_ocelot_remove(struct platform_device *pdev) if (ocelot->fdma) ocelot_fdma_deinit(ocelot); + mscc_ocelot_release_ports(ocelot); devlink_unregister(ocelot->devlink); ocelot_deinit_timestamp(ocelot); ocelot_devlink_sb_unregister(ocelot); - mscc_ocelot_release_ports(ocelot); mscc_ocelot_teardown_devlink_ports(ocelot); ocelot_deinit(ocelot); unregister_switchdev_blocking_notifier(&ocelot_switchdev_blocking_nb); diff --git a/drivers/net/ethernet/pensando/ionic/ionic_devlink.c b/drivers/net/ethernet/pensando/ionic/ionic_devlink.c index e6ff757895ab..06670343f90b 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_devlink.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_devlink.c @@ -78,16 +78,18 @@ int ionic_devlink_register(struct ionic *ionic) struct devlink_port_attrs attrs = {}; int err; + devlink_register(dl); + attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL; devlink_port_attrs_set(&ionic->dl_port, &attrs); err = devlink_port_register(dl, &ionic->dl_port, 0); if (err) { dev_err(ionic->dev, "devlink_port_register failed: %d\n", err); + devlink_unregister(dl); return err; } SET_NETDEV_DEVLINK_PORT(ionic->lif->netdev, &ionic->dl_port); - devlink_register(dl); return 0; } @@ -95,6 +97,6 @@ void ionic_devlink_unregister(struct ionic *ionic) { struct devlink *dl = priv_to_devlink(ionic); - devlink_unregister(dl); devlink_port_unregister(&ionic->dl_port); + devlink_unregister(dl); } diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index 51c37e99d086..4ac4b7ada890 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -2522,6 +2522,8 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common) } } + devlink_register(common->devlink); + for (i = 1; i <= common->port_num; i++) { port = am65_common_get_port(common, i); dl_port = &port->devlink_port; @@ -2542,7 +2544,6 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common) goto dl_port_unreg; } } - devlink_register(common->devlink); return ret; dl_port_unreg: @@ -2552,6 +2553,7 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common) devlink_port_unregister(dl_port); } + devlink_unregister(common->devlink); dl_unreg: devlink_free(common->devlink); return ret; @@ -2563,14 +2565,13 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common) struct am65_cpsw_port *port; int i; - devlink_unregister(common->devlink); - for (i = 1; i <= common->port_num; i++) { port = am65_common_get_port(common, i); dl_port = &port->devlink_port; devlink_port_unregister(dl_port); } + devlink_unregister(common->devlink); if (!AM65_CPSW_IS_CPSW2G(common) && IS_ENABLED(CONFIG_TI_K3_AM65_CPSW_SWITCHDEV)) From patchwork Thu Dec 1 16:46:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13061565 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 B422DC43217 for ; Thu, 1 Dec 2022 16:46:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229739AbiLAQqZ (ORCPT ); Thu, 1 Dec 2022 11:46:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229755AbiLAQqT (ORCPT ); Thu, 1 Dec 2022 11:46:19 -0500 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F1E57B956F for ; Thu, 1 Dec 2022 08:46:15 -0800 (PST) Received: by mail-ej1-x633.google.com with SMTP id fy37so5529640ejc.11 for ; Thu, 01 Dec 2022 08:46:15 -0800 (PST) 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 :message-id:reply-to; bh=KkPC04q2E5HTXjNLsMckFEW+LV/JOlSKL22EoOe/qm4=; b=TsKpBhrgA3blPp5YB5lM9OSq6pcco1h3cGTXZ9AHUpjdzD5nkfYsDlDncpUP/eU4zs teJm1El9p+NkMc1T+WWQwb0ztuH9p0QfVMIh+Ot/4aJT9zCfeT23f+KJXct73ibT8qSn LmYmPouRRSFNNNow/PHgDMEPRffQXI6IxHWM/Rl2FWxs2CmbsR00asj8ldUHi8ZTw0Nr D6BT1lVpFm/UflJUXKKlf2k56FVuv1PhAvD/59WaPV254ifZ1OTRUA6WsO8gi3dvxp9V aSW85XsIf+2pJdUsCNIw+Ed9r64X/+V7oLqY7VYO3rsTBLkouygrHrrgAjJpDWWaZRpT zEdw== 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:message-id:reply-to; bh=KkPC04q2E5HTXjNLsMckFEW+LV/JOlSKL22EoOe/qm4=; b=ossM6W+m3SGwTCagK2CKQwod/DqQg4v6a6h9HywXvLycmKkDBc3coA16wdTYZ8716F LtexNRoUwLh0f23ub+9Tamps3YOFRq6PBxfcly1KxuLtNRPIT49Be4oqdDvxeEaddPGp 2aHoocl7PD4F/vKnsI9R43I7gd/CNUT6dxBNBEDrmH2L9qIQRMuPvPbvlhzjHEEpUuTq YTrGFSvuQlCniSqnUquOq1oXjszDfV3tttaCUu+rUgR4uD1XzTCxsywf8XnTvnKicoZB 27S29vCQjwFaYlzd2gSQBE6FykGwyYg4JoqZAX/A02oIv6ErJBe8T7uikushnSGkto8o w22Q== X-Gm-Message-State: ANoB5pn2Pbtf2Nbpyq0VacPJiebGq+y1QejUKatHPlZFXcDJQ+4izJ/8 r1R+iH0gLdQwnyjYgKyXsk5PKhxgT5fvloV6 X-Google-Smtp-Source: AA0mqf5rFKqvItNMHX6nNt9fMYQCJ1iGUAzChBg/hm7WRMQjOGfQKpC4g0i6CQhpxQWdf3okutnnzA== X-Received: by 2002:a17:906:805:b0:78d:8267:3379 with SMTP id e5-20020a170906080500b0078d82673379mr55712732ejd.415.1669913173864; Thu, 01 Dec 2022 08:46:13 -0800 (PST) Received: from localhost ([86.61.181.4]) by smtp.gmail.com with ESMTPSA id v25-20020a056402185900b00467c3cbab6fsm1911235edy.77.2022.12.01.08.46.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:46:12 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, yangyingliang@huawei.com, leon@kernel.org Subject: [patch net-next RFC 2/7] netdevsim: Reorder devl_port_register/unregister() calls to be done when devlink is registered Date: Thu, 1 Dec 2022 17:46:03 +0100 Message-Id: <20221201164608.209537-3-jiri@resnulli.us> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221201164608.209537-1-jiri@resnulli.us> References: <20221201164608.209537-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 X-Patchwork-State: RFC From: Jiri Pirko Move the code so devl_port_register/unregister() are called only then devlink is registered. Signed-off-by: Jiri Pirko --- drivers/net/netdevsim/dev.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index b962fc8e1397..8ed235ac986f 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -949,6 +949,7 @@ static void nsim_dev_traps_exit(struct devlink *devlink) static int nsim_dev_reload_create(struct nsim_dev *nsim_dev, struct netlink_ext_ack *extack); +static void nsim_dev_reload_ports_destroy(struct nsim_dev *nsim_dev); static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev); static int nsim_dev_reload_down(struct devlink *devlink, bool netns_change, @@ -965,6 +966,7 @@ static int nsim_dev_reload_down(struct devlink *devlink, bool netns_change, return -EOPNOTSUPP; } + nsim_dev_reload_ports_destroy(nsim_dev); nsim_dev_reload_destroy(nsim_dev); return 0; } @@ -1600,17 +1602,22 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev) if (err) goto err_psample_exit; - err = nsim_dev_port_add_all(nsim_dev, nsim_bus_dev->port_count); - if (err) - goto err_hwstats_exit; - nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_LEGACY; devlink_set_features(devlink, DEVLINK_F_RELOAD); devl_unlock(devlink); devlink_register(devlink); + + devl_lock(devlink); + err = nsim_dev_port_add_all(nsim_dev, nsim_bus_dev->port_count); + devl_unlock(devlink); + if (err) + goto err_devlink_unregister; + return 0; -err_hwstats_exit: +err_devlink_unregister: + devlink_unregister(devlink); + devl_lock(devlink); nsim_dev_hwstats_exit(nsim_dev); err_psample_exit: nsim_dev_psample_exit(nsim_dev); @@ -1640,6 +1647,15 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev) return err; } +static void nsim_dev_reload_ports_destroy(struct nsim_dev *nsim_dev) +{ + struct devlink *devlink = priv_to_devlink(nsim_dev); + + if (devlink_is_reload_failed(devlink)) + return; + nsim_dev_port_del_all(nsim_dev); +} + static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev) { struct devlink *devlink = priv_to_devlink(nsim_dev); @@ -1654,7 +1670,6 @@ static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev) nsim_esw_legacy_enable(nsim_dev, NULL); } - nsim_dev_port_del_all(nsim_dev); nsim_dev_hwstats_exit(nsim_dev); nsim_dev_psample_exit(nsim_dev); nsim_dev_health_exit(nsim_dev); @@ -1668,6 +1683,10 @@ void nsim_drv_remove(struct nsim_bus_dev *nsim_bus_dev) struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev); struct devlink *devlink = priv_to_devlink(nsim_dev); + devl_lock(devlink); + nsim_dev_reload_ports_destroy(nsim_dev); + devl_unlock(devlink); + devlink_unregister(devlink); devl_lock(devlink); nsim_dev_reload_destroy(nsim_dev); From patchwork Thu Dec 1 16:46:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13061567 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 23A9EC43217 for ; Thu, 1 Dec 2022 16:46:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229829AbiLAQqq (ORCPT ); Thu, 1 Dec 2022 11:46:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35694 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229811AbiLAQqW (ORCPT ); Thu, 1 Dec 2022 11:46:22 -0500 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68245B0DDA for ; Thu, 1 Dec 2022 08:46:17 -0800 (PST) Received: by mail-ej1-x62e.google.com with SMTP id vv4so5599958ejc.2 for ; Thu, 01 Dec 2022 08:46:17 -0800 (PST) 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 :message-id:reply-to; bh=6PmPCwisSN6edwEjWasd+zdr1/T2q3IACarVCyKDRIs=; b=FXpeLnfdxJrFZN5yw0tdoPzEQ+LNu0SzF7zcNau5t+Ej1wnElCJ/qOwZCa3Zu+uK8D 2xGvZlQZlCkbkDqkDt6UpVBYppXktgA1ykzqlRZcmowzeDoQS23jAypZEAOOS+cSqtcl J6KGeGIr2qu0cM9t9QmP5R94J+Qo5kQiaTvqd9poe8eYN3JPteYajrFtP4WTkJDOL1ub MFcRtZn9gZ8ii6JTClIEnVMzm1V0GxMQJLZuV4LAof50Y8Le5LyP//PpePosZkfAE+cb TVvlc/iyBEDddxhCk8IZmffsxBgEKR49DxM2eTgv8RBAAqeWD6NCZVgikfSxv7Lkdftw S5KA== 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:message-id:reply-to; bh=6PmPCwisSN6edwEjWasd+zdr1/T2q3IACarVCyKDRIs=; b=uhQOm1pvvdh2C3KP0NQCwBxv78uD4IjNbRFqOhiGKf0TemOCtudrgm7m0xWvhBoclc 2qOdfsxSriMwCBrApjO7/Q+3AGB6druwbwYHCtG0UsfKNJXU+93Q7a+NlEyFcXw1zA+q EdmITNHW5tl5PG98U9+J6TmUhFz/04SX0Q3oRWMPfAPlMwE+UfPwE/8dUXcnZiR1zjGG IObvGmLcOnXGWFmIdvMD+xFhUlJL2ecJJ2ertDeOcfTUm0TOg5nXouW6bixKFLV98Se1 hJErTSBt9/I86uqsY0QYL7jyfo+lT8T7EfiXVa5b/W9pm89uDwDPHjx51g4uSFvTz98e RCwg== X-Gm-Message-State: ANoB5pnk55f1YbT6kHUafPm6mQwTt4nOMmTV+8r/G5DX6NvSzWE/FJjj ANBjTwfDdTlmG+iHngF1HfsQ8834eMcW3ZzI X-Google-Smtp-Source: AA0mqf7x4QZADPXYFbNlXrOMPitCPBGFuEPFBvqG696YquxJ+aXtJBrQGXe0bDTXXSCILni+5gz+rg== X-Received: by 2002:a17:906:4e8c:b0:7ba:9c18:1204 with SMTP id v12-20020a1709064e8c00b007ba9c181204mr35122261eju.262.1669913175793; Thu, 01 Dec 2022 08:46:15 -0800 (PST) Received: from localhost ([86.61.181.4]) by smtp.gmail.com with ESMTPSA id sg43-20020a170907a42b00b007bdf4340129sm2008105ejc.14.2022.12.01.08.46.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:46:14 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, yangyingliang@huawei.com, leon@kernel.org Subject: [patch net-next RFC 3/7] mlxsw: Reorder devl_port_register/unregister() calls to be done when devlink is registered Date: Thu, 1 Dec 2022 17:46:04 +0100 Message-Id: <20221201164608.209537-4-jiri@resnulli.us> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221201164608.209537-1-jiri@resnulli.us> References: <20221201164608.209537-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 X-Patchwork-State: RFC From: Jiri Pirko Move the code so devl_port_register/unregister() are called only then devlink is registered. Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlxsw/core.c | 24 ++++++++++++ drivers/net/ethernet/mellanox/mlxsw/core.h | 2 + .../net/ethernet/mellanox/mlxsw/spectrum.c | 38 ++++++++++++++----- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c index a0a06e2eff82..9908fb0f2d8a 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core.c +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c @@ -2215,8 +2215,24 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info, devl_unlock(devlink); devlink_register(devlink); } + + if (mlxsw_driver->ports_init) { + if (!reload) + devl_lock(devlink); + err = mlxsw_driver->ports_init(mlxsw_core); + if (!reload) + devl_unlock(devlink); + if (err) + goto err_driver_ports_init; + } + return 0; +err_driver_ports_init: + if (!reload) { + devlink_unregister(devlink); + devl_lock(devlink); + } err_driver_init: mlxsw_env_fini(mlxsw_core->env); err_env_init: @@ -2284,6 +2300,14 @@ void mlxsw_core_bus_device_unregister(struct mlxsw_core *mlxsw_core, { struct devlink *devlink = priv_to_devlink(mlxsw_core); + if (mlxsw_core->driver->ports_fini) { + if (!reload) + devl_lock(devlink); + mlxsw_core->driver->ports_fini(mlxsw_core); + if (!reload) + devl_unlock(devlink); + } + if (!reload) { devlink_unregister(devlink); devl_lock(devlink); diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h index e0a6fcbbcb19..a41ca92318e8 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/core.h +++ b/drivers/net/ethernet/mellanox/mlxsw/core.h @@ -348,6 +348,8 @@ struct mlxsw_driver { const struct mlxsw_bus_info *mlxsw_bus_info, struct netlink_ext_ack *extack); void (*fini)(struct mlxsw_core *mlxsw_core); + int (*ports_init)(struct mlxsw_core *mlxsw_core); + void (*ports_fini)(struct mlxsw_core *mlxsw_core); int (*port_split)(struct mlxsw_core *mlxsw_core, u16 local_port, unsigned int count, struct netlink_ext_ack *extack); int (*port_unsplit)(struct mlxsw_core *mlxsw_core, u16 local_port, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index f5b2d965d476..b216c7dd8419 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -3251,16 +3251,8 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core, goto err_sample_trigger_init; } - err = mlxsw_sp_ports_create(mlxsw_sp); - if (err) { - dev_err(mlxsw_sp->bus_info->dev, "Failed to create ports\n"); - goto err_ports_create; - } - return 0; -err_ports_create: - rhashtable_destroy(&mlxsw_sp->sample_trigger_ht); err_sample_trigger_init: mlxsw_sp_port_module_info_fini(mlxsw_sp); err_port_module_info_init: @@ -3445,11 +3437,24 @@ static int mlxsw_sp4_init(struct mlxsw_core *mlxsw_core, return mlxsw_sp_init(mlxsw_core, mlxsw_bus_info, extack); } +static int mlxsw_sp_ports_init(struct mlxsw_core *mlxsw_core) +{ + struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); + int err; + + err = mlxsw_sp_ports_create(mlxsw_sp); + if (err) { + dev_err(mlxsw_sp->bus_info->dev, "Failed to create ports\n"); + return err; + } + + return 0; +} + static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core) { struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); - mlxsw_sp_ports_remove(mlxsw_sp); rhashtable_destroy(&mlxsw_sp->sample_trigger_ht); mlxsw_sp_port_module_info_fini(mlxsw_sp); mlxsw_sp_dpipe_fini(mlxsw_sp); @@ -3478,6 +3483,13 @@ static void mlxsw_sp_fini(struct mlxsw_core *mlxsw_core) mlxsw_sp_parsing_fini(mlxsw_sp); } +static void mlxsw_sp_ports_fini(struct mlxsw_core *mlxsw_core) +{ + struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); + + mlxsw_sp_ports_remove(mlxsw_sp); +} + static const struct mlxsw_config_profile mlxsw_sp1_config_profile = { .used_flood_mode = 1, .flood_mode = MLXSW_CMD_MBOX_CONFIG_PROFILE_FLOOD_MODE_CONTROLLED, @@ -3934,6 +3946,8 @@ static struct mlxsw_driver mlxsw_sp1_driver = { .fw_filename = MLXSW_SP1_FW_FILENAME, .init = mlxsw_sp1_init, .fini = mlxsw_sp_fini, + .ports_init = mlxsw_sp_ports_init, + .ports_fini = mlxsw_sp_ports_fini, .port_split = mlxsw_sp_port_split, .port_unsplit = mlxsw_sp_port_unsplit, .sb_pool_get = mlxsw_sp_sb_pool_get, @@ -3971,6 +3985,8 @@ static struct mlxsw_driver mlxsw_sp2_driver = { .fw_filename = MLXSW_SP2_FW_FILENAME, .init = mlxsw_sp2_init, .fini = mlxsw_sp_fini, + .ports_init = mlxsw_sp_ports_init, + .ports_fini = mlxsw_sp_ports_fini, .port_split = mlxsw_sp_port_split, .port_unsplit = mlxsw_sp_port_unsplit, .ports_remove_selected = mlxsw_sp_ports_remove_selected, @@ -4010,6 +4026,8 @@ static struct mlxsw_driver mlxsw_sp3_driver = { .fw_filename = MLXSW_SP3_FW_FILENAME, .init = mlxsw_sp3_init, .fini = mlxsw_sp_fini, + .ports_init = mlxsw_sp_ports_init, + .ports_fini = mlxsw_sp_ports_fini, .port_split = mlxsw_sp_port_split, .port_unsplit = mlxsw_sp_port_unsplit, .ports_remove_selected = mlxsw_sp_ports_remove_selected, @@ -4047,6 +4065,8 @@ static struct mlxsw_driver mlxsw_sp4_driver = { .priv_size = sizeof(struct mlxsw_sp), .init = mlxsw_sp4_init, .fini = mlxsw_sp_fini, + .ports_init = mlxsw_sp_ports_init, + .ports_fini = mlxsw_sp_ports_fini, .port_split = mlxsw_sp_port_split, .port_unsplit = mlxsw_sp_port_unsplit, .ports_remove_selected = mlxsw_sp_ports_remove_selected, From patchwork Thu Dec 1 16:46:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13061568 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 DE97BC43217 for ; Thu, 1 Dec 2022 16:46:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229926AbiLAQqs (ORCPT ); Thu, 1 Dec 2022 11:46:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229694AbiLAQqY (ORCPT ); Thu, 1 Dec 2022 11:46:24 -0500 Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F0FE9B0A27 for ; Thu, 1 Dec 2022 08:46:18 -0800 (PST) Received: by mail-ej1-x62c.google.com with SMTP id ha10so5605378ejb.3 for ; Thu, 01 Dec 2022 08:46:18 -0800 (PST) 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 :message-id:reply-to; bh=bRJvfMpiqk4k74zxkVwEQYW37a3F4O4P/nsk4Id+Cx4=; b=TOEavR0uISx63fwSF4JGP7T+qYq4IOAF4X/ePgGEPkaMzH/BtX43oGoIa8iYZxCN6O jCPv4RHRnl2ytk8fM5OQjd5z+n8rixdEHCM4viKwu65bEaWmegmZONeM+qxlnTsQ3lzF WT6ran1K+8P2vJ3sD0tmfDWcCPj60sjiQZ9gyZEeI/siDHhDPAQPDm9ai+hCpfAPxUW5 bzrU1FJ8QhRLR68N0wvq+yWmlpta7DX0/hxxvErNB3KmTgNedOKWYR2UFXJ+xjI2Q6t0 Ngptn/Ji3JtXRUP3xx4syVSTOy3WV7dorzaGvgL9sSoyy0/ngmqGqX5DfqADE3KfVeDk GTng== 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:message-id:reply-to; bh=bRJvfMpiqk4k74zxkVwEQYW37a3F4O4P/nsk4Id+Cx4=; b=A7KLP6+47jRtqju+2Sd7m7mF9YsbJupj8FlrTze05CnUBCAwU85Yai3Vr+Hl90ghOV oQ7/BNetZ+1JSm4m2b0RcmFP6XLnHsh6QsvatsLAogQFA2w1VouXEsaFGOBD35VVfAlq xHh2vgrup7FK0v28OuzNYC8Rx5efJbQwYmYOEJaMwyjQC0DdMRq7gfedUYjxoCWWpGmK DpTx1RlGkPMXkQjTaG/KFld1tNg5OuuNz2wl3DbzWdx0OW/v1e4on1eXQH1vEAbKw9h8 WkntOUo/Ge3CEOUJcqbg5mutfJJQLAWn4lSJH2n0yeCjGjKFP7fsWQYtygxiV0GBWZ0i 0Onw== X-Gm-Message-State: ANoB5pk0qH2r7cT4uYRcb6RLah+65Tyq78euk/GvW/hkoP4Yoask/KjK TfDtKUAeV206yYUPoEbBWOQb2kuf6MmCKKwh X-Google-Smtp-Source: AA0mqf7dkfvLJt8RJ9gycERdhEhF0hvl+SDLKlzTOjD4Th4zm8KHJYB5fKf/8CnRy8qcyrCv8TizHQ== X-Received: by 2002:a17:906:fcc2:b0:78d:8b75:b161 with SMTP id qx2-20020a170906fcc200b0078d8b75b161mr59085490ejb.385.1669913177452; Thu, 01 Dec 2022 08:46:17 -0800 (PST) Received: from localhost ([86.61.181.4]) by smtp.gmail.com with ESMTPSA id s3-20020a170906284300b007ba9c181202sm1977021ejc.56.2022.12.01.08.46.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:46:16 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, yangyingliang@huawei.com, leon@kernel.org Subject: [patch net-next RFC 4/7] nfp: Reorder devl_port_register/unregister() calls to be done when devlink is registered Date: Thu, 1 Dec 2022 17:46:05 +0100 Message-Id: <20221201164608.209537-5-jiri@resnulli.us> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221201164608.209537-1-jiri@resnulli.us> References: <20221201164608.209537-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 X-Patchwork-State: RFC From: Jiri Pirko Move the code so devl_port_register/unregister() are called only then devlink is registered. Signed-off-by: Jiri Pirko --- .../net/ethernet/netronome/nfp/nfp_net_main.c | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c index abfe788d558f..9b4c48defd5c 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c @@ -752,7 +752,7 @@ int nfp_net_pci_probe(struct nfp_pf *pf) err = nfp_shared_buf_register(pf); if (err) - goto err_devlink_unreg; + goto err_clean_app; err = nfp_devlink_params_register(pf); if (err) @@ -769,23 +769,29 @@ int nfp_net_pci_probe(struct nfp_pf *pf) err = nfp_net_pf_alloc_irqs(pf); if (err) goto err_free_vnics; + devl_unlock(devlink); + devlink_register(devlink); + + devl_lock(devlink); err = nfp_net_pf_app_start(pf); if (err) - goto err_free_irqs; + goto err_devlink_unreg; err = nfp_net_pf_init_vnics(pf); if (err) goto err_stop_app; devl_unlock(devlink); - devlink_register(devlink); return 0; err_stop_app: nfp_net_pf_app_stop(pf); -err_free_irqs: + devl_unlock(devlink); +err_devlink_unreg: + devlink_unregister(devlink); + devl_lock(devlink); nfp_net_pf_free_irqs(pf); err_free_vnics: nfp_net_pf_free_vnics(pf); @@ -795,7 +801,7 @@ int nfp_net_pci_probe(struct nfp_pf *pf) nfp_devlink_params_unregister(pf); err_shared_buf_unreg: nfp_shared_buf_unregister(pf); -err_devlink_unreg: +err_clean_app: cancel_work_sync(&pf->port_refresh_work); nfp_net_pf_app_clean(pf); err_unmap: @@ -808,7 +814,6 @@ void nfp_net_pci_remove(struct nfp_pf *pf) struct devlink *devlink = priv_to_devlink(pf); struct nfp_net *nn, *next; - devlink_unregister(priv_to_devlink(pf)); devl_lock(devlink); list_for_each_entry_safe(nn, next, &pf->vnics, vnic_list) { if (!nfp_net_is_data_vnic(nn)) @@ -818,6 +823,11 @@ void nfp_net_pci_remove(struct nfp_pf *pf) } nfp_net_pf_app_stop(pf); + devl_unlock(devlink); + + devlink_unregister(priv_to_devlink(pf)); + + devl_lock(devlink); /* stop app first, to avoid double free of ctrl vNIC's ddir */ nfp_net_debugfs_dir_clean(&pf->ddir); From patchwork Thu Dec 1 16:46:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13061569 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 6F42BC43217 for ; Thu, 1 Dec 2022 16:47:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229680AbiLAQrD (ORCPT ); Thu, 1 Dec 2022 11:47:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229848AbiLAQq2 (ORCPT ); Thu, 1 Dec 2022 11:46:28 -0500 Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D63EB0A34 for ; Thu, 1 Dec 2022 08:46:20 -0800 (PST) Received: by mail-ed1-x52c.google.com with SMTP id m19so3121271edj.8 for ; Thu, 01 Dec 2022 08:46:20 -0800 (PST) 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 :message-id:reply-to; bh=ygLtmrXreeOGJfTMICC9dLuZQkYOGBhSqOeROj74xaU=; b=LgMtIrSmjc52OY9p0EfDV2FXsMdt3mpB8vDif7g8h9hQaIf3Gkl/UqnTV6w3Ttozi7 O5vY5w/EGmkV0pXsOCtWhOrcYIE2x+hUFlfO72b4xUwQksYrZTkUs1VLiuM3+9j7BtxA iLuTjwBc3GVqPz/5qY4LsHf0spuFooUlf0UYm5sJGQXewN4e6aZLz5+8TCuBF4y26zgF IBk2V68XCk1iSShlovVQIbeelhprhooZe+GSOIWef0gOoSxdEewV/LKSoUzoqkUUhEyT 1znwB4QVQCrrIt4Ef2zGlDWQZ2coZQADHf1ZsDFYXdLEERyZ+G3QgxO+7w5vDsfXW8ST X0TA== 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:message-id:reply-to; bh=ygLtmrXreeOGJfTMICC9dLuZQkYOGBhSqOeROj74xaU=; b=IfL7qPDbW19q+rttPb7YqksoWBfEfU68UPO5F22YumkUCka2mQnuEd+LTOHTCYquMk +A8sgx7dHHAWUzxMlhlS0kj2s9eFFJxrgmvvxXKl79xc0T/QxK8JYgqj4iflPh3FTbIf Tz8GHl6xWfD25Wv5AUQYoAAXLtdZZiGaqYSh2X5Uscn38rACZcSWqRttyy5CNPZFtAEm tPVGha7VZdyGfSAfrnGkg8gQXHNEAq9XGIWNKzca6Zsg2nGOsZCRGYoofN1n8QXAiEGt VnXAk2WyO6QJ4o4Krc9lqVTsRD3HO73mQLVMEd5vIQfIHGfpgH8EMyKGgUHef83W4IkO iWxg== X-Gm-Message-State: ANoB5pnHiXqSAfhEBThk/9CYHnCNA4H1jAY8gZLWnzklsZo5GgKAn4E2 sdHWFzI88zXU72hJ+SuwulnVDiuTEYNKsslc X-Google-Smtp-Source: AA0mqf4F8Au6mif6pVf2xP0mfKd4eQAdOOkrKPkB8tJGl7YAzfLxV99wz44O6H7uLM+/orlOU/37mQ== X-Received: by 2002:a05:6402:e0d:b0:466:4168:6ea7 with SMTP id h13-20020a0564020e0d00b0046641686ea7mr855238edh.273.1669913179093; Thu, 01 Dec 2022 08:46:19 -0800 (PST) Received: from localhost ([86.61.181.4]) by smtp.gmail.com with ESMTPSA id n22-20020a05640206d600b0046bada4b121sm1928118edy.54.2022.12.01.08.46.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:46:18 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, yangyingliang@huawei.com, leon@kernel.org Subject: [patch net-next RFC 5/7] mlx4: Reorder devl_port_register/unregister() calls to be done when devlink is registered Date: Thu, 1 Dec 2022 17:46:06 +0100 Message-Id: <20221201164608.209537-6-jiri@resnulli.us> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221201164608.209537-1-jiri@resnulli.us> References: <20221201164608.209537-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 X-Patchwork-State: RFC From: Jiri Pirko Move the code so devl_port_register/unregister() are called only then devlink is registered. Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlx4/main.c | 60 +++++++++++++---------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index 3ae246391549..14f1c76a50eb 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c @@ -3730,14 +3730,13 @@ static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data, } static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data, - struct mlx4_priv *priv) + unsigned int *total_vfs, + int *nvfs, struct mlx4_priv *priv) { int err; - int nvfs[MLX4_MAX_PORTS + 1] = {0, 0, 0}; int prb_vf[MLX4_MAX_PORTS + 1] = {0, 0, 0}; const int param_map[MLX4_MAX_PORTS + 1][MLX4_MAX_PORTS + 1] = { {2, 0, 0}, {0, 1, 2}, {0, 1, 2} }; - unsigned total_vfs = 0; unsigned int i; pr_info(DRV_NAME ": Initializing %s\n", pci_name(pdev)); @@ -3752,8 +3751,8 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data, * per port, we must limit the number of VFs to 63 (since their are * 128 MACs) */ - for (i = 0; i < ARRAY_SIZE(nvfs) && i < num_vfs_argc; - total_vfs += nvfs[param_map[num_vfs_argc - 1][i]], i++) { + for (i = 0; i <= MLX4_MAX_PORTS && i < num_vfs_argc; + *total_vfs += nvfs[param_map[num_vfs_argc - 1][i]], i++) { nvfs[param_map[num_vfs_argc - 1][i]] = num_vfs[i]; if (nvfs[i] < 0) { dev_err(&pdev->dev, "num_vfs module parameter cannot be negative\n"); @@ -3770,10 +3769,10 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data, goto err_disable_pdev; } } - if (total_vfs > MLX4_MAX_NUM_VF) { + if (*total_vfs > MLX4_MAX_NUM_VF) { dev_err(&pdev->dev, "Requested more VF's (%d) than allowed by hw (%d)\n", - total_vfs, MLX4_MAX_NUM_VF); + *total_vfs, MLX4_MAX_NUM_VF); err = -EINVAL; goto err_disable_pdev; } @@ -3828,14 +3827,14 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data, /* When acting as pf, we normally skip vfs unless explicitly * requested to probe them. */ - if (total_vfs) { + if (*total_vfs) { unsigned vfs_offset = 0; - for (i = 0; i < ARRAY_SIZE(nvfs) && + for (i = 0; i <= MLX4_MAX_PORTS && vfs_offset + nvfs[i] < extended_func_num(pdev); vfs_offset += nvfs[i], i++) ; - if (i == ARRAY_SIZE(nvfs)) { + if (i == MLX4_MAX_PORTS + 1) { err = -ENODEV; goto err_release_regions; } @@ -3857,15 +3856,8 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data, if (err) goto err_crdump; - err = mlx4_load_one(pdev, pci_dev_data, total_vfs, nvfs, priv, 0); - if (err) - goto err_catas; - return 0; -err_catas: - mlx4_catas_end(&priv->dev); - err_crdump: mlx4_crdump_end(&priv->dev); @@ -3994,6 +3986,8 @@ static const struct devlink_ops mlx4_devlink_ops = { static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id) { + int nvfs[MLX4_MAX_PORTS + 1] = {0, 0, 0}; + unsigned int total_vfs = 0; struct devlink *devlink; struct mlx4_priv *priv; struct mlx4_dev *dev; @@ -4024,9 +4018,9 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id) ret = devlink_params_register(devlink, mlx4_devlink_params, ARRAY_SIZE(mlx4_devlink_params)); if (ret) - goto err_devlink_unregister; + goto err_persist_free; mlx4_devlink_set_params_init_values(devlink); - ret = __mlx4_init_one(pdev, id->driver_data, priv); + ret = __mlx4_init_one(pdev, id->driver_data, &total_vfs, nvfs, priv); if (ret) goto err_params_unregister; @@ -4034,12 +4028,21 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id) devlink_set_features(devlink, DEVLINK_F_RELOAD); devl_unlock(devlink); devlink_register(devlink); + devl_lock(devlink); + ret = mlx4_load_one(pdev, priv->pci_dev_data, total_vfs, nvfs, priv, 0); + devl_unlock(devlink); + if (ret) + goto err_devlink_unregister; + return 0; +err_devlink_unregister: + devlink_unregister(devlink); + devl_lock(devlink); err_params_unregister: devlink_params_unregister(devlink, mlx4_devlink_params, ARRAY_SIZE(mlx4_devlink_params)); -err_devlink_unregister: +err_persist_free: kfree(dev->persist); err_devlink_free: devl_unlock(devlink); @@ -4146,6 +4149,16 @@ static void mlx4_remove_one(struct pci_dev *pdev) struct devlink *devlink = priv_to_devlink(priv); int active_vfs = 0; + /* device marked to be under deletion running now without the lock + * letting other tasks to be terminated + */ + devl_lock(devlink); + if (persist->interface_state & MLX4_INTERFACE_STATE_UP) + mlx4_unload_one(pdev); + else + mlx4_info(dev, "%s: interface is down\n", __func__); + devl_unlock(devlink); + devlink_unregister(devlink); devl_lock(devlink); @@ -4165,13 +4178,6 @@ static void mlx4_remove_one(struct pci_dev *pdev) } } - /* device marked to be under deletion running now without the lock - * letting other tasks to be terminated - */ - if (persist->interface_state & MLX4_INTERFACE_STATE_UP) - mlx4_unload_one(pdev); - else - mlx4_info(dev, "%s: interface is down\n", __func__); mlx4_catas_end(dev); mlx4_crdump_end(dev); if (dev->flags & MLX4_FLAG_SRIOV && !active_vfs) { From patchwork Thu Dec 1 16:46:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13061570 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 CFE18C47088 for ; Thu, 1 Dec 2022 16:47:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229708AbiLAQrE (ORCPT ); Thu, 1 Dec 2022 11:47:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35758 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229715AbiLAQqe (ORCPT ); Thu, 1 Dec 2022 11:46:34 -0500 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 298E8BB7F3 for ; Thu, 1 Dec 2022 08:46:21 -0800 (PST) Received: by mail-ej1-x633.google.com with SMTP id fy37so5530448ejc.11 for ; Thu, 01 Dec 2022 08:46:21 -0800 (PST) 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 :message-id:reply-to; bh=CNPSlCrIDcuuFzvFx7UDX8BzvGAC3ERSLmueAm2Jm4w=; b=tbKEro8Nlo8qaesPtCltren2H0LgtuF5zV1MyQonM91wUHmu+OoM4u8HlRR/vzL8+E km+YQ3UoGRJ4rQvjN/vaBQWZG3bYkeRcv0cTVn5CupjArApjOsumz5DuAvd3hRagA0L9 m3gYvpWpuhazsGuo/J3BMX2x7A66UsFdndnE58Sazae9Vau3H0sljt+QG7+49pI2EjiL 82GGeDti42+h94Nn1Hp11SOjgMHAyUHUitVqDsaLMi166Rf913DZ2oRIrROAYbl1quMZ embgyb12+oWmFrP0Bja8RY2XZj/tvyfPRPB3T6uc/pPTCO5MuJ16abkNZrys32oo1xmb +VLQ== 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:message-id:reply-to; bh=CNPSlCrIDcuuFzvFx7UDX8BzvGAC3ERSLmueAm2Jm4w=; b=pSAKbW/1S9LUgoK31XemxFf/fuAWt5s/4FxB7Od3LCdZ+bdMJMGcdj2hEPA8xjv9Qs +W9FKPBmEZwsqF6KCBW5bMeN8eyWXrbv/aY8VdXPhEROSqnUPu8m82j7XZGxT+tYLhWb 4higMUVnTa8XAc2tI4iK8v0Q6bQYdzsdMZgSEpKO7umEaZSCfx7NlGWaUZ+6foh6Sfcw R7G4GZMWcl/q7XOFOHgujfZsIv+LfPKZRuWrvnqKJ4kAr7HyGNWpIDcSCWZZJe4NUgkL TocyeY3C4X2RR+UI25JNpYbkRi0Y5Prt35z5c1rovAL3u49fR9EQo2BekjMhsejDOWda 5E7Q== X-Gm-Message-State: ANoB5pmhX6kTCdpMjfJipZw0JhFBX7AwCdcOyScl/+5V7FxyWDakqaZF WUJSFrcISou3RslF6FQh3dDFCVGi9kSINxKO X-Google-Smtp-Source: AA0mqf4YJbcK3rV9hF5fKGTaiutPVVBVlXk9LZZjt1raKzIo51eRITzfaIhyjFhjyrg76ioaeh+7oQ== X-Received: by 2002:a17:906:950a:b0:7ab:2559:8bc4 with SMTP id u10-20020a170906950a00b007ab25598bc4mr40343324ejx.682.1669913180685; Thu, 01 Dec 2022 08:46:20 -0800 (PST) Received: from localhost ([86.61.181.4]) by smtp.gmail.com with ESMTPSA id s17-20020a05640217d100b004585eba4baesm1899259edy.80.2022.12.01.08.46.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:46:20 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, yangyingliang@huawei.com, leon@kernel.org Subject: [patch net-next RFC 6/7] mlx5: Reorder devl_port_register/unregister() calls to be done when devlink is registered Date: Thu, 1 Dec 2022 17:46:07 +0100 Message-Id: <20221201164608.209537-7-jiri@resnulli.us> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221201164608.209537-1-jiri@resnulli.us> References: <20221201164608.209537-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 X-Patchwork-State: RFC From: Jiri Pirko Move the code so devl_port_register/unregister() are called only then devlink is registered. Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlx5/core/dev.c | 10 ++++++++-- drivers/net/ethernet/mellanox/mlx5/core/main.c | 17 ++++++++++------- .../ethernet/mellanox/mlx5/core/sf/dev/driver.c | 9 +++++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/dev.c index 0571e40c6ee5..dd3801198898 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/dev.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/dev.c @@ -444,11 +444,14 @@ int mlx5_register_device(struct mlx5_core_dev *dev) { int ret; - devl_assert_locked(priv_to_devlink(dev)); + devl_lock(priv_to_devlink(dev)); + mutex_lock(&dev->intf_state_mutex); mutex_lock(&mlx5_intf_mutex); dev->priv.flags &= ~MLX5_PRIV_FLAGS_DISABLE_ALL_ADEV; ret = mlx5_rescan_drivers_locked(dev); mutex_unlock(&mlx5_intf_mutex); + mutex_unlock(&dev->intf_state_mutex); + devl_unlock(priv_to_devlink(dev)); if (ret) mlx5_unregister_device(dev); @@ -457,11 +460,14 @@ int mlx5_register_device(struct mlx5_core_dev *dev) void mlx5_unregister_device(struct mlx5_core_dev *dev) { - devl_assert_locked(priv_to_devlink(dev)); + devl_lock(priv_to_devlink(dev)); + mutex_lock(&dev->intf_state_mutex); mutex_lock(&mlx5_intf_mutex); dev->priv.flags = MLX5_PRIV_FLAGS_DISABLE_ALL_ADEV; mlx5_rescan_drivers_locked(dev); mutex_unlock(&mlx5_intf_mutex); + mutex_unlock(&dev->intf_state_mutex); + devl_unlock(priv_to_devlink(dev)); } static int add_drivers(struct mlx5_core_dev *dev) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index 7f5db13e3550..f6f37289b49d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c @@ -1392,16 +1392,10 @@ int mlx5_init_one(struct mlx5_core_dev *dev) if (err) goto err_devlink_reg; - err = mlx5_register_device(dev); - if (err) - goto err_register; - mutex_unlock(&dev->intf_state_mutex); devl_unlock(devlink); return 0; -err_register: - mlx5_devlink_unregister(priv_to_devlink(dev)); err_devlink_reg: clear_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state); mlx5_unload(dev); @@ -1423,7 +1417,6 @@ void mlx5_uninit_one(struct mlx5_core_dev *dev) devl_lock(devlink); mutex_lock(&dev->intf_state_mutex); - mlx5_unregister_device(dev); mlx5_devlink_unregister(priv_to_devlink(dev)); if (!test_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state)) { @@ -1747,8 +1740,17 @@ static int probe_one(struct pci_dev *pdev, const struct pci_device_id *id) pci_save_state(pdev); devlink_register(devlink); + err = mlx5_register_device(dev); + if (err) { + mlx5_core_err(dev, "mlx5_register_device failed with error code %d\n", + err); + goto err_register_device; + } + return 0; +err_register_device: + devlink_unregister(devlink); err_init_one: mlx5_pci_close(dev); pci_init_err: @@ -1771,6 +1773,7 @@ static void remove_one(struct pci_dev *pdev) */ mlx5_drain_fw_reset(dev); set_bit(MLX5_BREAK_FW_WAIT, &dev->intf_state); + mlx5_unregister_device(dev); devlink_unregister(devlink); mlx5_sriov_disable(pdev); mlx5_crdump_disable(dev); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c index 7b4783ce213e..90fcb30f7481 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/driver.c @@ -46,9 +46,17 @@ static int mlx5_sf_dev_probe(struct auxiliary_device *adev, const struct auxilia mlx5_core_warn(mdev, "mlx5_init_one err=%d\n", err); goto init_one_err; } + devlink_register(devlink); + + err = mlx5_register_device(mdev); + if (err) + goto register_device_err; + return 0; +register_device_err: + devlink_unregister(devlink); init_one_err: iounmap(mdev->iseg); remap_err: @@ -63,6 +71,7 @@ static void mlx5_sf_dev_remove(struct auxiliary_device *adev) struct mlx5_sf_dev *sf_dev = container_of(adev, struct mlx5_sf_dev, adev); struct devlink *devlink = priv_to_devlink(sf_dev->mdev); + mlx5_unregister_device(sf_dev->mdev); devlink_unregister(devlink); mlx5_uninit_one(sf_dev->mdev); iounmap(sf_dev->mdev->iseg); From patchwork Thu Dec 1 16:46:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 13061571 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 2507EC43217 for ; Thu, 1 Dec 2022 16:48:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229720AbiLAQsw (ORCPT ); Thu, 1 Dec 2022 11:48:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229853AbiLAQqh (ORCPT ); Thu, 1 Dec 2022 11:46:37 -0500 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D7CAB0A33 for ; Thu, 1 Dec 2022 08:46:23 -0800 (PST) Received: by mail-ej1-x62b.google.com with SMTP id n20so5661685ejh.0 for ; Thu, 01 Dec 2022 08:46:23 -0800 (PST) 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 :message-id:reply-to; bh=MauUMcXifWo52D9Tli+Mq2HbMeQEEDuA+gE8MIm7tiY=; b=cPVvBsugnhKRe+K8Q6PKRx3OsaUVy/RawUbOOh7GRTlj5LJUTnfQthA6+qBALeAvR9 PPzp4ERyppG2c/GEPycwBxJ2q7fiymIFTIO5HpE8bqezvnFeKqguc9A9EjyKEyeOc7B+ GOZXIKIYkU5sKSdFkaPbUW1bW1mHgu07V3xXMdKLpmh0cjRf6PObrh6NsngkeMjUJp4H xjWKwC0ToZ+G9KafKdN0RxoImenZTEtfrguVJJ55sEp5iPLhFHKPR5rc2gLQjGiTArr7 i3lGXPS0yjXQ2rTb9dWdMj6mFtMRcRZoQeaPZiGUuSADGfqavZAe+53vCiOj6Uoi6IOF SU9A== 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:message-id:reply-to; bh=MauUMcXifWo52D9Tli+Mq2HbMeQEEDuA+gE8MIm7tiY=; b=7xt2TPUtETw7saxjkCa845zuuxjkDsCroTpqbYpX/agg2m2Gm55Y7kZGI6c6noElf0 N25EtxABU0y9oL/PNFrxqKul/GQohM6IsiTsVr8cOKXAr3R8lLMlLibe4oZBo/8D2qod HHFz5hRHX/2iQnCqFWhVuAjHbAt71snf1kE9LCzzEFuhAMgXqX+qIZkheOURfhezyu9s yGSPYBYl8c4ylAtZ7lQDCalr5b9+oH7IM6Ep2jG3eFIrGDmygaN9EEiXsVIIqiCkKAQL uMDVOvTfivbKrlUSVIXaKnVXJ5LopB9OGf1pY+kETWBsRe4eDQ+C/P+1Rrz+Q62Jsb5o 470A== X-Gm-Message-State: ANoB5plbDAL+aguztTnKBb7E+g+H1iI805EZqgzRohV1BXNGmoK0Yjj4 2bInHaj9vMXUbDctt1biBrJArtQrn9xaoy2O X-Google-Smtp-Source: AA0mqf6LI/mRTr56+auXYK/7ws/AoqDZtEtci8Zomm+K9nLUu3llgEkaLWRjjfhgXW4oje9EKRwZRA== X-Received: by 2002:a17:906:c249:b0:7ad:9f03:fd44 with SMTP id bl9-20020a170906c24900b007ad9f03fd44mr41749120ejb.73.1669913182161; Thu, 01 Dec 2022 08:46:22 -0800 (PST) Received: from localhost ([86.61.181.4]) by smtp.gmail.com with ESMTPSA id q26-20020a170906389a00b007bdc2de90e6sm1971702ejd.42.2022.12.01.08.46.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Dec 2022 08:46:21 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, yangyingliang@huawei.com, leon@kernel.org Subject: [patch net-next RFC 7/7] devlink: assert if devl_port_register/unregister() is called on unregistered devlink instance Date: Thu, 1 Dec 2022 17:46:08 +0100 Message-Id: <20221201164608.209537-8-jiri@resnulli.us> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221201164608.209537-1-jiri@resnulli.us> References: <20221201164608.209537-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 X-Patchwork-State: RFC From: Jiri Pirko Now when all drivers do call devl_port_register/unregister() withing the time frame during which the devlink is registered, put and assertion to the functions to check that and avoid going back. Signed-off-by: Jiri Pirko --- net/core/devlink.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/core/devlink.c b/net/core/devlink.c index fca3ebee97b0..c46dd7753368 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -10088,6 +10088,7 @@ int devl_port_register(struct devlink *devlink, struct devlink_port *devlink_port, unsigned int port_index) { + ASSERT_DEVLINK_REGISTERED(devlink); devl_assert_locked(devlink); if (devlink_port_index_exists(devlink, port_index)) @@ -10145,6 +10146,7 @@ EXPORT_SYMBOL_GPL(devlink_port_register); */ void devl_port_unregister(struct devlink_port *devlink_port) { + ASSERT_DEVLINK_REGISTERED(devlink_port->devlink); lockdep_assert_held(&devlink_port->devlink->lock); WARN_ON(devlink_port->type != DEVLINK_PORT_TYPE_NOTSET);