From nobody Thu Apr 9 13:30:35 2026 Received: from mail-yw1-f182.google.com (mail-yw1-f182.google.com [209.85.128.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC05B191F92 for ; Sun, 8 Mar 2026 22:07:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773007669; cv=none; b=q5K+hekAnehdBEQoojT6fwNBQf5QA4Hy5vTE6fOFQWItqJ7sSRGN888ucJAONKzkCBR1q6OB92RuVn9JIMcaOwye+rbO3QOIKD8/afTXJqoU01ehdd3PGcvANNvYxhFF9EZc+zrywQULKUq0jC+TyJP9OiB8DH0zg9eKGLUWwDs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773007669; c=relaxed/simple; bh=eil+iPpwgIw3LaL+spkCjgN0S+e4SPX8IkdqBz91dFM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=pnr9vYN2xZOhZAIH0uLK3ODozTlItEkDFnCY1JpDUgCeNlrMfWK0fm+gffENk5Li5d8M+uc7sxEwEZ7X7L4lASoownDyLd9rzoAHlIYna9SRBBMVzId25RiSDuBPMJa/V2rD7Nc9eFjZCGidMvDeeaTzXaM4tclK9Y6xJe8zacI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=j0Ftu1/e; arc=none smtp.client-ip=209.85.128.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="j0Ftu1/e" Received: by mail-yw1-f182.google.com with SMTP id 00721157ae682-79801df3e42so140846387b3.0 for ; Sun, 08 Mar 2026 15:07:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773007666; x=1773612466; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Ftcpbjh6p3nPyd9FYgD5ANvcMgJCdJh9w2K7lp47ksM=; b=j0Ftu1/eSn4j0SDzo9lWLIcAmQXzSozDPFnMN1ZjVOfTGWJ+TTMTSQWnSUKNKChUWL tnn0NlJ8WfaYOgShzE+l20cYYAK3FUhbtjWME2Os9R9/1B+rZCZWJY9MxHNClD4Q1vpg ejrLKRphLlWRWdEbtUD+Va7AvsVYuPzKu2N9YXQm5k3RF6dp6/AP+OvBTlRbLvAzBHlR Jx+L36Z1AL6QZtd//Zszs8CGI4YI8JLGk/N03SLhnk7j16HgmHHTNknBnNPz7XDtu55a rsyjp0Hlno2SSQSoX1RMPkSbrlKaxshdjsGki76756/8uyJD59yHi+FQoAJjgW39kCyE dU7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773007666; x=1773612466; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Ftcpbjh6p3nPyd9FYgD5ANvcMgJCdJh9w2K7lp47ksM=; b=wJ8UB9H/0Z3Ms1+yDrKQQkazrQ2hDX51Wg3kS1YxSF36APqIZa/Cp9Qo3fFAQAnDah 9hoC8h6tNXiaHyFHH6UDE8d1JVTyfci0Au6K4P1os/1+B/+kE0Kl40Dh3W+0lep3cdHL 29HhdlGZTdAmhloa0SfkRg+ZK74zcXGrb5+lB1Eu5opW8Oups6MTnQEbcgyhmFZ1vyZj Fn/D2hnFwD+f2zV3LX9ecqkTUF/yw0dLHaCCCiI8C0LgGP1s5mxdQ3LlcQ9WOJAd8oqq +UZY0McuUTtnQwi8RBO8mJIRWQT8L6OtdDZBOe/lZL0n7MuCLH/BTwHRtgvcwmk4R96o H0yw== X-Forwarded-Encrypted: i=1; AJvYcCW9jiqT8GXoYPSlsEkgNvbVpoM6bCtoqsouQyckqmrrF+we3APiviVZiG1g2JdIB6fN7+jlTE30ZYkHLQY=@vger.kernel.org X-Gm-Message-State: AOJu0YwAmdmmJAhLrE+W/T7z6hstjWiT1FdiqMZ+v1vUDrgIOd71fcuI rcvyerkrcTTuHELS4S+QEa9VhLqTPxQmamb8wTjfKIcrJFvO3s7iP6iF X-Gm-Gg: ATEYQzze4XYPg2vB4k6lGISLckIfD37ke2a65ilb0KAuAocabvbaWy/e/LzYo6P73I0 aW+I9uXHHU5DlIWk8t7J/Wa0KEpNY3ky0PYDhlyrOdu97m2vk5HXtfEv9gIAL7o7kOMLyc3MDAx k0pzBJ4I6hnfsjzaa+vdhuKCsByMgf+maJFQkiQxq0YODkIMdd+l31XZHMJ5i0DB7zjrqWBV9nS 6PEG5SBUgPKraPu4YYDlO6IWny5guE2NuwnPKYLYA7iOX6dsyN/iLUnbhFQ8t44GXAizvnVb6Rt E6C8nqM5fZDnsvi6VPf8bB+BHOgxdnQYAEsQtwgo2FvDVVgjsu6eKnC2yeeiyYKwYDst4URUbMV mkyiotXGbM7JpxP1B3THwRYCwr3cSnpbc2oZM1SWONXYGPX1HmyODGz7BcvCV+i4kkVIpEuXR96 yQ2QxPHA7CIRFo7LicKmF7nNoplq4xYiWV2MAnDj8L0LEOE6XMtJibgA== X-Received: by 2002:a05:690c:ed3:b0:796:3f8a:9607 with SMTP id 00721157ae682-798d1f07dbfmr126573077b3.30.1773007665815; Sun, 08 Mar 2026 15:07:45 -0700 (PDT) Received: from ryzen ([2601:644:8000:56f5::8bd]) by smtp.gmail.com with ESMTPSA id 00721157ae682-798dee8ac51sm36771577b3.49.2026.03.08.15.07.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Mar 2026 15:07:45 -0700 (PDT) From: Rosen Penev To: dmaengine@vger.kernel.org Cc: Lizhi Hou , Brian Xu , Raj Kumar Rampelli , Vinod Koul , Frank Li , Michal Simek , Kees Cook , "Gustavo A. R. Silva" , linux-arm-kernel@lists.infradead.org (moderated list:ARM/ZYNQ ARCHITECTURE), linux-kernel@vger.kernel.org (open list), linux-hardening@vger.kernel.org (open list:KERNEL HARDENING (not covered by other areas):Keyword:\b__counted_by(_le|_be)?\b) Subject: [PATCH] maengine: xilinx: use kzalloc_flex Date: Sun, 8 Mar 2026 15:07:26 -0700 Message-ID: <20260308220726.45270-1-rosenp@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Changing descs to a flexible array member allows one fewer allocation. Aadded __counted_by for extra runtime analysis. Changed error path to a simple kfree. descs in all paths are not allocated. No reason to call xdma_free_desc. A single kfree is enough. Signed-off-by: Rosen Penev --- drivers/dma/xilinx/xdma.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/dma/xilinx/xdma.c b/drivers/dma/xilinx/xdma.c index d02a4dac2291..14fbc7200a6d 100644 --- a/drivers/dma/xilinx/xdma.c +++ b/drivers/dma/xilinx/xdma.c @@ -80,7 +80,6 @@ struct xdma_chan { * @vdesc: Virtual DMA descriptor * @chan: DMA channel pointer * @dir: Transferring direction of the request - * @desc_blocks: Hardware descriptor blocks * @dblk_num: Number of hardware descriptor blocks * @desc_num: Number of hardware descriptors * @completed_desc_num: Completed hardware descriptors @@ -90,12 +89,12 @@ struct xdma_chan { * @period_size: Size of a period in bytes in cyclic transfers * @frames_left: Number of frames left in interleaved DMA transfer * @error: tx error flag + * @desc_blocks: Hardware descriptor blocks */ struct xdma_desc { struct virt_dma_desc vdesc; struct xdma_chan *chan; enum dma_transfer_direction dir; - struct xdma_desc_block *desc_blocks; u32 dblk_num; u32 desc_num; u32 completed_desc_num; @@ -105,6 +104,7 @@ struct xdma_desc { u32 period_size; u32 frames_left; bool error; + struct xdma_desc_block desc_blocks[] __counted_by(dblk_num); }; =20 #define XDMA_DEV_STATUS_REG_DMA BIT(0) @@ -254,7 +254,6 @@ static void xdma_free_desc(struct virt_dma_desc *vdesc) sw_desc->desc_blocks[i].virt_addr, sw_desc->desc_blocks[i].dma_addr); } - kfree(sw_desc->desc_blocks); kfree(sw_desc); } =20 @@ -275,26 +274,22 @@ xdma_alloc_desc(struct xdma_chan *chan, u32 desc_num,= bool cyclic) void *addr; int i, j; =20 - sw_desc =3D kzalloc_obj(*sw_desc, GFP_NOWAIT); + dblk_num =3D DIV_ROUND_UP(desc_num, XDMA_DESC_ADJACENT); + sw_desc =3D kzalloc_flex(*sw_desc, desc_blocks, dblk_num, GFP_NOWAIT); if (!sw_desc) return NULL; =20 + sw_desc->dblk_num =3D dblk_num; sw_desc->chan =3D chan; sw_desc->desc_num =3D desc_num; sw_desc->cyclic =3D cyclic; sw_desc->error =3D false; - dblk_num =3D DIV_ROUND_UP(desc_num, XDMA_DESC_ADJACENT); - sw_desc->desc_blocks =3D kzalloc_objs(*sw_desc->desc_blocks, dblk_num, - GFP_NOWAIT); - if (!sw_desc->desc_blocks) - goto failed; =20 if (cyclic) control =3D XDMA_DESC_CONTROL_CYCLIC; else control =3D XDMA_DESC_CONTROL(1, 0); =20 - sw_desc->dblk_num =3D dblk_num; for (i =3D 0; i < sw_desc->dblk_num; i++) { addr =3D dma_pool_alloc(chan->desc_pool, GFP_NOWAIT, &dma_addr); if (!addr) @@ -314,7 +309,7 @@ xdma_alloc_desc(struct xdma_chan *chan, u32 desc_num, b= ool cyclic) return sw_desc; =20 failed: - xdma_free_desc(&sw_desc->vdesc); + kfree(desc); return NULL; } =20 --=20 2.53.0