Received: by 2002:a05:6a10:6d25:0:0:0:0 with SMTP id gq37csp1894414pxb; Mon, 13 Sep 2021 07:41:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzbrX86E4raB7jJJIMOXAg8r+dgjGl3Crwwb0mX5WYWTMHvhm3MYQlzidK6B3zgWJjsj1jm X-Received: by 2002:a5d:4411:: with SMTP id z17mr10166045wrq.146.1631544076617; Mon, 13 Sep 2021 07:41:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631544076; cv=none; d=google.com; s=arc-20160816; b=DTtV91AapR3ioR0Z1d3AFk251Gtay4xhIxrlNEDszKe/3rvRN3T7CDItJZCXMfnt+C kbfhKnSW6bYP+SPiDZoWrTFGWWRd8xA0BPz81oRqiGzx4kODWDJ9Gpl5+ATHDNIERhTS SBwV/9RZL2NKmhM/iGV0VWbHB9ewSgCvVDkFGb0nr+/HD3xg9qpoIv6fZqNaup+OPbQv JZ2DMORQ474uixntqr7spJ04zv0QfhArh1Ar9vwVlaQ3SFk0tYwDo6UE8c8GqQJqagiN PT3LwmwIaoi0wYRrxud6zpkFrQURTWQLgM9BwzGhEtzc6rJL7F4lSEPGBWeX1xYD36Es 7pZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3U7lzitMMaeKP+vm6TbqCBiOLHCNlMnOPrhfiq976Ek=; b=v93lqGFKfNdaeTZ2c+hk1O8JhRqlp+PSSJ2GSGrccLXJK2VcXRZ4uIsruaNTGbCeq4 K30850yrcY5k/PGQ9MlJrOst7DmvFm9WDczUNsOqUsCtZaJ2cKg8ye8sXWKAiS1S6+fv y7919RV7zhJujiPNEx/yAwji5PnxIVg00wi4wJft2MpBtRUzBlb2tzP2KBcx4j8k9D7z TX9Elha2C79g4usC0LTU1FHRU3k/SxtQpUg7Es/lqW0/PneHBrvPM2Pe+ny16PIwyhfi zXJah8JScMABP4RKrXoaHWQfhwX9BZio80Yu+Bz9rhqk8SHLgQ8lWnYZ4DCekToHaZZw xkSA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=WNuNdpsT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bo24si4994836edb.275.2021.09.13.07.40.49; Mon, 13 Sep 2021 07:41:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=WNuNdpsT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241809AbhIMOh2 (ORCPT + 99 others); Mon, 13 Sep 2021 10:37:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:53788 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346504AbhIMObv (ORCPT ); Mon, 13 Sep 2021 10:31:51 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5122861BA5; Mon, 13 Sep 2021 13:51:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631541118; bh=wEGxYt0NRMm/HmyEG2GpPfJ1BKVhbutcfRASDllrfoc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WNuNdpsTWVg+2l8kor+KoQhaoj72mHlHsFM8EayiIE66o6nCd+0+evrghHOZaDyAz o5rG7sX89Km/pafT6IuEdzukCapijv4uQKQxkDwWwOqA+PxsDK20J5Cz1Hau6G6zdC W7IxyECD0TyBtjQOY4IB+Gf3wnb8LagLl5ky+FHY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Leon Romanovsky , "David S. Miller" , Sasha Levin Subject: [PATCH 5.14 138/334] net: ti: am65-cpsw-nuss: fix wrong devlink release order Date: Mon, 13 Sep 2021 15:13:12 +0200 Message-Id: <20210913131118.028117756@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913131113.390368911@linuxfoundation.org> References: <20210913131113.390368911@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Leon Romanovsky [ Upstream commit acf34954efd17d4f65c7bb3e614381e6afc33222 ] The commit that introduced devlink support released devlink resources in wrong order, that made an unwind flow to be asymmetrical. In addition, the am65-cpsw-nuss used internal to devlink core field - registered. In order to fix the unwind flow and remove such access to the registered field, rewrite the code to call devlink_port_unregister only on registered ports. Fixes: 58356eb31d60 ("net: ti: am65-cpsw-nuss: Add devlink support") Signed-off-by: Leon Romanovsky Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 34 ++++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index 67a08cbba859..fb58fc470773 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -2388,21 +2388,6 @@ static const struct devlink_param am65_cpsw_devlink_params[] = { am65_cpsw_dl_switch_mode_set, NULL), }; -static void am65_cpsw_unregister_devlink_ports(struct am65_cpsw_common *common) -{ - struct devlink_port *dl_port; - struct am65_cpsw_port *port; - int i; - - for (i = 1; i <= common->port_num; i++) { - port = am65_common_get_port(common, i); - dl_port = &port->devlink_port; - - if (dl_port->registered) - devlink_port_unregister(dl_port); - } -} - static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common) { struct devlink_port_attrs attrs = {}; @@ -2464,7 +2449,12 @@ static int am65_cpsw_nuss_register_devlink(struct am65_cpsw_common *common) return ret; dl_port_unreg: - am65_cpsw_unregister_devlink_ports(common); + for (i = i - 1; i >= 1; i--) { + port = am65_common_get_port(common, i); + dl_port = &port->devlink_port; + + devlink_port_unregister(dl_port); + } dl_unreg: devlink_unregister(common->devlink); dl_free: @@ -2475,6 +2465,17 @@ dl_free: static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common) { + struct devlink_port *dl_port; + struct am65_cpsw_port *port; + int i; + + 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); + } + if (!AM65_CPSW_IS_CPSW2G(common) && IS_ENABLED(CONFIG_TI_K3_AM65_CPSW_SWITCHDEV)) { devlink_params_unpublish(common->devlink); @@ -2482,7 +2483,6 @@ static void am65_cpsw_unregister_devlink(struct am65_cpsw_common *common) ARRAY_SIZE(am65_cpsw_devlink_params)); } - am65_cpsw_unregister_devlink_ports(common); devlink_unregister(common->devlink); devlink_free(common->devlink); } -- 2.30.2