From nobody Thu Apr 2 20:28:13 2026 Received: from mail-oa1-f53.google.com (mail-oa1-f53.google.com [209.85.160.53]) (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 2F7E242847F for ; Thu, 26 Mar 2026 18:55:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774551334; cv=none; b=DWUn+ku9svdJJGJEhBnt7fqZbvI26atQoZ+kBcwNBV5vS7v7yBZhG1zbfZCn+6ihmIk6fkjsrK0iW5gFeRoUaL1SJW83piE7GtmtslLKIy4Us5mcLGtANXAIUruRsFIE1tsYddQ7j1gGaghbwC0ECF2eBCi6KLLZb0Gw+zK07Rs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774551334; c=relaxed/simple; bh=H71niF05ZOADzPSzlZP1dJBCWxzy2fREPqYgW69VFBY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RWjiepUrxRp1O+HivxBV5t/b7z77Io47l+mlfo8Kv5GfTwg89RmoQv0MmHuEM9HqOveu9wGUW4e45rOjP/pdGkglAmrqq5wW1d96XvlKE8CGMw1myLdU3PhZr5h67XvALRNy+EGG0mwsExImX2c8AhuCB2wEad8nY6P5dwa51aY= 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=Azeyqb4M; arc=none smtp.client-ip=209.85.160.53 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="Azeyqb4M" Received: by mail-oa1-f53.google.com with SMTP id 586e51a60fabf-40ee9b945d5so940474fac.0 for ; Thu, 26 Mar 2026 11:55:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774551332; x=1775156132; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=b4jWe/O/TQKg+phAG4swgxb5r2uUue/0h3/17ze4tn4=; b=Azeyqb4M/Lqy4DYaeLyK6KH6f2z+gaAdvU0bcxXU0TDj5Ystzaccw4Iu4V3a6I5Llf cK3oehQ5Wu/mzw3kUcNc4nPHYaxDj4779jocjM+Bc9UUN+GQBRjCIzhrh73/3JzLkpfM 41ppmxSGVBmiFJJr7RLU54M2exs8yR3jSsabj7YkIIjtAxIYKiDKZfiP3BRKr3h/5PaQ wuiJ/3BOIyfYCipFJnp3JSFfBmKL3kz/Ik7IYu5LI80ft9dKiKEWIXmg6LPEjTKXH6dl oy+Di99uPbxmjn2uUHNUX2ocgg/GjH330qooa6xjivqQIA9Yl1N3/wTgZIEWJ6w6ASJW RKLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774551332; x=1775156132; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=b4jWe/O/TQKg+phAG4swgxb5r2uUue/0h3/17ze4tn4=; b=knJBUy5b7aDfxg3wBF1cpQm+S9UK/CnPQyEiqn2ZkCGcBNIU7f2Uu7ZIGuR5oCQdM2 /NhmzTwdEBoC7azpYUl8zS47SLo86uSpb4aug3ep4FKAIDW7MXqf5iyuB2mD7beEyZhC /xjyEOXBFsuNJBOEZjW4QYRK/8jarKWJMj9qaDOi+KPuUXzHEZMs5L9D1MubFNu1vf9M I49UkP1oAw/Or168ZSVQLqhEZRhvR7ffi5Sc6pYs+UDPZtwWufnEXtmXcIh3hpiTCZs7 sARutk/byV9678Bj2LgwNGHJrurx6tge/6bNISfsZkn5zcFVgRJ1Y9GgrIDGB2ozzio/ cvqg== X-Gm-Message-State: AOJu0YwWwKxeQWITrr3sJO51FeKo2JkHZ9XV+6+4szFWd2WZ33c2TdGw +23zsDQ8plg7hrFDCnx5zmJF4jXFMeA1wccN0LydnJD4aDIDC1riVYOZl4nozQ== X-Gm-Gg: ATEYQzxespx8W62RQrnRiPU5n6SVMMm2/XXyxw2HgO7CJl7t+l8wgC1l/refka9lSRL GyJ/ZXSjCcK1uQXm3jLGCIPEQ2y1frPSEZ/BmGAt0QbIbAAATh7jndJbTTW2GkBtywk0ojsNj40 Z4xJkmRiLee/RUdEvx309TP/AgksEBV5M47LWhqqsOOkJNHSjU2c6lPx34dXT9YNdyLGgbA/lwR EfxWB3MLwwyxlLnuXTsT8sO3Aa1JzNqCvj8bc3BvEOvHhzifYB8g2u6muHknc04GpgabHvhcEJi K4LQgXVWQPSwBzqddRAEiuEUdQ1grG6Hb4cKiCiVECzdRas/SevqT39gcQqw0d7NhVhrgzWfMZ8 rf0KDuKRgNBXFtz/mZwzXySkyOvO3khFKDCUe8LPGwPRlPkHQODz2ETltCPQapn/yD1zKdXiCqI R21wQpyWzrp//CFcpmg6YX71cw39aLi0bq9mvnveGG+FfiVJyN X-Received: by 2002:a05:6870:194b:b0:409:9a0b:b733 with SMTP id 586e51a60fabf-41ca6d6a50emr4662736fac.10.1774551332051; Thu, 26 Mar 2026 11:55:32 -0700 (PDT) Received: from frodo (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 586e51a60fabf-41cc7760c08sm3075171fac.4.2026.03.26.11.55.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 11:55:31 -0700 (PDT) From: Jim Cromie To: linux-kernel@vger.kernel.org, airlied@gmail.com, simona@ffwll.ch, jbaron@akamai.com, gregkh@linuxfoundation.org Cc: jim.cromie@gmail.com, mripard@kernel.org, tzimmermann@suse.de, maarten.lankhorst@linux.intel.com, jani.nikula@intel.com, ville.syrjala@linux.intel.com, christian.koenig@amd.com, matthew.auld@intel.com, arunpravin.paneerselvam@amd.com, louis.chauvet@bootlin.com, skhan@linuxfoundation.org, pmladek@suse.com, ukaszb@chromium.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH v12 39/69] drm_buddy: fix power-of-2 rounding errs Date: Thu, 26 Mar 2026 12:53:43 -0600 Message-ID: <20260326185413.1205870-40-jim.cromie@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260326185413.1205870-1-jim.cromie@gmail.com> References: <20260326185413.1205870-1-jim.cromie@gmail.com> 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" The standard roundup_pow_of_two() and rounddown_pow_of_two() macros use unsigned long internally, which on 32-bit architectures (like arm32) is a 32-bit type. drm_test_buddy_alloc_exceeds_max_order() uses these on a u64 value, where they silently truncate the 10GB allocation, giving unexpected success in DRM-CI. (see below the snip). Fix this by replacing the those macros with safe 64-bit power-of-two calculations using ilog2(). Signed-off-by: Jim Cromie --- On DRM-CI, I encountered this kunit:arm32 failure. [23:19:40] [PASSED] drm_test_buddy_alloc_clear [23:19:40] [PASSED] drm_test_buddy_alloc_range_bias [23:19:41] [PASSED] drm_test_buddy_fragmentation_performance [23:19:41] # drm_test_buddy_alloc_exceeds_max_order: EXPECTATION FAILED= at drivers/gpu/drm/tests/drm_buddy_test.c:889 [23:19:41] Expected err =3D=3D -22, but [23:19:41] err =3D=3D 0 (0x0) [23:19:41] ------------[ cut here ]------------ [23:19:41] WARNING: drivers/gpu/drm/drm_buddy.c:405 at drm_buddy_fini+0x114= /0x1b8, CPU#0: kunit_try_catch/74 [23:19:41] CPU: 0 UID: 0 PID: 74 Comm: kunit_try_catch Tainted: G = N 7.0.0-rc1-gdfb0bcedd08a #1 VOLUNTARY [23:19:41] Tainted: [N]=3DTEST [23:19:41] Hardware name: Generic DT based system [23:19:41] Call trace: [23:19:41] unwind_backtrace from show_stack+0x10/0x14 [23:19:41] show_stack from dump_stack_lvl+0x3c/0x4c [23:19:41] dump_stack_lvl from __warn+0xe8/0x1c4 [23:19:41] __warn from warn_slowpath_fmt+0xa4/0xc0 [23:19:41] warn_slowpath_fmt from drm_buddy_fini+0x114/0x1b8 [23:19:41] drm_buddy_fini from drm_test_buddy_alloc_exceeds_max_order+0x1c= 8/0x36c [23:19:41] drm_test_buddy_alloc_exceeds_max_order from kunit_try_run_case+= 0x78/0x1c8 [23:19:41] kunit_try_run_case from kunit_generic_run_threadfn_adapter+0x1c= /0x34 [23:19:41] kunit_generic_run_threadfn_adapter from kthread+0x108/0x134 [23:19:41] kthread from ret_from_fork+0x14/0x28 [23:19:41] Exception stack(0xf0bd5fb0 to 0xf0bd5ff8) [23:19:41] 5fa0: 00000000 00000000 0000= 0000 00000000 [23:19:41] 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 0000= 0000 00000000 [23:19:41] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 [23:19:41] ---[ end trace 0000000000000000 ]--- [23:19:41] # drm_test_buddy_alloc_exceeds_max_order: drivers/gpu/drm/dr= m_buddy.c:406: buddy_fini() root [23:19:41] ------------[ cut here ]------------ [23:19:41] WARNING: drivers/gpu/drm/drm_buddy.c:414 at drm_buddy_fini+0x1b4= /0x1b8, CPU#0: kunit_try_catch/74 [23:19:41] CPU: 0 UID: 0 PID: 74 Comm: kunit_try_catch Tainted: G W = N 7.0.0-rc1-gdfb0bcedd08a #1 VOLUNTARY [23:19:41] Tainted: [W]=3DWARN, [N]=3DTEST [23:19:41] Hardware name: Generic DT based system [23:19:41] Call trace: [23:19:41] unwind_backtrace from show_stack+0x10/0x14 [23:19:41] show_stack from dump_stack_lvl+0x3c/0x4c [23:19:41] dump_stack_lvl from __warn+0xe8/0x1c4 [23:19:41] __warn from warn_slowpath_fmt+0xa4/0xc0 [23:19:41] warn_slowpath_fmt from drm_buddy_fini+0x1b4/0x1b8 [23:19:41] drm_buddy_fini from drm_test_buddy_alloc_exceeds_max_order+0x1c= 8/0x36c [23:19:41] drm_test_buddy_alloc_exceeds_max_order from kunit_try_run_case+= 0x78/0x1c8 [23:19:41] kunit_try_run_case from kunit_generic_run_threadfn_adapter+0x1c= /0x34 [23:19:41] kunit_generic_run_threadfn_adapter from kthread+0x108/0x134 [23:19:41] kthread from ret_from_fork+0x14/0x28 [23:19:41] Exception stack(0xf0bd5fb0 to 0xf0bd5ff8) [23:19:41] 5fa0: 00000000 00000000 0000= 0000 00000000 [23:19:41] 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 0000= 0000 00000000 [23:19:41] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 [23:19:41] ---[ end trace 0000000000000000 ]--- [23:19:41] [FAILED] drm_test_buddy_alloc_exceeds_max_order [23:19:41] # drm_buddy: Testing DRM buddy manager, with random_seed=3D0= xacce106c [23:19:41] # module: drm_buddy_test [23:19:41] # drm_buddy: pass:8 fail:1 skip:0 total:9 --- drivers/gpu/drm/drm_buddy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c index dbf984f8e301..8f23fb615d47 100644 --- a/drivers/gpu/drm/drm_buddy.c +++ b/drivers/gpu/drm/drm_buddy.c @@ -919,7 +919,7 @@ static int __alloc_contig_try_harder(struct drm_buddy *= mm, u64 modify_size; int err; =20 - modify_size =3D rounddown_pow_of_two(size); + modify_size =3D 1ULL << ilog2(size); pages =3D modify_size >> ilog2(mm->chunk_size); order =3D fls(pages) - 1; if (order =3D=3D 0) @@ -1140,7 +1140,7 @@ int drm_buddy_alloc_blocks(struct drm_buddy *mm, =20 /* Roundup the size to power of 2 */ if (flags & DRM_BUDDY_CONTIGUOUS_ALLOCATION) { - size =3D roundup_pow_of_two(size); + size =3D 1ULL << (ilog2(size - 1) + 1); min_block_size =3D size; /* Align size value to min_block_size */ } else if (!IS_ALIGNED(size, min_block_size)) { --=20 2.53.0