From nobody Tue Sep 29 02:02:39 2026 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (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 D6C6E48CD48 for ; Thu, 13 Aug 2026 15:31:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635111; cv=none; b=G8aMhOGaKt039oo3kyGHrA5DMu1th2u/9ZqLuW2JF3KOQMOdQuJryV7igZOjmE0NZHh5XjSkTc0nvqmXPsimTZQGLk1bQVPpUGYQ1D46iZ3JHAXx87bY5W3YuGvSLC7IgYfXjHNPWq7mvdTrY6BSoefihU6bGAW2JZHa0QU6c7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786635111; c=relaxed/simple; bh=jZxyxU5u8sBykomTeSI+V7SOB5yOkTTJqrCunzVau44=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=OVVOm8Tx4wg/6VGg8+5Rj+cu5n6Ax0gcFm9isLY4/9RYM6OKF0vLj/68FOMAI4vbnJCPKs6Wxn7a0/wb26LrXNkC8PE4rK2TvidrLAc/awKHq9uVbaTsySFG8XP9azY9COmFB1peSOiQWn8tKgivEfNi7nFWvzxfjQDi3JvaHbk= 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=Gy9Ejj08; arc=none smtp.client-ip=209.85.214.180 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="Gy9Ejj08" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2ce7d2adef4so850845ad.3 for ; Thu, 13 Aug 2026 08:31:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786635109; x=1787239909; 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:content-type; bh=sdfZ1MM3xM7GKAmsObtE+j5gvMl87cGr/Gcwg3tTC/g=; b=Gy9Ejj08EmjlWg1nlmcPARlERg80r5oypdby6FIu82e1pMx849g95vPJq5vuVLSolW /ccT/c5rDRiyJk+EewwiAN/kiwrLBE55Aa7ZMfa+HQ2TDZH5W1ENWPoKDhSM66MQfDGv ySl29w1uaZchwWKXD1ZgRRjSVzbCvAiwGMxoK/JWU3yzPXDUD9gd+jFzrMF3dRO0atkc uJVk7HxHsjy4QUWh7NcLS43nfKvORsfkI7OIMzWc6MUxwnVhZJxyMBFiQVNACqyzCvAr GUTXMOW1W8TcRGdOdP+Ewwp8HqpH0wHs6ZM4L4C6j53cQwDGs+d7sp+r9+kd3bv9g1fe Y3Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786635109; x=1787239909; 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:content-type; bh=sdfZ1MM3xM7GKAmsObtE+j5gvMl87cGr/Gcwg3tTC/g=; b=AttGy7NKpG5yxoa8aqcN6OV+AbU8ysa2KcL99Gz4tDCNjdtuhOOLODiBRhT8TMFwLM f1BktXup50T1kN/Ue7FPeK9uTH2M40qX8B2eAcCTzSOam0wEPdYMChnlTxEJAbKeSAVC oz9I1kxYVPLOT7/bPoWps7gOPv8qxE6g2rhoOxQ3rkbWB1s9jIKpuA1WkVU+uZY3R9Wr 4GOoQe3v8HRkvyGx22DT77lEt38r50TpqreaFOZ1MvZidDlSc259jHYjO3q/nsFP/oF8 zdLBlWcSG8ed7MPSnkfSg/QrsvrBY+c/crYR1cSexHSyzuzdzJeGkcMfpOnw1b1xJjWu 3+OA== X-Forwarded-Encrypted: i=1; AHgh+Rr0k18CkVxcW2WkNRfZEvTs34kD+40vGxS8KSS6ED8uBfMltqqsiyJ5ZhTrG2IWt4FiSVDMOa8Gsp+GFiw=@vger.kernel.org X-Gm-Message-State: AOJu0YzvQy9AqUUB9hw+iQ+mo69kLLqd8xzd9EknOmsur2GXIbKVZ9Ts 1tQPeKJ2uUAn7Vx3ytxEgjSqiptHn3CuHZ5c9ZdlFnjGgg0RWxx72GgK X-Gm-Gg: AR+sD101rAFcWsuHasnJt7KdWtkOSBpXCfDRpUXDKdgg/R7ZHfJtJ31D6K24dklTVcZ YqHz2xkP7oV+YmGwJkwW82CJslu+5MKXNGMWOCgzfSz1ZkI54K8CrtdogVKRzOEk0tPaSap8cI6 RbL8+mC7it7YIQpox4bu/kikh8M3UZvpGVTvcZsSP0OEQEDgizAhGuhoq7ZGcEKwcGew4OZSM0f RgfdMq3a6V6qxLMB8Z5ZD9cuhRl0gu6lvFP/a0aVXRs5Rm+cvvxDoKVT/T4x55gkTjzo8B4TWkN gA5a9wBQBmRkDzJ9WzWwCuCmeIyTzMV38fLIF1mpHOy4wyEnRbndEjnorVSmob+tyF2IJDQxcL0 ruwD1zrqUk+I6VM0WB76peLsM7JHh40OX7PCRJucYoCA4Efm+CHHHzYiWRnU8qD+qk1jjCZwZU1 9cufiyDTSzLowD++h72Cyfb6D8v0DBFg219D7/c4c+qw9MsMj1VUpIN9Tm/c2R7u+b+mZehOoqI OgfRmU= X-Received: by 2002:a17:903:1b06:b0:2c8:1c05:16aa with SMTP id d9443c01a7336-2d37e8a6026mr85074095ad.19.1786635109161; Thu, 13 Aug 2026 08:31:49 -0700 (PDT) Received: from haichao.tail057a43.ts.net ([2001:da8:e000:1206:3b7:6da1:c188:d14f]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d37c200199sm11985545ad.5.2026.08.13.08.31.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Aug 2026 08:31:48 -0700 (PDT) From: Ruoyu Wang To: dmaengine@vger.kernel.org Cc: vkoul@kernel.org, Frank.Li@kernel.org, ed.blake@sondrel.com, linux-kernel@vger.kernel.org, Ruoyu Wang Subject: [PATCH] dmaengine: img-mdc: Fix runtime PM usage counter leak Date: Thu, 13 Aug 2026 23:31:43 +0800 Message-ID: <20260813153143.3953303-1-ruoyuw560@gmail.com> X-Mailer: git-send-email 2.51.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" pm_runtime_get_sync() leaves the IMG MDC device's usage counter incremented when runtime resume fails. mdc_alloc_chan_resources() returns that error to the DMA core, so the channel's client count is not incremented and mdc_free_chan_resources() is not called to drop the reference. Repeated allocation attempts can therefore accumulate usage references and prevent runtime suspend. Use pm_runtime_resume_and_get() so a failed resume does not retain a usage reference while successful allocations remain paired with mdc_free_chan_resources(). DMA core only treats negative return values as allocation failures, so the helper's zero success return preserves behavior. This issue was found by a static analysis checker and confirmed by manual source review. Fixes: 56d355e6f586 ("dmaengine: img-mdc: Add runtime PM") Signed-off-by: Ruoyu Wang Reviewed-by: Frank Li --- drivers/dma/img-mdc-dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/dma/img-mdc-dma.c b/drivers/dma/img-mdc-dma.c index b3765ba1580308..a3192d49b6c860 100644 --- a/drivers/dma/img-mdc-dma.c +++ b/drivers/dma/img-mdc-dma.c @@ -738,7 +738,7 @@ static int mdc_alloc_chan_resources(struct dma_chan *ch= an) struct mdc_chan *mchan =3D to_mdc_chan(chan); struct device *dev =3D mdma2dev(mchan->mdma); =20 - return pm_runtime_get_sync(dev); + return pm_runtime_resume_and_get(dev); } =20 static void mdc_free_chan_resources(struct dma_chan *chan) --=20 2.51.0