From patchwork Tue Jun 18 01:04:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos Llamas X-Patchwork-Id: 1948924 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=KbjXSnYz; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; 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 [8.43.85.97]) (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 4W37pZ097Vz20KL for ; Tue, 18 Jun 2024 11:05:26 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 55FF73882101 for ; Tue, 18 Jun 2024 01:05:24 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by sourceware.org (Postfix) with ESMTPS id 1DE4E3882108 for ; Tue, 18 Jun 2024 01:05:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1DE4E3882108 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 1DE4E3882108 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::1149 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718672706; cv=none; b=gUASNE1MMx50qRloDmwNyScpTNAxqK+DzhGm+rPYdn8vY6EGkaqv7Ph/tTrEHvj1gEhlVFN1C+8Ym1CF2VYMY7Hlqfj34uIUr2TH/jzJAbE6kNJ+DWzgp3IUoiw2NROMCaoNxZjV3iofnAj2+L50f7EWXDyq3GkziuxU451BeS8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718672706; c=relaxed/simple; bh=pkVLrBATzDASOkrefEKyM/AIYXr2+XjXMKtB2irVu8E=; h=DKIM-Signature:Date:Mime-Version:Message-ID:Subject:From:To; b=wE3BwM39pcUsat+aj3Y6ZHm1F0mUAYszPkkQRmlXsu9ax2GH72EgJOfGM2b+W1i8m+KREVP9bT5l2kWq2Io2S67xCurCZcbKCJ8k3mWNb23XBuaiGysJCV3QrPkzV0U7PyWp7ScOIj2pOl8fTQxWIcwXlASlxvP9wdHhz3xd9F8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-6338f71a577so57499717b3.1 for ; Mon, 17 Jun 2024 18:05:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1718672700; x=1719277500; darn=sourceware.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=IoZjvqPEzH5v6PuaTam+qi5AvpvWeYNZ1Dr3CKAZjqM=; b=KbjXSnYz/PDAahSekKV0Z8OLGRB0YmWKr1+qz3zqZsGAN6BrCSVEYwg8r+phHbGPAt e4wT9oP7xOJxz6ZkW/x5y06aUthSa5KFby0bINRT4ysGtTGqCda5RJOI8+b37R1jMn6I M8jJJCZQT8grnABoOcVxuvB/0LC1C+6TvYnsHRiBpJLWSyYdxhILHjF5G/bt+doyKZZB jTaHVAlRIimvhccSVZs1lFTQOEzzr3SNdz2OY0fVFkttV8Cl5RUxlpZBF/W9kBcw2l16 ClUcghp5yeB2FW7z10kkm6nhk/Nmb19PsWAYa+lUrspf/xrJiJS7jEbdj8gOIoz8jnFw TX4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718672700; x=1719277500; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=IoZjvqPEzH5v6PuaTam+qi5AvpvWeYNZ1Dr3CKAZjqM=; b=ZwB+8N+2VG1Va12JpOIsyuNiHN69kI0k2GM9PPBo/Fn6QEzoMqS69iyTnzGC0QOHYF DGzNp3QCtpLQgKWzYgxyoR2HH+gSx8ezBZAYmxFwpipCHXX8WouFrfh8ClmAQKHAwLOA fdk6Pyk0NgNMiKFJI5Fup8Fpot8cLXdd9MOsXwW8EwlzWzA5Vd3U42HKUoVAPZQbxjjr 40J8LO2oi4LND/aqfqVEpuNIn2AC2GkJCXuo51W2kl+EAW1XdVHQJWf+NAnPG7kKeAja VSAVzoY9wPzkkztNONNaX3omr6wO6w+r9otIhFleK4VZSBLoHLVEVpU8m0Yqs3OJzdBL TPFg== X-Gm-Message-State: AOJu0YyqxnCdGB/xBROSWWtL4bBJ4TmyW/hf4GNq3tgpmbhwejvpbTTa 3Z+xWHuTfh2XbWqVtXhM28xzp5aaHHcWwkR50DI0uw+61f18kQXavXMjxJDgz+06B8QObHUsa+N 7ziJSTsh/eW/ysw6W1+FRNGJxmSIhpqqOv7Q9Ur3ZI4B1YyeRjGZLEgXRCnZCS6aBhMrZNvjS8u 6KDTM6tsvCwFx0aYELIlIb8V8r34ctC+0avYUcIlkLkNftg1Q= X-Google-Smtp-Source: AGHT+IFl/sfEQtj2x07U8sUrAwbBlPFtpNJwAsKrl/dzEomY0MwN0ag9++6T/SXQH9GSPMdQFQJ9vIKFgT0EXA== X-Received: from xllamas.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5070]) (user=cmllamas job=sendgmr) by 2002:a05:690c:6404:b0:627:de8e:736d with SMTP id 00721157ae682-6322480eb3fmr29748617b3.6.1718672700294; Mon, 17 Jun 2024 18:05:00 -0700 (PDT) Date: Tue, 18 Jun 2024 01:04:55 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.45.2.627.g7a2c4fd464-goog Message-ID: <20240618010455.2669973-1-cmllamas@google.com> Subject: [PATCH v2] 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=-20.1 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. Additionally, the filter on these definitions in tst-mman-consts.py is removed, as suggested by Florian. I then ran this tests successfully, confirming the alignment with the kernel headers. PASS: misc/tst-mman-consts original exit status 0 Signed-off-by: Carlos Llamas Tested-by: Florian Weimer Reviewed-by: Florian Weimer --- Notes: v2: Remove MAP_HUGE_* filter in tst-mman-consts, suggested by Florian. sysdeps/unix/sysv/linux/bits/mman-linux.h | 21 ++++++++++++++++++++- sysdeps/unix/sysv/linux/bits/shm.h | 22 ++++++++++++++++++++++ sysdeps/unix/sysv/linux/tst-mman-consts.py | 8 +++----- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h index 5c3d43b0f2..522333c50a 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..76144f5ad4 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; diff --git a/sysdeps/unix/sysv/linux/tst-mman-consts.py b/sysdeps/unix/sysv/linux/tst-mman-consts.py index 4a8f4e8919..441261c945 100644 --- a/sysdeps/unix/sysv/linux/tst-mman-consts.py +++ b/sysdeps/unix/sysv/linux/tst-mman-consts.py @@ -41,8 +41,7 @@ def main(): '#include \n', args.cc, 'MAP_.*', - # A series of MAP_HUGE_ macros are defined by the kernel - # but not by glibc. MAP_UNINITIALIZED is kernel-only. + # MAP_UNINITIALIZED is defined by the kernel but not by glibc. # MAP_FAILED is not a MAP_* flag and is glibc-only, as is the # MAP_ANON alias for MAP_ANONYMOUS. MAP_RENAME, MAP_AUTOGROW, # MAP_LOCAL and MAP_AUTORSRV are in the kernel header for @@ -50,9 +49,8 @@ def main(): # in the kernel header, but does not use it. The kernel # header for HPPA removed a define of MAP_VARIABLE to 0 in # Linux 6.2. - 'MAP_HUGE_[0-9].*|MAP_UNINITIALIZED|MAP_FAILED|MAP_ANON' - '|MAP_RENAME|MAP_AUTOGROW|MAP_LOCAL|MAP_AUTORSRV|MAP_INHERIT' - '|MAP_VARIABLE', + 'MAP_UNINITIALIZED|MAP_FAILED|MAP_ANON|MAP_RENAME|MAP_AUTOGROW' + '|MAP_LOCAL|MAP_AUTORSRV|MAP_INHERIT|MAP_VARIABLE', linux_version_glibc > linux_version_headers, linux_version_headers > linux_version_glibc))