From patchwork Fri Jun 14 17:59:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos Llamas X-Patchwork-Id: 1948106 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20230601 header.b=4tfJ2n62; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4W16WL6y9Pz20X9 for ; Sat, 15 Jun 2024 04:00:14 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 41CDA3882161 for ; Fri, 14 Jun 2024 18:00:13 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by sourceware.org (Postfix) with ESMTPS id 4842B3882165 for ; Fri, 14 Jun 2024 17:59:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4842B3882165 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=flex--cmllamas.bounces.google.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4842B3882165 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::104a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718387993; cv=none; b=VZh1xkxDAFbwBJLkv/E0Lv4agL8y0PErJjnKvisvqkshykkVoMkdRwoXT/EDnGNZtMXXq2hsUjd+8ONFrgn0A7AyibJrBPOSQJ4lXDzU39QL9iLlYfnjO70RHy9w9DTsvvZQ4oABYrH91o1BzDrOqna92NtHrTgATH8rp/qHTg4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718387993; c=relaxed/simple; bh=Ok2UwktNqpdFmxLvKz+xtD1dFIDSjj3wiPCHoE7sH6U=; h=DKIM-Signature:Date:Mime-Version:Message-ID:Subject:From:To; b=irXZsU02iYkVmnpcmd2PS6DYTkzoLdoMQDbl07aaESXXfJrOy6WmzGyqZMB90fw/qTMCHnk41EnXSSR7GWq0KCK2HZVrraxyBjokuS2VfJWhjWEFN9zkiMNuMuaSay5mhM9TqFrJEamh3lvOsMiWgRW6BhmFg8LitC8VClFbRfk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pj1-x104a.google.com with SMTP id 98e67ed59e1d1-2c2db3eec8eso2281158a91.3 for ; Fri, 14 Jun 2024 10:59:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718387990; x=1718992790; darn=sourceware.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=ICb6TD8rcmmAsdRbUOFvHL8DcneyUHZQ0YhK98SK8qg=; b=4tfJ2n62eMk8KvA+/JQN8AeYf6tnV1symxLr7Xtp8Q/Vdb6HG/vuvATbENzgtp2dO6 mT4NBiqYMZxpiaVWPET54qwFGxaRF+gQtGEZek5r+qrdRiBi+cpgb7JIoku8mKwUWp5U s3xJnc0SHKdclITWfi5h9BgJuvbQ5PCuNnBreJCRLWF88JbxuS5wm9/9bu7tkBbIFwTq AwUCXTBQwymfzAFbvdYC3ejynSvBFXIbASo9XHeu2EssC0vTZjkJ0jCJvb0hdHHaSdNt bs0+M2xnGCAGRe65D1kbx0hCv1uVCcELQhMd051DgNFi2n77Vi2iBPwMoyxRjVyhr0uB 6uOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718387990; x=1718992790; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ICb6TD8rcmmAsdRbUOFvHL8DcneyUHZQ0YhK98SK8qg=; b=lgkV4n/IvRxX/hsMb+kaXEO/03G/kZgvy87kGX05H99jchibQp2W+0ByX+Ejs4UAjz VUtLafcI6MCFJu/tOiWPtfKXAFXLPmhzAAbgnXZfo4yZFp9Zegi3ZfkLEfmAWl7uEWmJ JfJCiHzWRJTQ2le3XmuoVLyxherCNpzJTNiCPSvIinZ2XJCeOgZIaQCSdWPYNuyCCr0O +YJ+M6x6/0znkPodlJg0AnlgR5kHXj7WOnGF4XSTia8lAqorlHBymVPAFNL7zR7nN5SD GsMnsiiwBOt9vChfs8EqDmnTbPh2yYrrm8cnjzqb0npaH+6pe4BeQW0hiNozRAIRhBSX nbPg== X-Gm-Message-State: AOJu0YzndbvFqpA7pM3bmvV+vUiJqhEoLpTWFx6HYZQdEUluC7nyO0Ky f9CkyMklEs2V7ffEjVeMsmKKM25tJZA0957hKTrI9FQZm1lINMq6wlfNK+eD6jLLwyl7wzI9doW G1sx3F3p83EhfNpfOJyvUhHQw+xOwLfvblMJepQ+D7+prEE5VerUVPlMT2nTjaoAEEtHzSfEQfd 11ZJbHAvT8DFaZeAeOd8sk7uUvgOZK2VBM4pGyOYH59S3Nbds= X-Google-Smtp-Source: AGHT+IFIahDdSiRxVCoIXZArDXFIFPKqqD6JV5S2HG8rl5pv7Z0FYydXpNIIm2IqFmRG5X6rVdIH6i7yohiupQ== X-Received: from xllamas.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5070]) (user=cmllamas job=sendgmr) by 2002:a17:90b:3656:b0:2a7:4bb8:b24e with SMTP id 98e67ed59e1d1-2c4db128f73mr130625a91.1.1718387989959; Fri, 14 Jun 2024 10:59:49 -0700 (PDT) Date: Fri, 14 Jun 2024 17:59:46 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.45.2.627.g7a2c4fd464-goog Message-ID: <20240614175946.1369390-1-cmllamas@google.com> Subject: [RFC PATCH] linux: add definitions for hugetlb page size encodings From: Carlos Llamas To: libc-alpha@sourceware.org Cc: Andi Kleen , "Carlos O'Donell" , Florian Weimer , Carlos Llamas X-Spam-Status: No, score=-21.4 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org A desired hugetlb page size can be encoded in the flags parameter of system calls such as mmap() and shmget(). The Linux UAPI headers have included explicit definitions for these encodings since v4.14. This patch adds these definitions that are used along with MAP_HUGETLB and SHM_HUGETLB flags as specified in the corresponding man pages. This relieves programs from having to duplicate and/or compute the encodings manually. Signed-off-by: Carlos Llamas --- sysdeps/unix/sysv/linux/bits/mman-linux.h | 21 ++++++++++++++++++++- sysdeps/unix/sysv/linux/bits/shm.h | 22 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h index 5c3d43b0f2..cb99f609d0 100644 --- a/sysdeps/unix/sysv/linux/bits/mman-linux.h +++ b/sysdeps/unix/sysv/linux/bits/mman-linux.h @@ -54,10 +54,29 @@ # define MAP_ANONYMOUS 0x20 /* Don't use a file. */ #endif #define MAP_ANON MAP_ANONYMOUS -/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. */ + +/* When MAP_HUGETLB is set, bits [26:31] encode the log2 of the huge page size. + The following definitions are associated with this huge page size encoding. + It is responsibility of the application to know which sizes are supported on + the running system. See mmap(2) man page for details. */ + #define MAP_HUGE_SHIFT 26 #define MAP_HUGE_MASK 0x3f +#define MAP_HUGE_16KB (14 << MAP_HUGE_SHIFT) +#define MAP_HUGE_64KB (16 << MAP_HUGE_SHIFT) +#define MAP_HUGE_512KB (19 << MAP_HUGE_SHIFT) +#define MAP_HUGE_1MB (20 << MAP_HUGE_SHIFT) +#define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT) +#define MAP_HUGE_8MB (23 << MAP_HUGE_SHIFT) +#define MAP_HUGE_16MB (24 << MAP_HUGE_SHIFT) +#define MAP_HUGE_32MB (25 << MAP_HUGE_SHIFT) +#define MAP_HUGE_256MB (28 << MAP_HUGE_SHIFT) +#define MAP_HUGE_512MB (29 << MAP_HUGE_SHIFT) +#define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT) +#define MAP_HUGE_2GB (31 << MAP_HUGE_SHIFT) +#define MAP_HUGE_16GB (34U << MAP_HUGE_SHIFT) + /* Flags to `msync'. */ #define MS_ASYNC 1 /* Sync memory asynchronously. */ #define MS_SYNC 4 /* Synchronous memory sync. */ diff --git a/sysdeps/unix/sysv/linux/bits/shm.h b/sysdeps/unix/sysv/linux/bits/shm.h index 95f7863913..16f3285467 100644 --- a/sysdeps/unix/sysv/linux/bits/shm.h +++ b/sysdeps/unix/sysv/linux/bits/shm.h @@ -58,6 +58,28 @@ typedef __syscall_ulong_t shmatt_t; # define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ # define SHM_NORESERVE 010000 /* don't check for reservations */ +/* When SHM_HUGETLB is set, bits [26:31] encode the log2 of the huge page size. + The following definitions are associated with this huge page size encoding. + It is responsibility of the application to know which sizes are supported on + the running system. See shmget(2) man page for details. */ + +#define SHM_HUGE_SHIFT 26 +#define SHM_HUGE_MASK 0x3f + +#define SHM_HUGE_16KB (14 << SHM_HUGE_SHIFT) +#define SHM_HUGE_64KB (16 << SHM_HUGE_SHIFT) +#define SHM_HUGE_512KB (19 << SHM_HUGE_SHIFT) +#define SHM_HUGE_1MB (20 << SHM_HUGE_SHIFT) +#define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT) +#define SHM_HUGE_8MB (23 << SHM_HUGE_SHIFT) +#define SHM_HUGE_16MB (24 << SHM_HUGE_SHIFT) +#define SHM_HUGE_32MB (25 << SHM_HUGE_SHIFT) +#define SHM_HUGE_256MB (28 << SHM_HUGE_SHIFT) +#define SHM_HUGE_512MB (29 << SHM_HUGE_SHIFT) +#define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT) +#define SHM_HUGE_2GB (31 << SHM_HUGE_SHIFT) +#define SHM_HUGE_16GB (34U << SHM_HUGE_SHIFT) + struct shminfo { __syscall_ulong_t shmmax;