From nobody Tue Dec 2 01:06:34 2025 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (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 67F3B274659 for ; Sun, 23 Nov 2025 06:31:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763879474; cv=none; b=mInYYI74V/hQ2ZwWGURnByzrgSgvuona31NkI4a6itsI2/0aY63oXggZQaBl9mro0PDDSXp0AbbCtXnPHZ/naUeVfPFSkM5seavz9MiKl0qnx4cUyboQiL88+LIZ/88ozsdoe5KWpDjsKVV86VM5qObSljvHQu5YdDuU0dOzeJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763879474; c=relaxed/simple; bh=6rRt9gp4BCv6QzkYYBFmv0E649ITm/lmKmfvlOY7ZYA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rCyDhOrSa5zH5czy3uMlr+XSRsbtBtGYydMH6SHJlGLpF0euqVGtBvBh0wa+LPzDqOpV4m897LrAftNMGriA+EH+34M2qQtQRCw/B6GFjC2AVnwQGi6HwYB8BIDXQ8axBu/3Q/Dr4FXkDWH0nuBdst2XEzPaiCqllVhsSTkPAcs= 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=HAURN2D4; arc=none smtp.client-ip=209.85.208.54 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="HAURN2D4" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-640bd9039fbso5473560a12.2 for ; Sat, 22 Nov 2025 22:31:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763879469; x=1764484269; 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=xOD2aQKV3axDn07/bVdfc1LsSZxl6BJ8A2aT5B+TqvY=; b=HAURN2D4HiYOaU5WpJRTSy3OkpG8wuWfaXvwg8u8XYPEhUXzLK+WxbKfztG3xURn/4 pScRTiHDx0TyXYPW8fRgCSB12lQdmV52n9gnNAQh6BvKyzsDrDa7qXLRiOno2mPPRBP+ VfCX4Z9zOAPL4rDIKTFJ/XPL1VBxPK8CJWukgg/U+AtGcmhYNkatyS5oxHiAFIxmJWQ4 eNUSzoCTmfjGu0WGLypwrcnikq/KnkTXfgiT2OtjtU+h48+yRTndVoEGnZLH9jpTOFw8 gkQ+h7NXvPwircMPzjIcIWXuaPl7laY4oAN6OMg6RkWZ7IgTZDNhJ7Qx1XFB0NtHUZtn qvhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763879469; x=1764484269; 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=xOD2aQKV3axDn07/bVdfc1LsSZxl6BJ8A2aT5B+TqvY=; b=rjFZ+DC0bePmky/1i30J2Atmj+nQnvfdMZ3cEbWTkqqQ6Er/AI4oeBUp3YCqgl+TNC RusvkjG/sWHMdqDke41I97x8x0/IxqlBQ2rbVHwXlYFNIZxpyZa8DxQLonsutlFydOCY 4KECka7RpTmLnXUC9Qndg9w6ZDnka7ATh9LRY0kCJc4h+6XAUbNnc533Ku2BltUcqf8W Zmr1Ahk+cYBSw5MbsEX3pHlo0qg5MB87wWx5VzHKeGGTEkqV5E1bdZ+K05iNntZ0E1CP JdRzKO8HtFsGriRqvdNZ77CxVhOC1gMEQZf1Mlkr6Iofmnq11f/m/L/GhyGFA+8zGD2S OQgA== X-Forwarded-Encrypted: i=1; AJvYcCUbN+kzhggWPQawMXK9DRNjeos5YXSdSHV7oHFKI3x5ORk4gcCdxDZpMisdZMZxAVLwjktf5wpWgZ7wGAk=@vger.kernel.org X-Gm-Message-State: AOJu0YzedO1oU8bwCgWUlJvNy6JygJKVf/X9TES1ZAljkkYo8n1706jP lq7GMz3qCddQkCcUcrbTS52G4L5wYN59GfZms7R64kujSvyzzssAulI3J7a4uA== X-Gm-Gg: ASbGncvKo+D5XEaV57k2XTADijy/cYubaID/w+GOWRjUKu3nFA+Ap5WnmXJv8Z3eHcA +Y00sLZ7f5hEo+e9cwyJPJ7877x43bbdZNWJk09ssawoyotXaOtaa8J3OSzjxRGFMH27wRJaq6j 1q8vedC3M7AQBhEp9xUejuw+RKjqsEOQFDYskfMJwZlsBce7n036Y8Ff/NYxMmzfTCfF42SPIt1 GeBfMSvezg6rDRW58CrpGnZHgB408getS6F89pezLx0saFv5lxf944i1Xvinr4sgU4zWrA3wx9m mpWCKj/QSgl45A9RqBeWiDz3fZL7Ep5pZ+9uo5/8wxImMFEGpRp6+24dJQrzmVNxH863/Z/s8hj AEfkR1+djxcj65vCK2qs0FitNg0OvdvOdXEhElZhsOsrJNQ+i6NNqf9I5P5YgBTvc6Fp0Sx0dCO VXS6cOdUxemq0BtmzifTRUK9HNaA1IpoSAN0nHjPjnoaxiAhEJZPzqLwzNuuo= X-Google-Smtp-Source: AGHT+IE187VL3hUExsJspXYDW4wFYmYGutUdJGgD2n+2o5I+ckya4M5kz9tDUBfZuQeW/8hgUO5zZg== X-Received: by 2002:a17:906:181b:b0:b76:7fe7:ff37 with SMTP id a640c23a62f3a-b767fe8084emr434076066b.18.1763879468635; Sat, 22 Nov 2025 22:31:08 -0800 (PST) Received: from f.. (cst-prg-14-82.cust.vodafone.cz. [46.135.14.82]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b7654cf0435sm929432866b.4.2025.11.22.22.31.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Nov 2025 22:31:08 -0800 (PST) From: Mateusz Guzik To: oleg@redhat.com Cc: brauner@kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, linux-mm@kvack.org, Mateusz Guzik Subject: [PATCH 1/3] idr: add idr_prealloc_many Date: Sun, 23 Nov 2025 07:30:52 +0100 Message-ID: <20251123063054.3502938-2-mjguzik@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251123063054.3502938-1-mjguzik@gmail.com> References: <20251123063054.3502938-1-mjguzik@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" Signed-off-by: Mateusz Guzik --- include/linux/idr.h | 1 + lib/radix-tree.c | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/include/linux/idr.h b/include/linux/idr.h index 789e23e67444..c9aeae695442 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h @@ -110,6 +110,7 @@ static inline void idr_set_cursor(struct idr *idr, unsi= gned int val) #define idr_unlock_irqrestore(idr, flags) \ xa_unlock_irqrestore(&(idr)->idr_rt, flags) =20 +void idr_preload_many(int nr, gfp_t gfp_mask); void idr_preload(gfp_t gfp_mask); =20 int idr_alloc(struct idr *, void *ptr, int start, int end, gfp_t); diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 976b9bd02a1b..2e71024e5323 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -1459,6 +1459,22 @@ int radix_tree_tagged(const struct radix_tree_root *= root, unsigned int tag) } EXPORT_SYMBOL(radix_tree_tagged); =20 +/** + * idr_preload_many - preload for idr_alloc() + * @gfp_mask: allocation mask to use for preloading + * @nr: how many calls to preload for + * + * Preallocate memory to use for n calls to idr_alloc(). This function + * returns with preemption disabled. It will be enabled by idr_preload_en= d(). + */ +void idr_preload_many(int nr, gfp_t gfp_mask) +{ + WARN_ON_ONCE(!nr); + if (__radix_tree_preload(gfp_mask, nr * IDR_PRELOAD_SIZE)) + local_lock(&radix_tree_preloads.lock); +} +EXPORT_SYMBOL(idr_preload_many); + /** * idr_preload - preload for idr_alloc() * @gfp_mask: allocation mask to use for preloading @@ -1468,8 +1484,7 @@ EXPORT_SYMBOL(radix_tree_tagged); */ void idr_preload(gfp_t gfp_mask) { - if (__radix_tree_preload(gfp_mask, IDR_PRELOAD_SIZE)) - local_lock(&radix_tree_preloads.lock); + idr_preload_many(1, gfp_mask); } EXPORT_SYMBOL(idr_preload); =20 --=20 2.48.1