From nobody Tue Dec 16 11:49:23 2025 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 37FE8C04E69 for ; Tue, 15 Aug 2023 06:13:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235019AbjHOGNM (ORCPT ); Tue, 15 Aug 2023 02:13:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37794 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234883AbjHOGMN (ORCPT ); Tue, 15 Aug 2023 02:12:13 -0400 Received: from out-91.mta0.migadu.com (out-91.mta0.migadu.com [91.218.175.91]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17F7710E5 for ; Mon, 14 Aug 2023 23:12:07 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1692079925; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=87BafcYHTECroCFlPdcmpeMw+ZEtXfVG5SDX5ZX7vng=; b=SaSvNJI87JqpANRZ51JR8umiT3wah4COBIVfxNOITxv/Lg12FLBqHqfeHPAoNaxuqAA75+ 2+oLt29lwDyujY9SHnOHUCrU+QaCmpqSP7oJSx/5mSVRVtmnYti6gylM1/eRzHR66SqsEJ Blv8MAbBTTfKeKLaIOLEK4wXzok3qEg= From: Yajun Deng To: vkoul@kernel.org, dave.jiang@intel.com, dan.j.williams@intel.com Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Yajun Deng Subject: [PATCH v2] dmaengine: ioat: fixing the wrong dma_dev->chancnt Date: Tue, 15 Aug 2023 14:11:51 +0800 Message-Id: <20230815061151.2724474-1-yajun.deng@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The chancnt would be updated in __dma_async_device_channel_register(), but it was assigned in ioat_enumerate_channels(). Therefore chancnt has the wrong value. Add chancnt member to the struct ioatdma_device, ioat_dma->chancnt is used in ioat, dma_dev->chancnt is used in dmaengine. Signed-off-by: Yajun Deng Reviewed-by: Dave Jiang --- V1 -> V2: add chancnt member to the struct ioatdma_device. --- drivers/dma/ioat/dma.h | 1 + drivers/dma/ioat/init.c | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h index 35e06b382603..a180171087a8 100644 --- a/drivers/dma/ioat/dma.h +++ b/drivers/dma/ioat/dma.h @@ -74,6 +74,7 @@ struct ioatdma_device { struct dca_provider *dca; enum ioat_irq_mode irq_mode; u32 cap; + int chancnt; =20 /* shadow version for CB3.3 chan reset errata workaround */ u64 msixtba0; diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c index c4602bfc9c74..9c364e92cb82 100644 --- a/drivers/dma/ioat/init.c +++ b/drivers/dma/ioat/init.c @@ -420,7 +420,7 @@ int ioat_dma_setup_interrupts(struct ioatdma_device *io= at_dma) =20 msix: /* The number of MSI-X vectors should equal the number of channels */ - msixcnt =3D ioat_dma->dma_dev.chancnt; + msixcnt =3D ioat_dma->chancnt; for (i =3D 0; i < msixcnt; i++) ioat_dma->msix_entries[i].entry =3D i; =20 @@ -511,7 +511,7 @@ static int ioat_probe(struct ioatdma_device *ioat_dma) dma_cap_set(DMA_MEMCPY, dma->cap_mask); dma->dev =3D &pdev->dev; =20 - if (!dma->chancnt) { + if (!ioat_dma->chancnt) { dev_err(dev, "channel enumeration error\n"); goto err_setup_interrupts; } @@ -567,15 +567,16 @@ static void ioat_enumerate_channels(struct ioatdma_de= vice *ioat_dma) struct device *dev =3D &ioat_dma->pdev->dev; struct dma_device *dma =3D &ioat_dma->dma_dev; u8 xfercap_log; + int chancnt; int i; =20 INIT_LIST_HEAD(&dma->channels); - dma->chancnt =3D readb(ioat_dma->reg_base + IOAT_CHANCNT_OFFSET); - dma->chancnt &=3D 0x1f; /* bits [4:0] valid */ - if (dma->chancnt > ARRAY_SIZE(ioat_dma->idx)) { + chancnt =3D readb(ioat_dma->reg_base + IOAT_CHANCNT_OFFSET); + chancnt &=3D 0x1f; /* bits [4:0] valid */ + if (chancnt > ARRAY_SIZE(ioat_dma->idx)) { dev_warn(dev, "(%d) exceeds max supported channels (%zu)\n", - dma->chancnt, ARRAY_SIZE(ioat_dma->idx)); - dma->chancnt =3D ARRAY_SIZE(ioat_dma->idx); + chancnt, ARRAY_SIZE(ioat_dma->idx)); + chancnt =3D ARRAY_SIZE(ioat_dma->idx); } xfercap_log =3D readb(ioat_dma->reg_base + IOAT_XFERCAP_OFFSET); xfercap_log &=3D 0x1f; /* bits [4:0] valid */ @@ -583,7 +584,7 @@ static void ioat_enumerate_channels(struct ioatdma_devi= ce *ioat_dma) return; dev_dbg(dev, "%s: xfercap =3D %d\n", __func__, 1 << xfercap_log); =20 - for (i =3D 0; i < dma->chancnt; i++) { + for (i =3D 0; i < chancnt; i++) { ioat_chan =3D kzalloc(sizeof(*ioat_chan), GFP_KERNEL); if (!ioat_chan) break; @@ -596,7 +597,7 @@ static void ioat_enumerate_channels(struct ioatdma_devi= ce *ioat_dma) break; } } - dma->chancnt =3D i; + ioat_dma->chancnt =3D i; } =20 /** --=20 2.25.1