From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (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 C0ABC3CEBBD for ; Tue, 16 Jun 2026 18:20:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781634008; cv=none; b=nwRt54UbpDLd4FflrK31ofYvfaoir451h++9gTTItBCeYostDwvAnrXpkBg/WxcVNILkl9cL24qZ+fNcvfplVSeLLqdf5NKQoNDLFICJe1yesnqc0eJWjb2JCS1KqSNedQrIlqVqpxXO92dexAovFnL5DLwJu73ovEnAYZ050a0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781634008; c=relaxed/simple; bh=VsCW3uGhQYDZk9WiDRGdEyD+oXXhyDEM68SL+4Qr0Kw=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=d0maLzhISp+uP5MhDXg17Yk5TpJ2g2BawEG24ii8T2vJs/aVgyrPqsMoYAYB2uqqtiKtlcpfru54wWRJP06OBGmVEOhvRRWkRX9hkhZhX50/1EXGsLdSDdvMOKu61PLjmR1xWoeVIaHq/qYcX4gscwnWumlqW7tLVLCvdX2WOK8= 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=OsIYZBZq; arc=none smtp.client-ip=209.85.216.51 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="OsIYZBZq" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-36baeec21dcso3169534a91.3 for ; Tue, 16 Jun 2026 11:20:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781634007; x=1782238807; 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=UwpVureg07QbjRnL27mIYEGwVaOJw7DuUq/siGYlqU4=; b=OsIYZBZq8EOl6gGhtocVI5Ar4hjEKxeORa3W6yUcD3szPdwG8O8XYACfXE6+7h24XL PNdaaFrYtv4+iG/GehcoVoGuphUlBy3L56mBKu1trKJ/v6UksXukeXlkslpjor63/kDr +0t+vcrp80UyUkv7dQJtA31FsCimSgVmsMzv9SM/GjzJzMY3/cAR9Y3pBAjHW6os2bhA 1ut3HUnKsZ3nswsCMVKWoNxGDtdodcgJh855+0xJJt/iIif8F7JyfbXBqvuVy5RbaKC1 rTCuNpCR3bfYpV0gBxPnA5vThX0lstAuPE1Z9bAI7D1nEzETeDWMAu8gHk1kZSffLl+c GC5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781634007; x=1782238807; 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=UwpVureg07QbjRnL27mIYEGwVaOJw7DuUq/siGYlqU4=; b=sDm6JstxU1QtFGMDqGX1PfGSQgk9SVfMP7/mtJt/1PvCyerg+AzxcGMMpP9yU4kpnU XxzYaWpfpwtsls5aQKvr5ASh7tsUZxhLQjLxbUebMb6xiLI4i2irP/t4WAJojz0Zo3+J Sb//JLsYDlJLmfYtniP6k2eHP3A5m7cOEJRV46GZAZgaAk6/hSASi6PQPdmw85C1QqPH eWWZv+BSANRczUMAiwynBaNhm4FZjSKKFvbTywTquqUOTSUGwr2fHtMdoNNmcbwruGm7 2BOKkwX8/ZK1wK6CzLEqAhkdFyexCBEqQMRWoDGXYAG4sIuDAy11Tt4Ex31aQT38fE3q XxmQ== X-Forwarded-Encrypted: i=1; AFNElJ9w7OMx8lnnHzJJy9067RTtVM7uiTQhvDKCFDNBXRVzFjpdlIQXvON8l/UcNcwQAYKCg72wWNulYN5D2Z0=@vger.kernel.org X-Gm-Message-State: AOJu0YxohgEICpKvAkpX4zeBEhlIq/D2e7zdM4W/8CCquHr4F5bhnznr ZAXpyZzyLo6vlovCSOJ88t7UPMMr7BQSaiEVU8HYwkS2vAZMiUIJETy1 X-Gm-Gg: AfdE7cm4YogJ3DKQhQcexb3ywIUyl/gegqFH01eLh0/ZSguhwVeqVjwnNuzIyr2P/vG X+zVRVo0xOf2OMC7JD5YCc6jO7ZRUXmG/ozUV5iOTQ8lZjonkHGNFb1pRDLW3OTvS1IDcCcRJwj WENZsWenPmK8oJhv1+JojxxUrqbgouW6jMcJi0rB3EI6xZvPk1O9n+qMpw1i6rmpoh1icy09VLf BbVaMAb2tJkmWg7Rsg3oUfYtXiT0GJSavUECO1VnqIxESf+rJgbffZRnJ7huJ9G9nfigEZfE5MT LFjlZHndAJO6qeDvIQdbVxAL7ZrutiJgpKRBSQZUEvG91tBRMGL2Ve+elkAbiHZKxdjO33OvmAc blN0RzOwv6Lw3MhhHcoUONrthagRPx+M57jc/s4KbBTdLj1rTfIO+/bET1q0fDyIK7Uy1qp7lFh GJqJzDtLO0wkML3fwG9qonN5pxGCefHnZDgg8BAgosR9il9iYdBVKLxdTQnSP36fI= X-Received: by 2002:a17:90b:4ac7:b0:36b:7c2a:263e with SMTP id 98e67ed59e1d1-37c9e9d408dmr178965a91.20.1781634007158; Tue, 16 Jun 2026 11:20:07 -0700 (PDT) Received: from localhost.localdomain ([49.207.217.37]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-37c521ef803sm3605560a91.11.2026.06.16.11.20.02 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 16 Jun 2026 11:20:06 -0700 (PDT) From: Biren Pandya To: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch Cc: sumit.semwal@linaro.org, christian.koenig@amd.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Biren Pandya Subject: [PATCH] drm/gem: modernize locks to use scoped_guard() Date: Tue, 16 Jun 2026 23:49:57 +0530 Message-ID: <20260616181956.61476-2-birenpandya@gmail.com> X-Mailer: git-send-email 2.50.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Several GEM core functions manually managed mutex_lock() and mutex_unlock() over single scopes or error paths. This adds boilerplate and carries the risk of lock leaks if error paths are refactored. Modernize these locks by deploying the scoped_guard() macro. This ensures that the locks are reliably dropped when the block exits, cleanly removing goto out_unlock paths and tightening the lifecycle. Signed-off-by: Biren Pandya Compiled locally, but requires IGT validation by the DRM CI. --- drivers/gpu/drm/drm_gem.c | 66 ++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 891c3bff5ae0..d3a061d42ba7 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -346,13 +346,13 @@ void drm_gem_object_handle_put_unlocked(struct drm_gem_object *obj) * we checked for a name. */ - mutex_lock(&dev->object_name_lock); - if (--obj->handle_count == 0) { - drm_gem_object_handle_free(obj); - drm_gem_object_exported_dma_buf_free(obj); - final = true; + scoped_guard(mutex, &dev->object_name_lock) { + if (--obj->handle_count == 0) { + drm_gem_object_handle_free(obj); + drm_gem_object_exported_dma_buf_free(obj); + final = true; + } } - mutex_unlock(&dev->object_name_lock); if (final) drm_gem_object_put(obj); @@ -374,11 +374,8 @@ drm_gem_object_release_handle(int id, void *ptr, void *data) if (obj->funcs->close) obj->funcs->close(obj, file_priv); - mutex_lock(&file_priv->prime.lock); - - drm_prime_remove_buf_handle(&file_priv->prime, id); - - mutex_unlock(&file_priv->prime.lock); + scoped_guard(mutex, &file_priv->prime.lock) + drm_prime_remove_buf_handle(&file_priv->prime, id); drm_vma_node_revoke(&obj->vma_node, file_priv); @@ -1021,37 +1018,34 @@ int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data, goto out; } - mutex_lock(&file_priv->prime.lock); + scoped_guard(mutex, &file_priv->prime.lock) { + spin_lock(&file_priv->table_lock); + ret = idr_alloc(&file_priv->object_idr, obj, handle, handle + 1, + GFP_NOWAIT); + spin_unlock(&file_priv->table_lock); - spin_lock(&file_priv->table_lock); - ret = idr_alloc(&file_priv->object_idr, obj, handle, handle + 1, - GFP_NOWAIT); - spin_unlock(&file_priv->table_lock); + if (ret < 0) + break; - if (ret < 0) - goto out_unlock; + if (obj->dma_buf) { + ret = drm_prime_add_buf_handle(&file_priv->prime, obj->dma_buf, + handle); + if (ret < 0) { + spin_lock(&file_priv->table_lock); + idr_remove(&file_priv->object_idr, handle); + spin_unlock(&file_priv->table_lock); + break; + } - if (obj->dma_buf) { - ret = drm_prime_add_buf_handle(&file_priv->prime, obj->dma_buf, - handle); - if (ret < 0) { - spin_lock(&file_priv->table_lock); - idr_remove(&file_priv->object_idr, handle); - spin_unlock(&file_priv->table_lock); - goto out_unlock; + drm_prime_remove_buf_handle(&file_priv->prime, args->handle); } - drm_prime_remove_buf_handle(&file_priv->prime, args->handle); - } - - ret = 0; - - spin_lock(&file_priv->table_lock); - idr_remove(&file_priv->object_idr, args->handle); - spin_unlock(&file_priv->table_lock); + ret = 0; -out_unlock: - mutex_unlock(&file_priv->prime.lock); + spin_lock(&file_priv->table_lock); + idr_remove(&file_priv->object_idr, args->handle); + spin_unlock(&file_priv->table_lock); + } out: drm_gem_object_put(obj); base-commit: 72c25183cac9bc584c9de21797a5883af44bcc7a -- 2.50.1 (Apple Git-155)