Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2830006pxv; Mon, 12 Jul 2021 03:00:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0q6vGyRGfdYyopEawcO88/a13MwVegj1qCoHndkKuCCm6DlbuJB8tEqQVdKGBXW4WeYrs X-Received: by 2002:a02:a38f:: with SMTP id y15mr19194245jak.108.1626084032294; Mon, 12 Jul 2021 03:00:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626084032; cv=none; d=google.com; s=arc-20160816; b=zzsc10NU5GqChwhEbDQzXblb/zib+WkYOfwqWbs3EGJdjxQK1mtkzNkaxj2tCR+QEf +E6/1HCUxddD9Pxp0CYAuiCWAYIwy7bjnb0bnZ+F4najsHbXXTi8T7mJt8bExrZNj6vE C1kArsYlsHn90n9zYM3hQY1CXZKmQLn3o3fxnziFZ6eCxOaTF1P+J9L3sIpdVf34i7RL VP+F3SP03FM2njLiSl/65IOZfQHNAjzj1fuyAzA9TEEsV1BkiNkvuHPomBDzuRaBCUk3 pdELPM03ZiK8+2Ryk6n/x/it42QCGdYyaDwcruI4dx+g9AcmUCsyNJmkaX7U8QJG8IqX iPFw== 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=x4kRGxVupN0Ll7S3qHRV/EiyshppZ23o7R7/R53GzbA=; b=tl77nWfs7IC9q9byeX9CAoAl9ZnXYzsAMPFZiJWhUqE7LCW3FYf1n73NPm+L61zF2W a57Yju3SC4K/2chw494ou66sVW6FenvwJt16FauMGH2VXP1ReB4GLPNVthQBnTwztzEK wiN7+x5oge+62UrzgkMVqiAriwlLSXbcW5R0aMDYkBbhcSctVF94FhnDF/LMUP9Nju0E 6anJFUU8qZdcSK4+o+3uU5FQdo1vbRj2KVwgNnGzHCT3gzUsJ50drWTF2sECTqA44/Ej r6Ng2UYI3366UlvXBmdGAToHvJhXHXa9iF5R/vknqGDVN/r650XxxhKOusWh6SaDhz12 Mp5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=tbelxE0Z; 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 l12si17032744jaj.28.2021.07.12.03.00.20; Mon, 12 Jul 2021 03:00:32 -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=tbelxE0Z; 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 S243891AbhGLHFW (ORCPT + 99 others); Mon, 12 Jul 2021 03:05:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:41908 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236402AbhGLGri (ORCPT ); Mon, 12 Jul 2021 02:47:38 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 16FB36113E; Mon, 12 Jul 2021 06:43:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626072210; bh=WrZsSpaFiBY9/eprwTe61RysgO3gvGO2TwS3954gMUw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tbelxE0ZmXCBJmgqLU5kzZE4As3l3IWncrYHyhZKHQ07eyMtMxSXffHPRSAITggXM fiWUg3FRl6eEXx95bzQbSCML+WeHHp1I8wjncPFUYmnMnTFJQdx+lZeuMudHALXU5Q 8CMLIzEaxshlsK4AJd2DMdO2jvIr2mn1HN1FFgj0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vignesh Raghavendra , "David S. Miller" , Sasha Levin Subject: [PATCH 5.10 384/593] net: ti: am65-cpsw-nuss: Fix crash when changing number of TX queues Date: Mon, 12 Jul 2021 08:09:04 +0200 Message-Id: <20210712060929.290923265@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060843.180606720@linuxfoundation.org> References: <20210712060843.180606720@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: Vignesh Raghavendra [ Upstream commit ce8eb4c728ef40b554b4f3d8963f11ed44502e00 ] When changing number of TX queues using ethtool: # ethtool -L eth0 tx 1 [ 135.301047] Unable to handle kernel paging request at virtual address 00000000af5d0000 [...] [ 135.525128] Call trace: [ 135.525142] dma_release_from_dev_coherent+0x2c/0xb0 [ 135.525148] dma_free_attrs+0x54/0xe0 [ 135.525156] k3_cppi_desc_pool_destroy+0x50/0xa0 [ 135.525164] am65_cpsw_nuss_remove_tx_chns+0x88/0xdc [ 135.525171] am65_cpsw_set_channels+0x3c/0x70 [...] This is because k3_cppi_desc_pool_destroy() which is called after k3_udma_glue_release_tx_chn() in am65_cpsw_nuss_remove_tx_chns() references struct device that is unregistered at the end of k3_udma_glue_release_tx_chn() Therefore the right order is to call k3_cppi_desc_pool_destroy() and destroy desc pool before calling k3_udma_glue_release_tx_chn(). Fix this throughout the driver. Fixes: 93a76530316a ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver") Signed-off-by: Vignesh Raghavendra Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index 501d676fd88b..0805edef5625 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -1433,12 +1433,12 @@ static void am65_cpsw_nuss_free_tx_chns(void *data) for (i = 0; i < common->tx_ch_num; i++) { struct am65_cpsw_tx_chn *tx_chn = &common->tx_chns[i]; - if (!IS_ERR_OR_NULL(tx_chn->tx_chn)) - k3_udma_glue_release_tx_chn(tx_chn->tx_chn); - if (!IS_ERR_OR_NULL(tx_chn->desc_pool)) k3_cppi_desc_pool_destroy(tx_chn->desc_pool); + if (!IS_ERR_OR_NULL(tx_chn->tx_chn)) + k3_udma_glue_release_tx_chn(tx_chn->tx_chn); + memset(tx_chn, 0, sizeof(*tx_chn)); } } @@ -1458,12 +1458,12 @@ void am65_cpsw_nuss_remove_tx_chns(struct am65_cpsw_common *common) netif_napi_del(&tx_chn->napi_tx); - if (!IS_ERR_OR_NULL(tx_chn->tx_chn)) - k3_udma_glue_release_tx_chn(tx_chn->tx_chn); - if (!IS_ERR_OR_NULL(tx_chn->desc_pool)) k3_cppi_desc_pool_destroy(tx_chn->desc_pool); + if (!IS_ERR_OR_NULL(tx_chn->tx_chn)) + k3_udma_glue_release_tx_chn(tx_chn->tx_chn); + memset(tx_chn, 0, sizeof(*tx_chn)); } } @@ -1550,11 +1550,11 @@ static void am65_cpsw_nuss_free_rx_chns(void *data) rx_chn = &common->rx_chns; - if (!IS_ERR_OR_NULL(rx_chn->rx_chn)) - k3_udma_glue_release_rx_chn(rx_chn->rx_chn); - if (!IS_ERR_OR_NULL(rx_chn->desc_pool)) k3_cppi_desc_pool_destroy(rx_chn->desc_pool); + + if (!IS_ERR_OR_NULL(rx_chn->rx_chn)) + k3_udma_glue_release_rx_chn(rx_chn->rx_chn); } static int am65_cpsw_nuss_init_rx_chns(struct am65_cpsw_common *common) -- 2.30.2