Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2836270pxv; Mon, 12 Jul 2021 03:08:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwOi27Itt8jyw51dRpQ0c6b82yWFcssQEzs+ZG+LscSTuxKytbW57/y3jl7LWl0CFFxLMVq X-Received: by 2002:a05:6602:249a:: with SMTP id g26mr38523209ioe.150.1626084527602; Mon, 12 Jul 2021 03:08:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626084527; cv=none; d=google.com; s=arc-20160816; b=HAz7SEjhUcuUCmAQeiqb7APXG7y23u4RFo66Nz2Z9RP+Be+Zb5spyEJEaUk/7JxtiT 594sZH/8+mSeIFZePWxTxRzi0H/gL/IAOVP0jNv5wjanNxCdpb7g2dctD6Iq5ngcYMCw 3514T3SEqK1mdUVa6oVMCeeFRAA3t/xBtQDChfhyYDux/ifZYbYR7WTX8W+xNyYVePD6 g43fXWlnrtqgA0BUEtDg+jPAyDQSmo6FCu9734kX90+2iKb5MT+rVOiLBZSjm2MfQw4D kobu8dOkrwr4OYdTxvBwg/FAy3Z8DvNgKR3zRM1llGZYMi3je0+MS4MPHlkQ7djvM4Dc 7l2g== 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=zNZxccvRSi8qYkhkxhWevZzpq8j+5OqQ5MIzDCOGVzc=; b=OO9U6uHGEN0pKGUcoYqBP1voT0MbTttZx+RLSmgsRj93RSa5Rj6qC0jTLo8pKh5rMU BgJxEipPKShwL2j/PBCrqiZqT+PViSUAxtC0QgZcbia8mO3WR62a1i6bcZkgiHkbZ9SH CK5Vwi6fehuxuHmWT/e0BjQGPzTpW/3pSS2nKleuPaDpNpXhsGDpfblFKVXgX9ccVTs/ 5PFgpG42wl75VhuBpvte/StkvqVhMyZcvgW/F15p0atamFCL+23+6qHtSL03erfkfCes FEHfjD/z6ZIgo0Yl8jEjstIeYDjmo+oz1Lue6n5UvptHO//g0HBSMvJr81+lp6QgpQzQ WNBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=zfCiIXYN; 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 w13si16613084jar.0.2021.07.12.03.08.36; Mon, 12 Jul 2021 03:08:47 -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=zfCiIXYN; 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 S1351935AbhGLHwO (ORCPT + 99 others); Mon, 12 Jul 2021 03:52:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:55466 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243582AbhGLHRo (ORCPT ); Mon, 12 Jul 2021 03:17:44 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A48E6611ED; Mon, 12 Jul 2021 07:14:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626074095; bh=XKqbOAf8faM+Ie/RiraBNzC5aOntABgO/iL79yGUqx0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zfCiIXYN3qATAtnaa3l05IgGni8n5Tz6HWkiQGt2pCCXSthAjzLzHkbYFuSMHQ0aG 5HqGu3imZ4Ftzreke1deR/iDmO7s9Y0WiLLguDaAAX4J30Yc6JpzSexbO3yXvAkp9I UdXDLkZZsopp6L1hwNHiuJTIb49kVOuubeYT20Cc= 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.12 463/700] net: ti: am65-cpsw-nuss: Fix crash when changing number of TX queues Date: Mon, 12 Jul 2021 08:09:06 +0200 Message-Id: <20210712061025.832380327@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060924.797321836@linuxfoundation.org> References: <20210712060924.797321836@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 638d7b03be4b..a98182b2d19b 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -1506,12 +1506,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)); } } @@ -1531,12 +1531,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)); } } @@ -1624,11 +1624,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