{"id":2220082,"url":"http://patchwork.ozlabs.org/api/patches/2220082/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/fcc9eb99566af8f37e63924a77dc633c5f200417.1775466330.git.sayalip@linux.ibm.com/","project":{"id":2,"url":"http://patchwork.ozlabs.org/api/projects/2/?format=json","name":"Linux PPC development","link_name":"linuxppc-dev","list_id":"linuxppc-dev.lists.ozlabs.org","list_email":"linuxppc-dev@lists.ozlabs.org","web_url":"https://github.com/linuxppc/wiki/wiki","scm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git","webscm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/","list_archive_url":"https://lore.kernel.org/linuxppc-dev/","list_archive_url_format":"https://lore.kernel.org/linuxppc-dev/{}/","commit_url_format":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"},"msgid":"<fcc9eb99566af8f37e63924a77dc633c5f200417.1775466330.git.sayalip@linux.ibm.com>","list_archive_url":"https://lore.kernel.org/linuxppc-dev/fcc9eb99566af8f37e63924a77dc633c5f200417.1775466330.git.sayalip@linux.ibm.com/","date":"2026-04-06T09:19:34","name":"[v4,15/15] selftests/cgroup: extend test_hugetlb_memcg.c to support all huge page sizes","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"5405d2a96f8066402d7d04f544d1e75b9b49f40b","submitter":{"id":92656,"url":"http://patchwork.ozlabs.org/api/people/92656/?format=json","name":"Sayali Patil","email":"sayalip@linux.ibm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/fcc9eb99566af8f37e63924a77dc633c5f200417.1775466330.git.sayalip@linux.ibm.com/mbox/","series":[{"id":498833,"url":"http://patchwork.ozlabs.org/api/series/498833/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=498833","date":"2026-04-06T09:19:22","name":"selftests/mm: fix failures and robustness improvements","version":4,"mbox":"http://patchwork.ozlabs.org/series/498833/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2220082/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2220082/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linuxppc-dev+bounces-19397-incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=HCyNBrsG;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-19397-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=148.163.156.1","lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=linux.ibm.com","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=HCyNBrsG;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com\n (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com;\n envelope-from=sayalip@linux.ibm.com; receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fq3jm1Q19z1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 06 Apr 2026 19:21:32 +1000 (AEST)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fq3j6688Hz306l;\n\tMon, 06 Apr 2026 19:20:58 +1000 (AEST)","from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com\n [148.163.156.1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4fq3j575Z5z2yhP\n\tfor <linuxppc-dev@lists.ozlabs.org>; Mon, 06 Apr 2026 19:20:57 +1000 (AEST)","from pps.filterd (m0353729.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 635GnGdO3110257;\n\tMon, 6 Apr 2026 09:20:45 GMT","from ppma22.wdc07v.mail.ibm.com\n (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92])\n\tby mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4datap5vrc-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n\tMon, 06 Apr 2026 09:20:44 +0000 (GMT)","from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1])\n\tby ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id\n 6364i7Mf021117;\n\tMon, 6 Apr 2026 09:20:43 GMT","from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226])\n\tby ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4dbdbyc5jd-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n\tMon, 06 Apr 2026 09:20:43 +0000","from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com\n [10.20.54.101])\n\tby smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 6369Kd6a51446198\n\t(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n\tMon, 6 Apr 2026 09:20:39 GMT","from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id EC7E920043;\n\tMon,  6 Apr 2026 09:20:38 +0000 (GMT)","from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 3A56520040;\n\tMon,  6 Apr 2026 09:20:35 +0000 (GMT)","from li-3f69264c-2ce6-11b2-a85c-c3f414d24014.bl1-in.ibm.com (unknown\n [9.123.3.209])\n\tby smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP;\n\tMon,  6 Apr 2026 09:20:34 +0000 (GMT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1775467258;\n\tcv=none;\n b=SAMHoBE0yOjNU+heI4jI/ptHDTou3PQalOgPc12p2pPq+KX4WfZR+uwksLYBBJfmqC0sdRHD4zWOZNqfqqG9BOdn+uLja+4q9Py1RlDgKVDaRZ8cRjRe5ik3vBa5Y2an3BwpMPp262t5XDWLFvDOa7VIsEq0/R2OPRwKxvJpg85S4c/bxLrQ/GJRdtkNfgVMWlSPgqzvIoHj3TUpqemveGx21PLausIESQiTg81VFlVrCeXVcNTVYQnnB6Gl42SuUjbjxn8bfVIS5JDn0TBOXGQRbj/sKTPiCjZTBWh81peCCP0KiyN4gSw5g3+8vCx8Cj7TYfFN36iBR6GhRu4qjw==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1775467258; c=relaxed/relaxed;\n\tbh=hR9AvsESc0VB0jLe+QQG3Q1Tfmm/xPeUm+bAL5UGGaM=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=bIVI3oo9C3OGDMZCuv98aVccsbXoF9NEUmxtE1fJ7FQ36sMHqQIKOyHfTjt/fhoDRUPfQ0egW2YghETlCzd9Y3OaQgyYtBecj4Te8FS+sYq4TphOabtcyKV84aSrQ7ChXrGyVkiG+9XkFQnrM0rainNgo/TNs/Becg5uWQ+blfeMTGWs4YhvOLOFVAWo7vn+Qg9hfP/Mrg9k9tbxlgkVlorczIiw3AMsnoiJq+igpiREhPbwykz4FHImpsgjmzlE+URmTBh/dJ+D7oFzSU0ujEop4RzDTOMCS6da/s/xcbAxTrFmqys/VltCar1swI4nd6SbdykWkQj62AztV4nkog==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=linux.ibm.com;\n dkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=HCyNBrsG; dkim-atps=neutral;\n spf=pass (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com;\n envelope-from=sayalip@linux.ibm.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc\n\t:content-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=pp1; bh=hR9Avs\n\tESc0VB0jLe+QQG3Q1Tfmm/xPeUm+bAL5UGGaM=; b=HCyNBrsGgoDyc9Z7Kd9xLT\n\tffrSA3KEavgwn0qfI6gwSvKJsuAdrOmLwp9ilyKiL4WC4vAsRdXr/zZTfICU1xEN\n\tQzGbkrA9DW+Utvyq4FCoHc6BeBqyk+LCge8iFRaZLWO4WpJFiIylXepXJM53TSZI\n\t0zaiRekDsuymj+DIxSyFqOYhGviW/KGKFsiBGA3YcsDpuibyiXs+GkLNYf1V7zZm\n\tvTB9z3uHNQAhtc0hhigJQ6LD6/MmZnVLFxJGlXnMi5cnpeCcbSyZvD4cViuEpPJJ\n\tE30BV8eufjiLvCEpIkBc+yORAC9W150PQYlgZI3+lGvI7ZaqQEt682byis6Uwygw\n\t==","From":"Sayali Patil <sayalip@linux.ibm.com>","To":"Andrew Morton <akpm@linux-foundation.org>, Shuah Khan <shuah@kernel.org>,\n        linux-mm@kvack.org, linux-kernel@vger.kernel.org,\n        linux-kselftest@vger.kernel.org,\n        Ritesh Harjani <ritesh.list@gmail.com>","Cc":"David Hildenbrand <david@kernel.org>, Zi Yan <ziy@nvidia.com>,\n        Michal Hocko <mhocko@kernel.org>, Oscar Salvador <osalvador@suse.de>,\n        Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,\n        Dev Jain <dev.jain@arm.com>, Liam.Howlett@oracle.com,\n        linuxppc-dev@lists.ozlabs.org, Miaohe Lin <linmiaohe@huawei.com>,\n        Venkat Rao Bagalkote <venkat88@linux.ibm.com>,\n        Sayali Patil <sayalip@linux.ibm.com>","Subject":"[PATCH v4 15/15] selftests/cgroup: extend test_hugetlb_memcg.c to\n support all huge page sizes","Date":"Mon,  6 Apr 2026 14:49:34 +0530","Message-ID":"\n <fcc9eb99566af8f37e63924a77dc633c5f200417.1775466330.git.sayalip@linux.ibm.com>","X-Mailer":"git-send-email 2.52.0","In-Reply-To":"<cover.1775466329.git.sayalip@linux.ibm.com>","References":"<cover.1775466329.git.sayalip@linux.ibm.com>","X-Mailing-List":"linuxppc-dev@lists.ozlabs.org","List-Id":"<linuxppc-dev.lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev+help@lists.ozlabs.org>","List-Owner":"<mailto:linuxppc-dev+owner@lists.ozlabs.org>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Archive":"<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Subscribe":"<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>","List-Unsubscribe":"<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>","Precedence":"list","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","X-TM-AS-GCONF":"00","X-Proofpoint-Reinject":"loops=2 maxloops=12","X-Authority-Analysis":"v=2.4 cv=Bp+QAIX5 c=1 sm=1 tr=0 ts=69d37aec cx=c_pps\n a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17\n a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8\n a=4tZCw_sC0xjTHO7m73IA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDA2MDA5MCBTYWx0ZWRfX5n0Or/YQTGbD\n zXROJzFv7cLnirHO9BgQRuNEPQr+ZEVKCUhyxfdr3hxWBvM+7OLz8myBm2C7Z7B3zUT6MBslmAf\n AeBNQUtaXcQV+vBnj17KLPuQ2WDiEz0YZTpkZ6pKjYKxV5xz4oHmBU0fTFPOADbWuCEEazlLu7B\n biHajIZRQsJuqBbpt0h3v6UnI/zY2PYOi55yanRYBPyUDR8ToKc4HPmF25rIdQC1Ik+eNbssUV0\n Gl9+XMJsQx9wjZS/h+232McNGZ1gcI7clYMqH9Rav6y69rhHLMDuea2g7BdjVbwYjRa262KMrDa\n gOajp5FgX7CMdet1sEEaSs+XMJJlGDMd83IPNNBLdfZvnZLknWjpET6qdoQNK45+IAoSOAb3w+g\n uRsXNs6xF+EBOKbL+K5qBiYXSsiyp23/kFkQw7uovc7esvIWc82ndcaYzyKTr+t3I0o5G5AL7A0\n 8Kg8KQzjRVWmnmTBj2A==","X-Proofpoint-GUID":"UQqDuCzvxJXuNF9VCUai46TOluqGlLmY","X-Proofpoint-ORIG-GUID":"70yvyT2i2bR0oABye0WkT-5h7pHBZuNW","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-06_02,2026-04-03_01,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n phishscore=0 malwarescore=0 suspectscore=0 adultscore=0 impostorscore=0\n spamscore=0 priorityscore=1501 lowpriorityscore=0 bulkscore=0 clxscore=1015\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604060090","X-Spam-Status":"No, score=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID,\n\tRCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,\n\tSPF_PASS autolearn=disabled version=4.0.1 OzLabs 8","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"},"content":"The hugetlb memcg selftest was previously skipped when the configured\nhuge page size was not 2MB, preventing the test from running on systems\nusing other default huge page sizes.\n\nDetect the system's configured huge page size at runtime and use it for\nthe allocation instead of assuming a fixed 2MB size. This allows the\ntest to run on configurations using non-2MB huge pages and avoids\nunnecessary skips.\n\nFixes: c0dddb7aa5f8 (\"selftests: add a selftest to verify hugetlb usage in memcg\")\nSigned-off-by: Sayali Patil <sayalip@linux.ibm.com>\n---\n .../selftests/cgroup/test_hugetlb_memcg.c     | 90 ++++++++++++++-----\n 1 file changed, 68 insertions(+), 22 deletions(-)","diff":"diff --git a/tools/testing/selftests/cgroup/test_hugetlb_memcg.c b/tools/testing/selftests/cgroup/test_hugetlb_memcg.c\nindex f451aa449be6..e6157a784138 100644\n--- a/tools/testing/selftests/cgroup/test_hugetlb_memcg.c\n+++ b/tools/testing/selftests/cgroup/test_hugetlb_memcg.c\n@@ -7,15 +7,21 @@\n #include <stdlib.h>\n #include <string.h>\n #include <fcntl.h>\n+#include <stdint.h>\n #include \"kselftest.h\"\n #include \"cgroup_util.h\"\n \n #define ADDR ((void *)(0x0UL))\n #define FLAGS (MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB)\n-/* mapping 8 MBs == 4 hugepages */\n-#define LENGTH (8UL*1024*1024)\n #define PROTECTION (PROT_READ | PROT_WRITE)\n \n+/*\n+ * This value matches the kernel's MEMCG_CHARGE_BATCH definition:\n+ * see include/linux/memcontrol.h. If the kernel value changes, this\n+ * test constant must be updated accordingly to stay consistent.\n+ */\n+#define MEMCG_CHARGE_BATCH 64U\n+\n /* borrowed from mm/hmm-tests.c */\n static long get_hugepage_size(void)\n {\n@@ -84,11 +90,11 @@ static unsigned int check_first(char *addr)\n \treturn *(unsigned int *)addr;\n }\n \n-static void write_data(char *addr)\n+static void write_data(char *addr, size_t length)\n {\n \tunsigned long i;\n \n-\tfor (i = 0; i < LENGTH; i++)\n+\tfor (i = 0; i < length; i++)\n \t\t*(addr + i) = (char)i;\n }\n \n@@ -96,26 +102,33 @@ static int hugetlb_test_program(const char *cgroup, void *arg)\n {\n \tchar *test_group = (char *)arg;\n \tvoid *addr;\n+\tlong hpage_size, batch_bytes;\n \tlong old_current, expected_current, current;\n \tint ret = EXIT_FAILURE;\n+\tsize_t length;\n+\tint pagesize, nr_pages;\n+\n+\tpagesize = getpagesize();\n+\thpage_size = get_hugepage_size() * 1024;\n+\tlength = 4 * hpage_size;\n+\tbatch_bytes = MEMCG_CHARGE_BATCH * pagesize;\n \n \told_current = cg_read_long(test_group, \"memory.current\");\n \tset_nr_hugepages(20);\n \tcurrent = cg_read_long(test_group, \"memory.current\");\n-\tif (current - old_current >= MB(2)) {\n+\tif (current - old_current >= hpage_size) {\n \t\tksft_print_msg(\n \t\t\t\"setting nr_hugepages should not increase hugepage usage.\\n\");\n \t\tksft_print_msg(\"before: %ld, after: %ld\\n\", old_current, current);\n \t\treturn EXIT_FAILURE;\n \t}\n \n-\taddr = mmap(ADDR, LENGTH, PROTECTION, FLAGS, 0, 0);\n-\tif (addr == MAP_FAILED) {\n-\t\tksft_print_msg(\"fail to mmap.\\n\");\n-\t\treturn EXIT_FAILURE;\n-\t}\n+\taddr = mmap(ADDR, length, PROTECTION, FLAGS, 0, 0);\n+\tif (addr == MAP_FAILED)\n+\t\tksft_exit_skip(\"mmap failed, not enough memory.\\n\");\n+\n \tcurrent = cg_read_long(test_group, \"memory.current\");\n-\tif (current - old_current >= MB(2)) {\n+\tif (current - old_current >= hpage_size) {\n \t\tksft_print_msg(\"mmap should not increase hugepage usage.\\n\");\n \t\tksft_print_msg(\"before: %ld, after: %ld\\n\", old_current, current);\n \t\tgoto out_failed_munmap;\n@@ -124,10 +137,34 @@ static int hugetlb_test_program(const char *cgroup, void *arg)\n \n \t/* read the first page */\n \tcheck_first(addr);\n-\texpected_current = old_current + MB(2);\n+\tnr_pages = hpage_size / pagesize;\n+\texpected_current = old_current + hpage_size;\n \tcurrent = cg_read_long(test_group, \"memory.current\");\n-\tif (!values_close(expected_current, current, 5)) {\n-\t\tksft_print_msg(\"memory usage should increase by around 2MB.\\n\");\n+\tif (nr_pages < MEMCG_CHARGE_BATCH &&\n+\t    (current == old_current ||\n+\t    values_close(old_current + batch_bytes, current, 5))) {\n+\t\t/*\n+\t\t * Memory cgroup charging uses per-CPU stocks and batched updates to the\n+\t\t *  memcg usage counters. For hugetlb allocations, the number of pages\n+\t\t *  that memcg charges is expressed in base pages (nr_pages), not\n+\t\t *  in hugepage units. When the charge for an allocation is smaller than\n+\t\t *  the internal batching threshold  (nr_pages <  MEMCG_CHARGE_BATCH),\n+\t\t *  it may be fully satisfied from the CPU’s local stock. In such\n+\t\t *  cases memory.current does not necessarily increase.\n+\t\t *\n+\t\t *  If the local stock is insufficient, it may be refilled in batches\n+\t\t *  of MEMCG_CHARGE_BATCH base pages, causing memory.current to increase\n+\t\t *  by more than the allocation size.\n+\t\t *\n+\t\t * Therefore, Treat both a zero delta and a batched increase as a\n+\t\t * valid behaviour here.\n+\t\t */\n+\t\tif (current == old_current)\n+\t\t\tksft_print_msg(\"allocation consumed from local stock.\\n\");\n+\t\telse\n+\t\t\tksft_print_msg(\"memcg charge batched via stock refill.\\n\");\n+\t} else if (!values_close(expected_current, current, 5)) {\n+\t\tksft_print_msg(\"memory usage should increase by ~1 huge page.\\n\");\n \t\tksft_print_msg(\n \t\t\t\"expected memory: %ld, actual memory: %ld\\n\",\n \t\t\texpected_current, current);\n@@ -135,11 +172,11 @@ static int hugetlb_test_program(const char *cgroup, void *arg)\n \t}\n \n \t/* write to the whole range */\n-\twrite_data(addr);\n+\twrite_data(addr, length);\n \tcurrent = cg_read_long(test_group, \"memory.current\");\n-\texpected_current = old_current + MB(8);\n+\texpected_current = old_current + length;\n \tif (!values_close(expected_current, current, 5)) {\n-\t\tksft_print_msg(\"memory usage should increase by around 8MB.\\n\");\n+\t\tksft_print_msg(\"memory usage should increase by around 4 huge pages.\\n\");\n \t\tksft_print_msg(\n \t\t\t\"expected memory: %ld, actual memory: %ld\\n\",\n \t\t\texpected_current, current);\n@@ -147,7 +184,7 @@ static int hugetlb_test_program(const char *cgroup, void *arg)\n \t}\n \n \t/* unmap the whole range */\n-\tmunmap(addr, LENGTH);\n+\tmunmap(addr, length);\n \tcurrent = cg_read_long(test_group, \"memory.current\");\n \texpected_current = old_current;\n \tif (!values_close(expected_current, current, 5)) {\n@@ -162,14 +199,17 @@ static int hugetlb_test_program(const char *cgroup, void *arg)\n \treturn ret;\n \n out_failed_munmap:\n-\tmunmap(addr, LENGTH);\n+\tmunmap(addr, length);\n \treturn ret;\n }\n \n static int test_hugetlb_memcg(char *root)\n {\n \tint ret = KSFT_FAIL;\n+\tint num_pages = 20;\n+\tlong hpage_size = get_hugepage_size();\n \tchar *test_group;\n+\tuint64_t limit;\n \n \ttest_group = cg_name(root, \"hugetlb_memcg_test\");\n \tif (!test_group || cg_create(test_group)) {\n@@ -177,7 +217,9 @@ static int test_hugetlb_memcg(char *root)\n \t\tgoto out;\n \t}\n \n-\tif (cg_write(test_group, \"memory.max\", \"100M\")) {\n+\tlimit = (uint64_t)num_pages * hpage_size * 1024ULL;\n+\n+\tif (cg_write_numeric(test_group, \"memory.max\", limit)) {\n \t\tksft_print_msg(\"fail to set cgroup memory limit.\\n\");\n \t\tgoto out;\n \t}\n@@ -200,6 +242,7 @@ int main(int argc, char **argv)\n {\n \tchar root[PATH_MAX];\n \tint ret = EXIT_SUCCESS, has_memory_hugetlb_acc;\n+\tlong val;\n \n \thas_memory_hugetlb_acc = proc_mount_contains(\"memory_hugetlb_accounting\");\n \tif (has_memory_hugetlb_acc < 0)\n@@ -208,12 +251,15 @@ int main(int argc, char **argv)\n \t\tksft_exit_skip(\"memory hugetlb accounting is disabled\\n\");\n \n \t/* Unit is kB! */\n-\tif (get_hugepage_size() != 2048) {\n-\t\tksft_print_msg(\"test_hugetlb_memcg requires 2MB hugepages\\n\");\n+\tval = get_hugepage_size();\n+\tif (val < 0) {\n+\t\tksft_print_msg(\"Failed to read hugepage size\\n\");\n \t\tksft_test_result_skip(\"test_hugetlb_memcg\\n\");\n \t\treturn ret;\n \t}\n \n+\tksft_print_msg(\"Hugepage size: %ld kB\\n\", val);\n+\n \tif (cg_find_unified_root(root, sizeof(root), NULL))\n \t\tksft_exit_skip(\"cgroup v2 isn't mounted\\n\");\n \n","prefixes":["v4","15/15"]}