From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2731D3DAAA3 for ; Fri, 21 Aug 2026 18:58:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338686; cv=none; b=HomxCxZqI0v8BDoVFS5cNac3V1fuzkDEVwz+W+8nEXPFceDuP2lo1sF9RkuglhVb3Y0itBvvFp2XT3JnLMfUByG3FM4DlSBfbIxAf7j+yqlo6OVxn8R7sxD9pXJE/22OuUj1+XhmwXFWO5lI4DFtiblwJrJN3Ixm6hgel8xqG9A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338686; c=relaxed/simple; bh=zN4YwsmDvSboy8SYR2KDjDfnHBrzsib8W3G8GkLnsrU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pQZAN9m6fx4/NKo/p5ZGOF4yaN/oE/PnWB/Vem9TGNPwOrsKUd0IJc046/Uw9J+1Ezp9inPDKTavYA5CzAutCh6pWy2bWvHXpksh7nnvL+Z3QTM0OPJqaajUV6MptXGzhu/0NXxu/aqIJ1Q1s7C9moksUMiVg316thokS07gQbo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=IGroEPWA; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=UDqmU3tc; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="IGroEPWA"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="UDqmU3tc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338684; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cQingZcA8JY9invl4rfVqQH3WLMP3iU/vTSgNWsiPjc=; b=IGroEPWAfJG/SL/Lpvm10cL1RqDysjcLCelj3scf1+vINCZWKGdoBessDVRV/61Ih9CKLj 769mhtzH2jWHIY5N1i1usSzea1aSEAMx2zFkwZJD2PTlTHcvWOEGzSsDFXG4nI2g/QL9YE /7oxyR6zTsm5M63VltOu1wnPR1xgkmQ= Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-363-w-oRF_ZwPEaBjNr-FIrVHw-1; Fri, 21 Aug 2026 14:57:53 -0400 X-MC-Unique: w-oRF_ZwPEaBjNr-FIrVHw-1 X-Mimecast-MFC-AGG-ID: w-oRF_ZwPEaBjNr-FIrVHw_1787338672 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-92efd2ca21aso237545885a.0 for ; Fri, 21 Aug 2026 11:57:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338672; x=1787943472; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cQingZcA8JY9invl4rfVqQH3WLMP3iU/vTSgNWsiPjc=; b=UDqmU3tcJpZtpwfjZKqEFCQi/5+ZVaE3mtudf8tbck29CC21rTcHwt7q/VL45p7JDn FmWvd+E3k7OunbMvSP8nrogF9at02YHUeV9QddnvAIIuREGa82UuOWBVt6Zi2Mi5OPTj uTVMcqEPBWAWfgwTqPpobqelkOMrnxTko2y+j3GMxtYD5HnZtwjdpYZCLW+Ws0QqRdBo ICYKDpycMQ+fBm7Vvixva83uDSc8vTJi8VgfrMEXCC5KhnK4CJrqLqdWqGY79Oe3d7bC q/EzRKKmqiMmGvJ5dx4ROuUVC/u3gdC9GxgECuCLZkXtIQfnrnKBsK4CcvJErs92MNZv 0IGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338672; x=1787943472; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=cQingZcA8JY9invl4rfVqQH3WLMP3iU/vTSgNWsiPjc=; b=inE8NF6KLg9rN/f613xhvIRlEJDGk2rsxSVtMMW32GsSVrOYqQRPi/KspUbHvkpimS 0RUTXeRRrD7pArvL3LCX0WKHJSs0fD1WemL7uH1GIXiGA24yJ8reKl38QBC9ltwMbHYL ruapOVVgVTIUHsU6ZMbj2jjh4SGynHUwtQG/7Ux9NPjzdJ6U6q+WnnKR9ExnuwMgbRAE 8XdH32272Wc06skLWZrcrhlfIm/kMfpYCgX1ELpS/X7G27lzCM33+D5vTn687bJE5DOX WrNUZ+GCj0Mz+YhXolg5CYZQ3HmGe1mZMMIRAo3i+iaMJQ6mioM9FT0smr51lEZnEvgB 9CcA== X-Forwarded-Encrypted: i=1; AHgh+Rp2a8tKRwQM9GK1Laz7F1eylIupu/VCxKQm6EetMSdcnljJmaxRimdXNc9FNgQYP7a+LjLVmS7kh1hiaVs=@vger.kernel.org X-Gm-Message-State: AFuF++k9uepBVKk9CfJwCyAKWT4tiTeTwEfhad5Oi0+ABKWVzwfFkUY4 Q5JQwn8/iOpkT4MHufzFT3lDHFnAVJmazqx4kSgoRhDp59esAfTvlRQOr6EBcYb/qXFOGDnVUMy L7KJl5B8iBuaa3sdruGWZjZdnt6nyqwJOvHaEtc4cfHRsyDOn0dkg7NK+xI2q5gqqDA== X-Gm-Gg: AR+sD11ClxKR9SZAqSVVsj16HrrJutYwdinDJzP32ZauQrOgMDK3tcbdlsYaqM91Mrb 6jjPswj5Bgd8HaIMKv3wSxJX+PFGzHb3bbF6KBy7WQj8G1BTZlch8Wn/emeUxg6D5ulVLzGETXC C7Pn0VqAVqArSbn+K8+f1BGT/9Fz7E4q7iK/Qx7Xdqu2XCwa0i8nXHQxnsr5ZCQlyHP7krgnBXN pPIuNhkQBfJFfK1XEFz6MWWTnbfncLznNoguGySTCd3dJhsSXdf3owco2Z6oPqJmliXpZrVBygU sOyoBlf20dViq+1Slsq8osAdS6fTBCnmS6EQtgGB9MMagMzPbE+scWAWG3jA//NpF2NZO9+NOtD Wma9ob/RDq+6QwY+Io5Ihsw/fjl9iIO+/3ZCeZiYFbP4r X-Received: by 2002:ae9:f115:0:b0:937:26c3:747f with SMTP id af79cd13be357-937468baea7mr97627885a.15.1787338672391; Fri, 21 Aug 2026 11:57:52 -0700 (PDT) X-Received: by 2002:ae9:f115:0:b0:937:26c3:747f with SMTP id af79cd13be357-937468baea7mr97623985a.15.1787338671990; Fri, 21 Aug 2026 11:57:51 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id af79cd13be357-937205998ddsm651971585a.44.2026.08.21.11.57.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:57:50 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:56:53 -0400 Subject: [PATCH 01/11] mm/cma: drop const for struct page on release API Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-1-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 The const is not honored. Both cma_release and cma_release_frozen do a struct page -> pfn -> struct page round-trip to convert the const struct page pointer to struct page and modify it: cma_release calls put_page_testzero() directly, which modifies the page; cma_release_frozen calls free_contig_frozen_range(pfn), __free_contig_frozen_range, then __free_contig_range_common which modifies the page as well. Signed-off-by: Eric Chanudet --- include/linux/cma.h | 4 ++-- mm/cma.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/linux/cma.h b/include/linux/cma.h index 8555d38a97b1..16e2136421b7 100644 --- a/include/linux/cma.h +++ b/include/linux/cma.h @@ -49,12 +49,12 @@ extern int cma_init_reserved_mem(phys_addr_t base, phys= _addr_t size, struct cma **res_cma); extern struct page *cma_alloc(struct cma *cma, unsigned long count, unsign= ed int align, bool no_warn); -extern bool cma_release(struct cma *cma, const struct page *pages, unsigne= d long count); +extern bool cma_release(struct cma *cma, struct page *pages, unsigned long= count); =20 struct page *cma_alloc_frozen(struct cma *cma, unsigned long count, unsigned int align, bool no_warn); struct page *cma_alloc_frozen_compound(struct cma *cma, unsigned int order= ); -bool cma_release_frozen(struct cma *cma, const struct page *pages, +bool cma_release_frozen(struct cma *cma, struct page *pages, unsigned long count); =20 extern int cma_for_each_area(int (*it)(struct cma *cma, void *data), void = *data); diff --git a/mm/cma.c b/mm/cma.c index a13ce4999b39..e1820fb451e4 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -992,7 +992,7 @@ static struct cma_memrange *find_cma_memrange(struct cm= a *cma, } =20 static void __cma_release_frozen(struct cma *cma, struct cma_memrange *cmr, - const struct page *pages, unsigned long count) + struct page *pages, unsigned long count) { unsigned long pfn =3D page_to_pfn(pages); =20 @@ -1014,7 +1014,7 @@ static void __cma_release_frozen(struct cma *cma, str= uct cma_memrange *cmr, * It returns false when provided pages do not belong to contiguous area a= nd * true otherwise. */ -bool cma_release(struct cma *cma, const struct page *pages, +bool cma_release(struct cma *cma, struct page *pages, unsigned long count) { struct cma_memrange *cmr; @@ -1037,7 +1037,7 @@ bool cma_release(struct cma *cma, const struct page *= pages, } EXPORT_SYMBOL_GPL(cma_release); =20 -bool cma_release_frozen(struct cma *cma, const struct page *pages, +bool cma_release_frozen(struct cma *cma, struct page *pages, unsigned long count) { struct cma_memrange *cmr; --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 69FC73DEAD2 for ; Fri, 21 Aug 2026 18:57:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338681; cv=none; b=Im7W6+h+8eKU96IMfYqKlmvL6WTW7Z2HmNxNMQyvheBOEa7LZKAOR9ErAltAXLHfWVOFujzS8SQhdwUbYyr95vlnuJosDzCLALvJsEKmYZ0yZ64L7HTUCmUM4htNgV6guFPuKL4F8gQbUX4SvPG233tZyuDLZ66TrO9IkLl5vGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338681; c=relaxed/simple; bh=p4E4Ct3IlFbTeWS21yt/A9ZhhZobTV3W1Jsfzz388+Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sb2MygUxQqt4dU3Jl6CyJp/S+7s1RzzP7y3amW9zKRBYEVeb0lLZp0P7U0SuLlKZLe9fQZIJGaHOx9HBr74gzBa/Dd2fc2h/m7loMhkqXLoQC+vKaRyzuBIE5dISNM5Mkb1tXFYgJHI2xtNtGIxfeGBHw4MatHS4x91eaP2cC3E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=OeoTMPEa; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Trc6mrBD; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="OeoTMPEa"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Trc6mrBD" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338677; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e2V2mpWvyYuIz7GKVVHxUcELAybMhQQsAX/9av2OZxM=; b=OeoTMPEaRaxz1wIpZAFP/kZRL4p2RUWzLz52yLNe2pYK5zLJJ77vdvBUoC5bsvFaZjTj7+ o4J9bwfwbl6OMAlCB5/O3nfUB+MSYj19hFZiJHdwZ/QPKcDMJ85B1Mr0oNWJxcMvQyy8mN eF6MUeBvoCZ6aVBz2ZIsAHT1hudwHRs= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-28-zHAzTBNVOheE_SlhdN2GdA-1; Fri, 21 Aug 2026 14:57:56 -0400 X-MC-Unique: zHAzTBNVOheE_SlhdN2GdA-1 X-Mimecast-MFC-AGG-ID: zHAzTBNVOheE_SlhdN2GdA_1787338676 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-93494cce712so160341885a.3 for ; Fri, 21 Aug 2026 11:57:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338676; x=1787943476; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=e2V2mpWvyYuIz7GKVVHxUcELAybMhQQsAX/9av2OZxM=; b=Trc6mrBDX+zo4KJit944vd4EryF8ogDzd0zttSoaT5gO3/kZsiVh55oFO+OCMFOXdZ sbn61iyY+B1KSMphNhazGcTIp/5DaN3LGV0wey10B13v0tbWDJXG0pPmjmNKH4bGkQh4 qaMivl+tt/YgzdNCjFtePnO/n5uZenMAU8jvBqXAeAY1UqvxDsWiNEwc71LyWt531AxH +LRSTiMR0PQIIEAG654GF52CIOnj64u/FilaR1QMMaBRNxQZDcIuwyTZqJBKMyL5t4rM w7schtzJ/CaA5StrI4I9zTMJL9LPfZ06J2XdPrwpEf5+PZE5FE3TAEJJ8X6NN/AQFUyS uOnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338676; x=1787943476; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=e2V2mpWvyYuIz7GKVVHxUcELAybMhQQsAX/9av2OZxM=; b=ZwmyxiN5f6wCzNWX6TXEZAcHosH4+eUWI8OhNcUvwkooxI9XjM1cbzei9afMZcUsyB SiUycxJQH9ZPSYiCByIuM8DgHJ06BSLuAfwbR3In3ALfhOlaDPO7JL2/LeALR/9cHASS KfwvKytsSHTdhsmmG4LHuhzkN/DcBPXpn5NlDIJ8vyLzfkleuiF/VWiou13yuv8RDpR+ 7tdALJ8KKaLhY44LMuJNagwHr7rzmyYcn0wBvjnPQgU9Hgh6CNu6900Jjgf9aQEnE+5/ Jy5AzE4d1JxbH30Fs/dmPrprZ+Qv4kg3YDxikiDoEXIKCFkTRzqCrwQFbU6AJ0o9lGrv LnSQ== X-Forwarded-Encrypted: i=1; AHgh+RojHBJOpiOvS8s1EIdruGhrmDgkZte/jW60AxMXBtlY7/f/I4NCeJ0XG+Ajv9L1RrhGk8GzWDm7gEGN6aw=@vger.kernel.org X-Gm-Message-State: AFuF++mDP7nTXZ7+xy43zjitTZ7FwPdnALWmH8rJoET1iy0Ej222oq2F EEI0NUS32JT1szNwYzvG8dRCeDp+Y/y17yHxyDkQdqB/V6bChM9UKWSvNj0S9Fgk6ySr8rxYBJR 03zqBUpPq7AMLuTirVfjRJEFlrqva21V4nj5sFyJ34rO0lem+JXMD8DMEXtk1XuRQcA== X-Gm-Gg: AR+sD10+cUwtKrk9hJ0yJmlIQDbp3m2j1sz+kE2f914yigp9il/4zdkGh82kqJjOcHD O+VQS80Niyvf/PB5Opjzmxv8LkcOqBH7Xpen9wUp41edrKVk1631xvw8B5V7SXi5IH0bSRVqVBR 52MiLjOHdBlX5Ec/CPme8324V6UDK5ONHnvydl2+M6YaUNVtISYgC4ddVQLhiKd+tZXuQ1XxP7k JB7h2rgvTko4WnvbXzEPs6bozM4tp+ZGIE95QRz2TYUh7j2bgnZaVpBs8o7utq5q5znS9AC1Ukq LuLCG4b9K+mFc1Y25rcgH0b9x22bh6BfBSwVZMk18WCWi0FiUS+ZNgLPehEkZ/pAnEPmpxD5wyg jYzU56zapZiGxIUB+FPD3OheRdexSSjwuA6Ff2mfJtiCr X-Received: by 2002:a05:620a:29d6:b0:914:bd3f:b6db with SMTP id af79cd13be357-937394278e8mr807012985a.10.1787338675686; Fri, 21 Aug 2026 11:57:55 -0700 (PDT) X-Received: by 2002:a05:620a:29d6:b0:914:bd3f:b6db with SMTP id af79cd13be357-937394278e8mr807005485a.10.1787338675183; Fri, 21 Aug 2026 11:57:55 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id af79cd13be357-93720586ea5sm655734185a.38.2026.08.21.11.57.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:57:52 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:56:54 -0400 Subject: [PATCH 02/11] mm/cma: include linux/cma.h in cma.h Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-2-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 cma.h needs definitions from linux/cma.h (e.g, MAX_CMA_AREAS, CMA_MAX_NAME), so including mm/cma.h requires including linux/cma.h. Make the dependency explicit by including the header directly. Signed-off-by: Eric Chanudet --- mm/cma.c | 1 - mm/cma.h | 1 + mm/cma_debug.c | 1 - mm/cma_sysfs.c | 1 - 4 files changed, 1 insertion(+), 3 deletions(-) diff --git a/mm/cma.c b/mm/cma.c index e1820fb451e4..03f98f6d45a5 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include diff --git a/mm/cma.h b/mm/cma.h index c70180c36559..0c9de38d6bff 100644 --- a/mm/cma.h +++ b/mm/cma.h @@ -4,6 +4,7 @@ =20 #include #include +#include =20 struct cma_kobject { struct kobject kobj; diff --git a/mm/cma_debug.c b/mm/cma_debug.c index 523ba4a0f9f7..70bfc6fbeeca 100644 --- a/mm/cma_debug.c +++ b/mm/cma_debug.c @@ -7,7 +7,6 @@ =20 =20 #include -#include #include #include #include diff --git a/mm/cma_sysfs.c b/mm/cma_sysfs.c index d5bf792c6245..e4ee35bc682b 100644 --- a/mm/cma_sysfs.c +++ b/mm/cma_sysfs.c @@ -5,7 +5,6 @@ * Copyright (c) 2021 Minchan Kim */ =20 -#include #include #include =20 --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 110DC38837A for ; Fri, 21 Aug 2026 18:58:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338686; cv=none; b=oMgpjolQ8vnJbsD+VnivTahmKuI0vabuaeGqep8QOBSgbrh1GN/C3zG0+FlC2AEF9JbR9ubqmyxo3EtmkU2iuBRHdjhMeiBz/uQFi/9NI+buec8ZGbpUJQJxjKrx7jTj+PP26uUh0UxCUVWsDLefxjEgdjVAbHKjUJbFo1K3480= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338686; c=relaxed/simple; bh=FdhRs7+oHCYsp+CTVU4k6mJwmdQ1MxeWy7ohBCCfz6I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JFmuyBiqaLXrbO2OjBDi4RbzbtTnAeSIWUf9DSKzyQkutUDHbBFFPjOGVeFgV5flL9rAea8Wh2FRosoYtoGdRgCJzstL22+mbKaB53hFIZJ2AuE9J51/wprxMFch/uTYX81r2qZrm4yPRKQHc6m0JwbDlDcQAXiOruhE5yftnvY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=YooCW8f9; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=J3PZLszL; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="YooCW8f9"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="J3PZLszL" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338684; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RWFFYMU2hrPabnXta24MU9itEej9rdB7ueY1dj1pl/A=; b=YooCW8f9lp8WNwFiKHHJBWo5rhHm+Q6NUcCJBo6KeoiBxpbs26tcBIggeJsX1AoSm9pS+j jrmK3UBOQiykl8F4AJEszY3c8EgPOwgoY3FOuX4qqOadwD2kKOhmLdSvaruxKySr8WgPOv 2TSOeSHaunKrYAkX+0m+nmnvLSUzt9w= Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-641-oThAfVN8N9CFKsjwfwmHog-1; Fri, 21 Aug 2026 14:57:58 -0400 X-MC-Unique: oThAfVN8N9CFKsjwfwmHog-1 X-Mimecast-MFC-AGG-ID: oThAfVN8N9CFKsjwfwmHog_1787338678 Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-51a8b0a08d2so11403081cf.0 for ; Fri, 21 Aug 2026 11:57:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338678; x=1787943478; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RWFFYMU2hrPabnXta24MU9itEej9rdB7ueY1dj1pl/A=; b=J3PZLszLKxf1gcVanRZtdGqnC2PAwu2fOL9KZ/NGQa5K9SFYj015cB88mSyhZ+BFMY 3MYVCATsMpiFLZK89FM4Aul47yfl7zVpWBZlp/hlvGvPxccJsIgHWYd9nsuS9IoZIS8w tqE9Z6kwlOGXxULrlqVCn872pYzbWXHI3hEx7NAmUNhMiRjJgrIBR41taFdT6DhruddS g2S7+O/XjF0BoKRR30Lhg9xi0opAaHIVpGfOpIYp7LnXdXyQ9gbfYW3kTu1yhXChiw9w UPJKGfsA6Ii9rIkAXRIsO6twDVWEobYgQghxfjcwy82/9N+G6EsgSD99msB02vQygPcQ 2o/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338678; x=1787943478; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=RWFFYMU2hrPabnXta24MU9itEej9rdB7ueY1dj1pl/A=; b=IjMY4wiP11s8jFy4O4VelQxVGDkot89bcTAw5JIAtWMa1s6FzM3NU46fBQcf9/TH54 PaMHkaiVQxQZxxTIQqhnzSr4Ci3OG3atcJvi/+TLdpS2I/hTHjyJGdOxH/VhRrSKzvPl Sp2uTMALwk8yGa2vW44j9UtzJemZrS+LiA7qc4JDcfnpqyuHzJ6z9pI4cW2X6nB2szj5 a0kfDtvrWl3kAcy5mxno6oXSm4nefU7z0hG0IADDGvGVjBViKn66x9AX5mRkQ+5nlReX tXA4Gel32kQuSoN4D7nTBlY+J9lKSTMMfk67AxIVpTP8Q3O/CmoFwDzgiFd/IL05w2Y+ LuEw== X-Forwarded-Encrypted: i=1; AHgh+Rqnf46cyhFESrSbsvA2Hyy1GfN+5pqilPV6oZVsJROncdkWTxHgNQ7xcWHcQeTsKqP+smIYojnkKT2bKRQ=@vger.kernel.org X-Gm-Message-State: AFuF++nlk2CvYI1SQXgMo/43Q0UvQTzGLDTaSFdB6j/F25peFVLFDiSA GoQtw7DNUrIYqBYlXK2pN0e/7yB22vRU1KKcjUsl+IfJGKHjpR21qVHyrUf1/GbQkYhWoNdjHsq 3XnMZ3kDOIAFrMwDa3SMPy3BDfMVC5sVfY9iHdXNpmhOl+YRW/w8bQZzQ0LtFa64rCQ== X-Gm-Gg: AR+sD13KE+Rn0iIpPegiv472I2YMxALNIMAj9wR8ZhviFF8pNsuwAMySYQdYQyAAxPU rN0g6cgK0C1YmWdzZv/IkzgvDHBM01rvmxlUQXpFGynkM/CsFO9gw3u8lEu/FtQCk+RKEdwBmbv U74LN6Qx+rvB+8aIrQvOOppEcCLPgJFw3pTWZpmaDDmcZXIQeyQO2EFbdtyHE9y7knMUY2BxbkU r9AaxjK+1RYH3SwGxfYyHwtIilV7wVD08jSygaoU2Fh6+CWEXBYoKFm2CFeiCnSk+MC8pFj8IRh qbXrpOfJP2bdOAAEe4TyhzGR/E6ZYOrHeiajciuB0fZvYE8H89q659j+z/SuEsdPNfG4R68g7tE WA/cPExIcr9v/fPUzTaeVX8sNqXWm30Ov459vdMBKxP25 X-Received: by 2002:a05:622a:2592:b0:51c:92a0:b2cb with SMTP id d75a77b69052e-52df59ebf4fmr86912351cf.26.1787338677403; Fri, 21 Aug 2026 11:57:57 -0700 (PDT) X-Received: by 2002:a05:622a:2592:b0:51c:92a0:b2cb with SMTP id d75a77b69052e-52df59ebf4fmr86911721cf.26.1787338676950; Fri, 21 Aug 2026 11:57:56 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-52e09aae6f4sm985701cf.16.2026.08.21.11.57.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:57:55 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:56:55 -0400 Subject: [PATCH 03/11] cgroup: add memory_cma_accounting mount option Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-3-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Add a cgroup v2 mount option that will be used later in this series to enable CMA memory accounting under memcg. The option is made opt-in as it will charge allocations to the cgroup's overall memory usage, which changes existing expectations. Signed-off-by: Eric Chanudet --- Documentation/admin-guide/cgroup-v2.rst | 20 ++++++++++++++++++++ include/linux/cgroup-defs.h | 5 +++++ kernel/cgroup/cgroup.c | 15 ++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-= guide/cgroup-v2.rst index aed195a71cbf..3dfc13f31a0c 100644 --- a/Documentation/admin-guide/cgroup-v2.rst +++ b/Documentation/admin-guide/cgroup-v2.rst @@ -246,6 +246,26 @@ cgroup v2 currently supports the following mount optio= ns. will not be tracked by the memory controller (even if cgroup v2 is remounted later on). =20 + memory_cma_accounting + Count CMA memory usage towards the cgroup's overall memory usage f= or + the memory controller, and expose per-CMA-area usage counters. This + behavior is opt-in, so as to not cause regression on existing setu= ps. + + A few caveats to keep in mind: + + * CMA areas are reserved at boot time, memory is only charged to a + cgroup when a CMA allocation is performed on its behalf. + * CMA pages allocated while this option is not enabled will not be + tracked by the memory controller, even if cgroup v2 is remounted + later on with this option. Charges happen at allocation. + * CMA allocations are charged both to the cgroup's memory counter + (limited by memory.max) and the per-area CMA counter (limited by + memory.cma..max). Hitting either limit can cause an alloca= tion + to fail. If CMA usage pushes the cgroup over memory.high or + memory.max, the memory controller will attempt to reclaim other + memory only. CMA memory charged to the cgroup is not reclaimable. + Limits should be sized to accommodate the expected CMA pressure. + pids_localevents The option restores v1-like behavior of pids.events:max, that is o= nly local (inside cgroup proper) fork failures are counted. Without th= is diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h index de2cd6238c2a..15f3f7110c5b 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -129,6 +129,11 @@ enum { * Enable legacy local pids.events. */ CGRP_ROOT_PIDS_LOCAL_EVENTS =3D (1 << 20), + + /* + * Enable cma accounting for the memory controller. + */ + CGRP_ROOT_MEMORY_CMA_ACCOUNTING =3D (1 << 21), }; =20 /* cftype->flags */ diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index b5b461d4418b..12184f85ad10 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -1985,6 +1985,7 @@ enum cgroup2_param { Opt_memory_recursiveprot, Opt_memory_hugetlb_accounting, Opt_pids_localevents, + Opt_memory_cma_accounting, nr__cgroup2_params }; =20 @@ -1995,6 +1996,7 @@ static const struct fs_parameter_spec cgroup2_fs_para= meters[] =3D { fsparam_flag("memory_recursiveprot", Opt_memory_recursiveprot), fsparam_flag("memory_hugetlb_accounting", Opt_memory_hugetlb_accounting), fsparam_flag("pids_localevents", Opt_pids_localevents), + fsparam_flag("memory_cma_accounting", Opt_memory_cma_accounting), {} }; =20 @@ -2027,6 +2029,9 @@ static int cgroup2_parse_param(struct fs_context *fc,= struct fs_parameter *param case Opt_pids_localevents: ctx->flags |=3D CGRP_ROOT_PIDS_LOCAL_EVENTS; return 0; + case Opt_memory_cma_accounting: + ctx->flags |=3D CGRP_ROOT_MEMORY_CMA_ACCOUNTING; + return 0; } return -EINVAL; } @@ -2068,6 +2073,11 @@ static void apply_cgroup_root_flags(unsigned int roo= t_flags) cgrp_dfl_root.flags |=3D CGRP_ROOT_PIDS_LOCAL_EVENTS; else cgrp_dfl_root.flags &=3D ~CGRP_ROOT_PIDS_LOCAL_EVENTS; + + if (root_flags & CGRP_ROOT_MEMORY_CMA_ACCOUNTING) + cgrp_dfl_root.flags |=3D CGRP_ROOT_MEMORY_CMA_ACCOUNTING; + else + cgrp_dfl_root.flags &=3D ~CGRP_ROOT_MEMORY_CMA_ACCOUNTING; } } =20 @@ -2085,6 +2095,8 @@ static int cgroup_show_options(struct seq_file *seq, = struct kernfs_root *kf_root seq_puts(seq, ",memory_hugetlb_accounting"); if (cgrp_dfl_root.flags & CGRP_ROOT_PIDS_LOCAL_EVENTS) seq_puts(seq, ",pids_localevents"); + if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_CMA_ACCOUNTING) + seq_puts(seq, ",memory_cma_accounting"); return 0; } =20 @@ -7520,7 +7532,8 @@ static ssize_t features_show(struct kobject *kobj, st= ruct kobj_attribute *attr, "memory_localevents\n" "memory_recursiveprot\n" "memory_hugetlb_accounting\n" - "pids_localevents\n"); + "pids_localevents\n" + "memory_cma_accounting\n"); } static struct kobj_attribute cgroup_features_attr =3D __ATTR_RO(features); =20 --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11049317173 for ; Fri, 21 Aug 2026 18:58:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338686; cv=none; b=hPSKGCFZw5Oh3hNpozUtnYQzS0OrcjF8POlaei3LDDpYeuAzxGQgLzhmgguHMI00X0mMnmHx/0HgoY7g+U+agVUT1tKUArAioVib4r0fFVlkgIHELofBxa2uNzB6Ugt5cF8i2MUWHQ9fdrybdx5SPT7z2gG5DodN3J3Ud1NUKeU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338686; c=relaxed/simple; bh=zxisU4FNxtIBooALKv+M4gVONpDA/GuCc0no7zuCciA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nf+33/8ezGVgl/Eu4fcWmSTt+vIebAaqO53AK9rkOEMcPJQYADfS6mUBdnJjLRdj3daPexXDly0MC5hvnbfhCQYuD/+eER202newxAd8E4ZblM10pX04PHrC4hETgQmq+CeeHwE/9SkAyhrQl/crLJbqSgsx+g33YkfXiDaoh5U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=jRXpKYYu; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=YWd4OfEe; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="jRXpKYYu"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="YWd4OfEe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338683; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=222y2tNP5AAzgrcKEwSA0V5PiUFlYG+znMLqhuMeRAg=; b=jRXpKYYucxkwqqYdgJ4d0VGWBtW0Dvpnzps0M3L6KFJbQWOK14zUtxUpU6gbTMFN7P3w8d YM9mZUjnG7xnjrQM1daaTxbsS+w3SbilanRNzT3eSYTyAZiP1ymG/StfwWgvRSx/zWIgI+ hysJbbtL9JYe9TACxRQpy2IrRcFdEFs= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-557-ZYcrr7JbMAuBXSaTuZGy-Q-1; Fri, 21 Aug 2026 14:58:02 -0400 X-MC-Unique: ZYcrr7JbMAuBXSaTuZGy-Q-1 X-Mimecast-MFC-AGG-ID: ZYcrr7JbMAuBXSaTuZGy-Q_1787338681 Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-52769fc3f2eso18200811cf.0 for ; Fri, 21 Aug 2026 11:58:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338681; x=1787943481; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=222y2tNP5AAzgrcKEwSA0V5PiUFlYG+znMLqhuMeRAg=; b=YWd4OfEeu6DEZ3X8HYB0axvQq3Xz0OnHTE4SBqrbDCWVB8PG3KwCOr9xOSvnLIo3vQ RecDosVmA3Vco23tt1uOpOgSxT2vwHKY5tP++MBli5ayVVbL8w4qOb4f23t9eknnUF83 UgqeFp2+c8zfCX84O9EIYsBLi4YNm7FFPLtNTeUPS9SqJaT6OBUX+l32Wz1gWXUY+04k Y1WRgESBtM0AO0u9MWdzDraZjsBBF4MFqewCgz1jQr+ef1bvTMu/vHqZZPyIUZmqSVVn h4opxBIzOXEF2VRUlsJUm9dQULbiBdRuCQlnMFKvYOUUvOdr9Ja8ec2EOz6y/2w9r61q +njw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338681; x=1787943481; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=222y2tNP5AAzgrcKEwSA0V5PiUFlYG+znMLqhuMeRAg=; b=UAFhv9b8qwpD39Wc8p3bylYmFkv5xquCz9VREA004qbNsmnrDjmu5baP8ueLBS+8PF p9q+//1w69FY12NKAAXCp0QwfxT9tk806w4dWdnUCo5Px27Z1/SbiddSyJBWkYH5B+mJ ox5yVScXDCYnLk3gY/JMvlsmEjLJVGh3Lz2SPJ/0TsEexYeVpiR4R9hfdZv/8rTZwdcm NRj1kWrvJYYOwU8GiFBuLwEv28mwUobKifXKZzZRGtcF/qUVS85ER6R+7Ng2bBh+ELF+ d9tkiMDSB2Il5RMKeBPAew/q6Oo9KPkUxroycak5ErVz63QBLIWWoKfgVpATZTaaLQm8 G/jQ== X-Forwarded-Encrypted: i=1; AHgh+RrTya1llYgKmrKiWlPMVfoPolN8Q8ZWOoYMyT9C0PmhtY7j7tCj7P4XbTKKdKbuh+8ZPbJHOu2oX07/f3c=@vger.kernel.org X-Gm-Message-State: AFuF++lO+XoJ2bDrAr2GtXN1ZQxyhIZTlJBUCIl1ovrzBw/ehAgXl0bz 6qOMCB8ycJS+tf9Fc16YHgQEoRGk1ZprYboIu+UET63RPCoGW4zAL6WRBAAl1RihzwVpfVj4nFX W7L5ckfc1yCTzjpEnaHiiY40i+3biKqr1KBR/qitrf+wVacM5K9s4YI7tU+UMuEPe3A== X-Gm-Gg: AR+sD12mZDW21NlmVT/1H8hNRGGX55xSN0WgRxLbpL/Stda5hDmTIiW8DW0N8DaUrPN fThNkvr+i7TJpfrB3g+D9hWMAr9aYk1eQWYwWYSjz4jadWLk18FsjeLkKxxFlt/G63pYFjDKZzg hQeqd3ZJMJxyhTOvB09Irsw2kJEX/5jdl/TBAi0+5cyS1DV2taQhtAhRdwMTSDLvVgy3WRfjQOm SV/vKQMdBNun+BeOPxul2BIML0O7YOYyYYKARKOpVit9hj0G4IkQMh/9T+McF1+Wshpxhm9p6Iy RN9JJkiPqnTFSPNa6F0G6E19DANy+OFvVDrgie3D1CJznpVCSdNZUtZivanQJrnO2jcscphwVma t8VuwyC4lPAmjDCM9PPTh3KaEmCsQAWlPV3z08WT9GTuV X-Received: by 2002:a05:622a:4d8d:b0:527:7813:a439 with SMTP id d75a77b69052e-52df5a09808mr94676171cf.27.1787338681283; Fri, 21 Aug 2026 11:58:01 -0700 (PDT) X-Received: by 2002:a05:622a:4d8d:b0:527:7813:a439 with SMTP id d75a77b69052e-52df5a09808mr94675291cf.27.1787338680742; Fri, 21 Aug 2026 11:58:00 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-90c5f2b5ccesm69150516d6.46.2026.08.21.11.57.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:57:57 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:56:56 -0400 Subject: [PATCH 04/11] memcg: add cma charge/uncharge functions for area counters Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-4-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Introduce mem_cgroup_charge_cma() and mem_cgroup_uncharge_cma() to account CMA allocations under memcg when memory_cma_accounting is enabled in cgroupfs. memcg counters to account for allocation in each CMA area are kcalloc'd in mem_cgroup_alloc() and added to the page-counter hierarchy in mem_cgroup_css_alloc(). cma_area_count is used to size the array. It is calculated during setup_arch(), before mem_cgroup_alloc() is called (for the first time in cgroup_init()). On cma_alloc(), pages are charged both to the cgroup's memory controller (with try_charge_memcg()) and to the per area page counter for the CMA region used. CMA ranges can be either pages with a 0-order folio (cma_alloc_frozen, !__GFP_COMP) or pages under a large folio (cma_alloc_frozen_compound, __GFP_COMP). In the first case, mark each page's folio with the cgroup's obj_cgroup. In the second case, only mark the large folio from the first page. On cma_release(), get the first page's folio and uncharge both counters accordingly if it is a large folio or not. A small cma_area_index() helper is introduced to succinctly get the counter of a given CMA region in the memcg CMA area counters array. Signed-off-by: Eric Chanudet --- include/linux/memcontrol.h | 19 ++++++++ mm/cma.h | 5 ++ mm/memcontrol.c | 116 +++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 140 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 8170bb8066a2..801fbde94137 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -320,6 +320,10 @@ struct mem_cgroup { spinlock_t event_list_lock; #endif /* CONFIG_MEMCG_V1 */ =20 +#ifdef CONFIG_CMA + struct page_counter *cma_counters; +#endif /* CONFIG_CMA */ + struct mem_cgroup_per_node *nodeinfo[]; }; =20 @@ -662,6 +666,11 @@ int mem_cgroup_charge_hugetlb(struct folio* folio, gfp= _t gfp); int mem_cgroup_swapin_charge_folio(struct folio *folio, unsigned short id, struct mm_struct *mm, gfp_t gfp); =20 +int mem_cgroup_charge_cma(struct page *page, unsigned long count, + struct cma *cma); +void mem_cgroup_uncharge_cma(struct page *page, unsigned long count, + struct cma *cma); + void __mem_cgroup_uncharge(struct folio *folio); =20 /** @@ -1160,6 +1169,16 @@ static inline int mem_cgroup_swapin_charge_folio(str= uct folio *folio, return 0; } =20 +static inline int mem_cgroup_charge_cma(struct page *page, unsigned long c= ount, + struct cma *cma) +{ + return 0; +} +static inline void mem_cgroup_uncharge_cma(struct page *page, + unsigned long count, struct cma *cma) +{ +} + static inline void mem_cgroup_uncharge(struct folio *folio) { } diff --git a/mm/cma.h b/mm/cma.h index 0c9de38d6bff..52b7d4be5170 100644 --- a/mm/cma.h +++ b/mm/cma.h @@ -81,6 +81,11 @@ static inline unsigned long cma_bitmap_maxno(struct cma = *cma, return cmr->count >> cma->order_per_bit; } =20 +static inline int cma_area_index(const struct cma *cma) +{ + return cma - cma_areas; +} + #ifdef CONFIG_CMA_SYSFS void cma_sysfs_account_success_pages(struct cma *cma, unsigned long nr_pag= es); void cma_sysfs_account_fail_pages(struct cma *cma, unsigned long nr_pages); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 6dc4888a90f3..8eca00d30fc5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -68,6 +68,7 @@ #include #include "slab.h" #include "memcontrol-v1.h" +#include "cma.h" =20 #include =20 @@ -4062,6 +4063,9 @@ static void __mem_cgroup_free(struct mem_cgroup *memc= g) { int node; =20 +#ifdef CONFIG_CMA + kfree(memcg->cma_counters); +#endif for_each_node(node) { struct mem_cgroup_per_node *pn =3D memcg->nodeinfo[node]; if (!pn) @@ -4144,6 +4148,15 @@ static struct mem_cgroup *mem_cgroup_alloc(struct me= m_cgroup *parent) for (i =3D 0; i < MEMCG_CGWB_FRN_CNT; i++) memcg->cgwb_frn[i].done =3D __WB_COMPLETION_INIT(&memcg_cgwb_frn_waitq); +#endif +#ifdef CONFIG_CMA + if (cma_area_count) { + memcg->cma_counters =3D kcalloc(cma_area_count, + sizeof(struct page_counter), + GFP_KERNEL); + if (!memcg->cma_counters) + goto fail; + } #endif lru_gen_init_memcg(memcg); return memcg; @@ -4159,6 +4172,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *pare= nt_css) struct mem_cgroup *parent =3D mem_cgroup_from_css(parent_css); struct mem_cgroup *memcg, *old_memcg; bool memcg_on_dfl =3D cgroup_subsys_on_dfl(memory_cgrp_subsys); + unsigned int __maybe_unused i; =20 old_memcg =3D set_active_memcg(parent); memcg =3D mem_cgroup_alloc(parent); @@ -4171,6 +4185,12 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *par= ent_css) #ifdef CONFIG_ZSWAP memcg->zswap_max =3D PAGE_COUNTER_MAX; WRITE_ONCE(memcg->zswap_writeback, true); +#endif +#ifdef CONFIG_CMA + for (i =3D 0; i < cma_area_count; ++i) + page_counter_init(&memcg->cma_counters[i], + parent ? &parent->cma_counters[i] : NULL, + false); #endif page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX); if (parent) { @@ -5213,6 +5233,102 @@ int mem_cgroup_swapin_charge_folio(struct folio *fo= lio, unsigned short id, return ret; } =20 +#ifdef CONFIG_CMA +static bool memcg_accounts_cma(void) +{ + return cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_CMA_ACCOUNTING; +} + +int mem_cgroup_charge_cma(struct page *page, unsigned long count, + struct cma *cma) +{ + struct page_counter *counter, *fail; + struct obj_cgroup *objcg; + struct mem_cgroup *memcg; + unsigned int i; + int rc =3D 0; + + if (mem_cgroup_disabled() || !memcg_accounts_cma()) + return 0; + + memcg =3D get_mem_cgroup_from_current(); + if (!memcg) + return 0; + + if (mem_cgroup_is_root(memcg)) + goto cgroup_put; + + rc =3D try_charge_memcg(memcg, GFP_KERNEL, count); + if (rc) + goto cgroup_put; + + counter =3D &memcg->cma_counters[cma_area_index(cma)]; + if (!page_counter_try_charge(counter, count, &fail)) { + refill_stock(memcg, count); + rc =3D -ENOMEM; + goto cgroup_put; + } + + objcg =3D get_obj_cgroup_from_memcg(memcg); + if (folio_test_large(page_folio(page))) { + commit_charge(page_folio(page), objcg); + } else { + obj_cgroup_get_many(objcg, count - 1); + for (i =3D 0; i < count; i++) + commit_charge(page_folio(page + i), objcg); + } + +cgroup_put: + mem_cgroup_put(memcg); + return rc; +} + +void mem_cgroup_uncharge_cma(struct page *page, unsigned long count, + struct cma *cma) +{ + struct page_counter *counter; + struct obj_cgroup *objcg; + struct mem_cgroup *memcg; + struct folio *folio; + unsigned int i; + + if (mem_cgroup_disabled() || !memcg_accounts_cma()) + return; + + /* + * Get the objcg from the first page. + * page_objcg() expects MEMCG_DATA_KMEM, but for CMA we used + * commit_charge() which sets folio->memcg_data =3D objcg + * without flags, so we cannot use it. + */ + objcg =3D folio_objcg(page_folio(page)); + if (!objcg) + return; + + rcu_read_lock(); + memcg =3D obj_cgroup_memcg(objcg); + + counter =3D &memcg->cma_counters[cma_area_index(cma)]; + page_counter_uncharge(counter, count); + + memcg_uncharge(memcg, count); + + rcu_read_unlock(); + + folio =3D page_folio(page); + if (folio_test_large(folio)) { + folio->memcg_data =3D 0; + obj_cgroup_put(objcg); + } else { + for (i =3D 0; i < count; ++i) { + folio =3D page_folio(page + i); + folio->memcg_data =3D 0; + obj_cgroup_put(objcg); + } + } +} +#endif /* CONFIG_CMA */ + struct uncharge_gather { struct obj_cgroup *objcg; unsigned long nr_memory; --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CD7828641E for ; Fri, 21 Aug 2026 18:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338698; cv=none; b=UCOjukuEt7kQXD1zYZaRyIqH32C0+y6bUSqpOBChJ/3ltI9+Ia/5A/9tas29px1f8kfU9zuK1KBxmBTEgCWB1zrEBIQvfY4wWXdSV2vimgD95C83MHd6hsYhNxXU1vYSu8RkUcUjiKfgEc9u0VwpruTszjhGRIcZlYbnMz3sk8I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338698; c=relaxed/simple; bh=zgVqh1WXqUuA20jAM25nJa6XotPJcX0sGqZSpoFydf4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lPuZ5S60ZvdLYWIyBpKoGQJKuK5B6oJONHBKE6NLAK87CzWE1ixXa40xsDLfS4rPM1OXNMeNcqOw2yYXLh3AmUvUbT8teuGyeMTRwL4WDDBQVrwof6xtdsUfz1vvkJHlh1Umxk+/s+wKgFYRHVzuTVvW/bgFJ/E8fQxGLhEpA5w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=QxbQt/qp; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=tzdgfYjb; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="QxbQt/qp"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="tzdgfYjb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338695; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L4q5Fof+ukHytC/x5b+k7VwkCJq156UwS0JZy64G2so=; b=QxbQt/qpLdLqKRdQ+oX8n6UoA6PBC3jXCdsGeqUbsM+Cu5xrcDyxIs308jx+VtOF6kRLVf g9cOPCEFZ57RMFotm9kbdPbtdkC6Va3AjkjTBwrTu6wgxPF5IFhTX27jT5FNgCnlWSlm1+ ptVvtYdF7BGkfb15Anah9F3wPsL6Fec= Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-12-qXC5bxzdPsuDsXgAvNfbqQ-1; Fri, 21 Aug 2026 14:58:03 -0400 X-MC-Unique: qXC5bxzdPsuDsXgAvNfbqQ-1 X-Mimecast-MFC-AGG-ID: qXC5bxzdPsuDsXgAvNfbqQ_1787338683 Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-8eec6acbe21so24597346d6.3 for ; Fri, 21 Aug 2026 11:58:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338683; x=1787943483; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=L4q5Fof+ukHytC/x5b+k7VwkCJq156UwS0JZy64G2so=; b=tzdgfYjbAUY8qm+VIUUKGKNeyzdEbEc2UhIMmLLoTvz2vCIhJHpwaVJ5/gUzWohwBU Nx5nYHNYA+C3itREbqlH/Tw+3wmh9/X7FK24J7fCOD6pSqPerrsonnAoiiAYfJgSyJuz 98xk0wZVEAOLAwaUUtn3O/jVkl2kAN11X7Ukkv8DngbNYkQ3kVaR/VA991HfI0+dyW3Q FwflzqUc/5RjJZzoKICax97wC0kEPOPfGouuOjBqamEBMAM7fZTfeSrARZfZzYW8CNih f52Oj7hVV17apmoYLTSy07/nCf3AQUfx2noKZYC26H1GlJrdoZsAUrN8DK+WPIuIFaw3 2PYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338683; x=1787943483; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=L4q5Fof+ukHytC/x5b+k7VwkCJq156UwS0JZy64G2so=; b=HEgbqfAQhtW1G3nQfzug/v9slsuoamFulHUx5TWbvfsd5dGYfL6+n49UTIv8hBSPA5 wHpLFkWhC654ucu4X7czTa4axF6RwNRDISWeIbppYNE9WwOCPBJUjTbQWR2s3uCh20ZX cAnYHiZyyleMONZjy5IzBDpHxcu7Y0qFcBEK7Z9x69KSTOWC/vWe4bss5+FgCBg2YIFh IeMQVuBsqjqATFwUOVL7BMamsxCFWyf78OqwLFMB3ThvrOaJMxppW01F3oYguD9TwJxb cmujFw1Sh8oZbO7gf34O/vBS1jVACCetRaENtYFGXJBsivmTwU+Wy6Ba1GCyKywpDlBk d6Uw== X-Forwarded-Encrypted: i=1; AHgh+Rr8u+DcfPylMjuknP+xq63UrkZ3MVAqc+UOIWY7f7DuGUyxZoa9R8TvLuJ1Hkq1LuW7a8FL+XqfXJZxSek=@vger.kernel.org X-Gm-Message-State: AFuF++mdeUp0CmbCbcKkDprfkLMmkB1C1ucgKtkLFTgwsY9J6i3V0HOE es7UNmsaqQvZm6ycBL1a4b5JA/4vwR8c1DOzL8bFmZLAWoQ5S+5eQtL64dU+BEBySQN5CNB+TSI vIjbqCO32dit8uwGK9OmEqH0Qo12mvdf53m0CHZrislzMSltyM76nywjIWUrGfb88vg== X-Gm-Gg: AR+sD13mhS1oXRMNA42ahNp3OYwgnRsfgjfUnhpiPcHU3thavruDubS1cgIBhsePAKY 6Cx9X9ptfqOoFzy8CuWgOLA0NbDjR7tafufbLjgJEQ/4NV2a2+ojXtWXTgDHpaHWxojm06jGfTT eymIFyyQb2JDGkcaektUWQPKWyKwxFp+iUMX0bM0+byoHqT/3ZVqlragxlWJJrKXQyQRRaNsABs K1CwemJ4pBf8B7Sa2ukf4PyrSEgmYAD0L9C3Btf8UceL76rogeYfe91JM4WdHRrKaKs69TuJCYK eqR41ud0LqrNxILwtKTMyEkefAJWoyzTd1dD/DATr1TvNuoSP48RAxo9Xg+MLNDiQCDk1NnxX+w kZS37FJsIFxRUEJMYESEKaFwJkON+/cMf6lxgoF8lAgBR X-Received: by 2002:ad4:5d67:0:b0:8f7:43f4:fe8d with SMTP id 6a1803df08f44-90c8fa5ed5emr5634246d6.29.1787338683090; Fri, 21 Aug 2026 11:58:03 -0700 (PDT) X-Received: by 2002:ad4:5d67:0:b0:8f7:43f4:fe8d with SMTP id 6a1803df08f44-90c8fa5ed5emr5633776d6.29.1787338682532; Fri, 21 Aug 2026 11:58:02 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-90c5f2b4ad5sm69468316d6.42.2026.08.21.11.58.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:58:01 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:56:57 -0400 Subject: [PATCH 05/11] mm/cma: charge cma allocation to memcg per area counters Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-5-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Hook mem_cgroup_charge_cma() and mem_cgroup_uncharge_cma() into the CMA alloc/release paths. In __cma_alloc_frozen(), charge the pages to the current task's cgroup if the allocation succeeds. Should charging fail (e.g, reaches a limit), release the pages. Uncharge in __cma_release_frozen(). Signed-off-by: Eric Chanudet --- mm/cma.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mm/cma.c b/mm/cma.c index 03f98f6d45a5..03eb3acbd3c7 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -904,6 +904,12 @@ static struct page *__cma_alloc_frozen(struct cma *cma, cma_debug_show_areas(cma); } =20 + if (page && mem_cgroup_charge_cma(page, count, cma)) { + free_contig_frozen_range(page_to_pfn(page), count); + cma_clear_bitmap(cma, &cma->ranges[r], page_to_pfn(page), count); + page =3D NULL; + } + pr_debug("%s(): returned %p\n", __func__, page); trace_cma_alloc_finish(name, page ? page_to_pfn(page) : 0, page, count, align, ret); @@ -997,6 +1003,7 @@ static void __cma_release_frozen(struct cma *cma, stru= ct cma_memrange *cmr, =20 pr_debug("%s(page %p, count %lu)\n", __func__, (void *)pages, count); =20 + mem_cgroup_uncharge_cma(pages, count, cma); free_contig_frozen_range(pfn, count); cma_clear_bitmap(cma, cmr, pfn, count); cma_sysfs_account_release_pages(cma, count); --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C34B3E2ADD for ; Fri, 21 Aug 2026 18:58:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338703; cv=none; b=aGK9Ryjlg0pCjJBN2CxFQvT0lwVYzxlVgomL66sEfFSStXa0zpYEOqIYGQsEIAOBnX3b8j0UU/gHiBoiR8veMvVsereIkwe+3sW87K5xhHSfXjqJR3nf49SEM436nnNrn7pwqUO3SPYwG3fNU1ZkDe8sgcRR+dC6VNNhVngNPFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338703; c=relaxed/simple; bh=bE3pWVKKdTpuMaQ8HVFIYEoYxc3fMC8VaZaqYRmtIio=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ffTiFP1WZWpHLXPtSowo79xuRSLBQK2E2wE6FkvuC7FWp7lzT5eX1DlzOyp8lVXxT1Jdu//mpv2gYK0dUpExaC5I7yEfG9DHqlbVLVCRV+g0ZqAgNdTUSnRSG32lpLw5qZerLhI6ac9utRs5Wxj51/hAeGnxc7Z+qUliM8BXeZ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=c+TilSrK; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=ADzPuKSH; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="c+TilSrK"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="ADzPuKSH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338697; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=W7KnOp/dzi6YYMtNTCErSrAxbzUuBVlszjrt1QEKyR0=; b=c+TilSrK16Bmu6YSqTueBFo2EL+ktP3eSCjFvrGNAV/tkKCUmhpmPxkwjkYvBTNDY3eUwH gdAYkFQwxVQyoTB2B3myJvBb3D6Do9G7Hc3G/7wdZlUsu9fkAIGAoRvRPJOnkLQ02erVQv uK6F0bPKpYUYpyeTUsef2n3CnsekkNs= Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-92-cVG-E6BpORWXYIkA3_a7WA-1; Fri, 21 Aug 2026 14:58:06 -0400 X-MC-Unique: cVG-E6BpORWXYIkA3_a7WA-1 X-Mimecast-MFC-AGG-ID: cVG-E6BpORWXYIkA3_a7WA_1787338685 Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-92e9a2b95b5so236742985a.2 for ; Fri, 21 Aug 2026 11:58:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338685; x=1787943485; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=W7KnOp/dzi6YYMtNTCErSrAxbzUuBVlszjrt1QEKyR0=; b=ADzPuKSHQH6pEXjFXHRaIBShK89x8kcJkNsdxqErDNLjymnJlwhaxZxXRuG/v0zsFZ m7Kr9QM2WmVdubt2ebx1S1gOfXAdyh6Rc+8R60MkKEh+TzBaTMvaXjBVoh9yp2rUAWaT 3KYJMIBW+4+MCmEG70mWJxlXYo6pz5cuMcOnzbYtJaqBDD+sGhHiFZl03Tz2F1uyOG6v fdbgMyVFEUoSe+5DemlDeZh3l08Z3BlIX4hwAZ17F9FHoFrBr5pSL18YDYs5SvHD8aXN EyyiXfYsos2PzdbIVcPee/X4adSgDlKNQvUDxdwpSr1zGR5M5Abtph96+FUI4vp8h4f2 9eFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338685; x=1787943485; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=W7KnOp/dzi6YYMtNTCErSrAxbzUuBVlszjrt1QEKyR0=; b=BTIZCMIE7AfQLn0bTTw4XPHvCzCjFhTTRXkxhrDsN8KH3So+1HRtFinKyRz5T+BNjA A1sRUyHXccjMQk3qRVWaRL/PinU6lwkzl4bf15WkJesQ6fTet4hpN6YQED5uue9VnCMr JKBB4OVMbgObHzjaW//7ca0jf2vYcL4cDTWIkv7d0sbpkZLrr6dDS841Gal5bCyiTDW1 WGZAcxX73vU5KK/kAR2uJqSGukEDIBg43qnAI5YkLp+Ox820+ZiBhKoMqy8u0YCAoVSX SVegrbEaSjr6/Dm5IxOw9N++rcFevzfRXIo5utKNb4Dv+8yDBTfAqEh3TMDSTSdkEXTk MVdA== X-Forwarded-Encrypted: i=1; AHgh+Rr34cgL2tLZZL+TTqhEubCoCH/dKBIov6vDaAPnqZG+ZdFGsmNdDUHKICTesbHua5ph8WM958gZvb8exEQ=@vger.kernel.org X-Gm-Message-State: AFuF++lzQlHpOErWbSeVdpeuA0MQ48yDieva4SYxrwTfokgetWo6uo2H e2iVFfewsDaYyGWDxGfS+6jHyJra862Cz8jiupAzfk4x1150adqeBzdXDrC7/WruLJVGSOWlsKH e22bMlBkTd0ciqgS4tDLBxLElucuFt/CDm2AJhtvVbEODO6e53rGCEnKCFKlHey85ZQ== X-Gm-Gg: AR+sD12TS+6IXz+unKLAslLLsSBb4BLq6VJWKWetsEjq3mFhkMiv3BLflEpaBRJcSf1 tag9OBLXc0LWG56QR3K6081ahUwGRV5fYjHMxScyC3kBDPCVe1fjJijy6Oj8/r67hhelkNeMP+g gr7j+0tiLLQBy6c/1urhiZPUqy+FCN8PE20ynENPnBXoXwjvhZGsYAqikn6lp3nDgClaHKLHYbm geJ4mNQp6M+NBpik+H0P/5i466Q+RJHxOs7E4BhHthLYrDj4P9zZoMmPtp3nmIAY9oBtL38tHC5 2U0JhhFMNMPnZdLQOKQVPJ9dPQsvVobdbJfiioElZbu4SIfY6oRNseMQ/zS5716zLcqiiWOZ4P5 DKQ72O3kD/4NwivNvtm7IJ5VqmSUylJmBFrZXS9CMTuBV X-Received: by 2002:a05:620a:601b:b0:930:a26a:fb2a with SMTP id af79cd13be357-937394324demr865129485a.2.1787338684943; Fri, 21 Aug 2026 11:58:04 -0700 (PDT) X-Received: by 2002:a05:620a:601b:b0:930:a26a:fb2a with SMTP id af79cd13be357-937394324demr865124585a.2.1787338684435; Fri, 21 Aug 2026 11:58:04 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9372fdf59f3sm385976385a.10.2026.08.21.11.58.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:58:03 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:56:58 -0400 Subject: [PATCH 06/11] memcg: register per-area usage counters in cgroupfs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-6-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Expose memory.cma..{current,max} files under each non-root cgroup when cgroupfs memory_cma_accounting option is enabled. memory.cma..current reports the cgroup's CMA usage for that area. memory.cma..max is a read-write limit (default: max). Each CMA area gets a cftype template with its name set from the CMA area's name. Signed-off-by: Eric Chanudet --- Documentation/admin-guide/cgroup-v2.rst | 15 ++++++ mm/memcontrol.c | 89 +++++++++++++++++++++++++++++= ++++ 2 files changed, 104 insertions(+) diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-= guide/cgroup-v2.rst index 3dfc13f31a0c..39871a7a08a8 100644 --- a/Documentation/admin-guide/cgroup-v2.rst +++ b/Documentation/admin-guide/cgroup-v2.rst @@ -1928,6 +1928,21 @@ The following nested keys are defined. This setting has no effect if zswap is disabled, and swapping is allowed unless memory.swap.max is set to 0. =20 + memory.cma..current + A read-only single value file which exists on non-root cgroups. + is the CMA area name (e.g. "reserved" for the default DMA CMA area= ). + + The total amount of CMA memory currently charged to the cgroup for= the + given CMA area. Only accounted when memory_cma_accounting is enabl= ed. + + memory.cma..max + A read-write single value file which exists on non-root cgroups. T= he + default is "max". + + CMA usage hard limit for the given area. If a cgroup's CMA usage f= or + this area exceeds this limit, the allocation will fail. Only enfor= ced + when memory_cma_accounting is enabled. + memory.pressure A read-only nested-keyed file. =20 diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 8eca00d30fc5..f28d610a59ce 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -6182,3 +6182,92 @@ void mem_cgroup_show_protected_memory(struct mem_cgr= oup *memcg) K(atomic_long_read(&memcg->memory.children_min_usage)), K(atomic_long_read(&memcg->memory.children_low_usage))); } + +#ifdef CONFIG_CMA +static int memory_cma_current_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg =3D mem_cgroup_from_seq(m); + int idx =3D seq_cft(m)->private; + unsigned long cur =3D page_counter_read(&memcg->cma_counters[idx]); + + seq_printf(m, "%lu\n", cur * PAGE_SIZE); + + return 0; +} + +static int memory_cma_max_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg =3D mem_cgroup_from_seq(m); + int idx =3D seq_cft(m)->private; + unsigned long max =3D READ_ONCE(memcg->cma_counters[idx].max); + + return seq_puts_memcg_tunable(m, max); +} + +static ssize_t memory_cma_max_write(struct kernfs_open_file *of, char *buf, + size_t nbytes, loff_t off) +{ + struct mem_cgroup *memcg =3D mem_cgroup_from_css(of_css(of)); + int idx =3D of_cft(of)->private; + unsigned long max; + int rc; + + buf =3D strstrip(buf); + rc =3D page_counter_memparse(buf, "max", &max); + if (rc) + return rc; + + xchg(&memcg->cma_counters[idx].max, max); + + return nbytes; +} + +static struct cftype cma_dfl_tmpl[] =3D { + { + .name =3D "current", + .seq_show =3D memory_cma_current_show, + .flags =3D CFTYPE_NOT_ON_ROOT, + }, + { + .name =3D "max", + .seq_show =3D memory_cma_max_show, + .write =3D memory_cma_max_write, + .flags =3D CFTYPE_NOT_ON_ROOT, + }, + { } +}; +#define CMA_DFL_TMPL_SIZE (ARRAY_SIZE(cma_dfl_tmpl) - 1) + +static struct cftype *cma_dfl_files; + +static int __init mem_cgroup_cma_init(void) +{ + struct cftype *cft; + unsigned int i, j; + int count; + + if (mem_cgroup_disabled() || !cma_area_count) + return 0; + + count =3D cma_area_count * CMA_DFL_TMPL_SIZE; + cma_dfl_files =3D kcalloc(count + 1, sizeof(*cma_dfl_tmpl), GFP_KERNEL); + if (!cma_dfl_files) + return -ENOMEM; + + for (i =3D 0; i < cma_area_count; ++i) + for (j =3D 0; j < CMA_DFL_TMPL_SIZE; ++j) { + cft =3D &cma_dfl_files[i * CMA_DFL_TMPL_SIZE + j]; + *cft =3D cma_dfl_tmpl[j]; + snprintf(cft->name, MAX_CFTYPE_NAME, "cma.%s.%s", + cma_get_name(&cma_areas[i]), + cma_dfl_tmpl[j].name); + cft->private =3D i; /* cma area index for counters in callbacks. */ + lockdep_register_key(&cft->lockdep_key); + } + + WARN_ON(cgroup_add_dfl_cftypes(&memory_cgrp_subsys, cma_dfl_files)); + + return 0; +} +subsys_initcall(mem_cgroup_cma_init); +#endif /* CONFIG_CMA */ --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B6F23DE429 for ; Fri, 21 Aug 2026 18:58:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338698; cv=none; b=q3URdxROU4po0SZGBM4vD4dBKxQ/Kw3XCkTS0RlJJKeGK6JCjeLFVKuu/57NLkRL98H/6PIiQ3PKqmYUBa1t2fP7jIAy/Ay7rWn4qCGif4Tm55hKt+UO/eoKTR2HBr0mDjKEIWEutx0q3cgCKt67pIaVBAic3hz1Y+j3pNoekG4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338698; c=relaxed/simple; bh=nUrrX6fvJ8xXWDGBUO+9oVkzQeBBL3WL+YrpDDcGXjk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RW++Kz5EO+NUTjYNgD1II+dXIqMjRXZQeRqtlsVwCr7dllB9OVmECSl/Xq6OW9q0Qv4FAaAaCU/K3pfAH9SvgK5PTwxv4r4yF0cH+sJ2ct7QW1uvv7Jj3/s2pGS/zaIDzMbQaiRHNV7YnKCEwQ9ENxvI9zIQ2ptrN/25dubgwcA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=U/c1PvuH; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=RqbbnNPr; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="U/c1PvuH"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="RqbbnNPr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338695; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=G/jSTYPb5+iqfnKrVpM0EYbQbnYNP4KDzbEmhzVmVac=; b=U/c1PvuHUOcV2C93JYxB+5da0QGEXMtHUoILj0AfAKEDRunh4CLB7bLNstL8yocNKsKOi+ yzPLS0jzgBt4TBZdjRsE+TWKaLXtQvHoce3GlUIAemlLQG8edQYofX0ody3pSyFRV/skwG ujK1z1nVe3/15Zfd0zPIiBorRQfTa0Q= Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-386-uuo2bF2GOEyLNn2OoIXMTA-1; Fri, 21 Aug 2026 14:58:07 -0400 X-MC-Unique: uuo2bF2GOEyLNn2OoIXMTA-1 X-Mimecast-MFC-AGG-ID: uuo2bF2GOEyLNn2OoIXMTA_1787338687 Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-5174a23afcbso20608291cf.3 for ; Fri, 21 Aug 2026 11:58:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338687; x=1787943487; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=G/jSTYPb5+iqfnKrVpM0EYbQbnYNP4KDzbEmhzVmVac=; b=RqbbnNPrQpdUFOXnIcCmfqjz78gnIKTFTulla98SVS9yyqQxUD+SM6fPZaUyyNcEt2 iqN12iiMW+l70aZPA+NRYVdTAQvajKeLjy+k7J7HcgxgmTiYjVLY8FAC4TOQsdaGYDZ1 0fH1HA4vLr16P5bAqXeV8qgN3NGcEywgi7MTJ3IF15bj4Eck+ZBTgMkE8ds2AZ1fL2A5 VhxfseF5rsEksM7BC9+W2OZAypaf3axoW5Sa4L+Zz9bUkqOJyBTGywWfYvVGnOPkhY48 cJvq/SxzlwPXAZxHxU7aJJZnSlU83/8tRUfGVjBQD6YyvpfzMQlfmlIKq+ixBawMPVCe /z+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338687; x=1787943487; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=G/jSTYPb5+iqfnKrVpM0EYbQbnYNP4KDzbEmhzVmVac=; b=XtXUO2E2tHKtPgnt7CQ0qUfv3qbRFgLmCisj5ru4hw7L8fLzOViefaticmhTQK+Bos XGLEKZtNu6dM2hNC8oMSsg9WHKOQgIE87vbH3m9XyZ5KzXu7nLEli1ne+a7SRHrM1LWW +3I46f4zEZ2pnW9uj+y9CqiG9wFnf6vR42L0y+KHw4NYgQ+lpYYAnSMyC8jxWtUuJ3uR lKgp9h9HDlg9hBgSKNluIe2A9oLQ4MKECR6c4B4f7jSLVlUIqnjPHAT4hCS++YNykUJZ HEYOOjVIezvTkGjl9Bqx6uG3G7lUyg4HT6ZRmLCFnZEj42h4HSHgQEflCcQzrhL1qJy+ gP9g== X-Forwarded-Encrypted: i=1; AHgh+Rp80xCg/u5a01PgqWcIwBbQuq74Yy1I5Fw9hQsqjaqSelBvlkt917oJ8uCgdKwvaTAlnTPxuC8XKu3MboU=@vger.kernel.org X-Gm-Message-State: AFuF++lQtem2942gP5yUvokz6D3LTq2QrD1vFma5Om/S/MQomAfdNeFH 8TZb1z2+dI8oW9223NNdoIdm8D+w/6o4ZPnQ3MeBLFcIztf7BZ9dLGhq8xhkVikf/jufbZbG3m4 SzQH1qCQps+Nxvw1Frmv0hqOoldvbgaoo6IKUHIqexTRToRBg0VgcSO+PE/Ez2VColw== X-Gm-Gg: AR+sD13HcD6fthhNaPwNgtYAykrnpBK7w5Y3kr+mjogcT3EL2NTpiFt9xwyLoqVZOAY 8w6VBpqHXJErbOmH2NzQPP/cdNMf4lLxH5nwmNebAaxNSbPmPYWdSWmLX1J18679dCEJtotVjjm EXXkOX+Ps+9osiJo06pzvbFjYmWrgeKVjDU3DjXcD7vZ+knOqKAkQ2ZxjRj9Uej4kYe/ix7XWfu RZuoWoiBM32jCidYWg51KUObc8roF7muJHOQ5ynFzomdtHfp/ip/v/vnVZl9SN70QKTTAYcIUnV LiPebkg7AoQwLyy4K38emfnf6XMdTpG+JxZcDymcChbHY4zLYUmC4kWRtdAzgwUUr2NUrR0GUAA etF3bDa0A+CCa/xDCmNEIcOLWZgIPrfiK5F1mKFo4ry95 X-Received: by 2002:a05:622a:1353:b0:52d:74ac:6ff1 with SMTP id d75a77b69052e-52df5a08383mr81012191cf.25.1787338687116; Fri, 21 Aug 2026 11:58:07 -0700 (PDT) X-Received: by 2002:a05:622a:1353:b0:52d:74ac:6ff1 with SMTP id d75a77b69052e-52df5a08383mr81011751cf.25.1787338686645; Fri, 21 Aug 2026 11:58:06 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-52e099a8331sm1163531cf.9.2026.08.21.11.58.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:58:05 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:56:59 -0400 Subject: [PATCH 07/11] selftests: cgroup: add cma configs for cgroup selftest suite Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-7-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Enable CMA and the dma-buf CMA heap. The CMA memcg tests will use the dma-buf heap to allocate in the CMA and exercise the charge/uncharge accounting. Signed-off-by: Eric Chanudet --- tools/testing/selftests/cgroup/config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/testing/selftests/cgroup/config b/tools/testing/selftest= s/cgroup/config index 39f979690dd3..c4f7df4f1b24 100644 --- a/tools/testing/selftests/cgroup/config +++ b/tools/testing/selftests/cgroup/config @@ -4,3 +4,7 @@ CONFIG_CGROUP_FREEZER=3Dy CONFIG_CGROUP_SCHED=3Dy CONFIG_MEMCG=3Dy CONFIG_PAGE_COUNTER=3Dy +CONFIG_CMA=3Dy +CONFIG_DMA_CMA=3Dy +CONFIG_DMABUF_HEAPS=3Dy +CONFIG_DMABUF_HEAPS_CMA=3Dy --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AF045317173 for ; Fri, 21 Aug 2026 18:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338694; cv=none; b=Mykmg3+uoReREHtf6Rl6YXA1mhV76W8/0LBkeCz2KOdRa6nc/eWej7yQCYOaLfq9OnZbxsZOtjTvl5Oha9Q5LpODTizrsw4yth1D4ecDV7G8XHrDbDdzz+aEBs2OeulDwZRgE6gVZR17V0ngmJ9xz9GabszB5s6NYdLqC5X2Nbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338694; c=relaxed/simple; bh=TCbGsETC5zbx2qOdJrl9p/Ic1W1ZL40CCT82Qzdw3mc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iKLCvRU8ca5cSJCOUkqD/tyLYcHupR15xDCHZnLl2TYyvGTqacZSI+WDvTt8EBHrZRK8hKpknUanCYnDbI+e4qYlT2U7hwRg++84kWCLp6gbm9PjVEjHyqixk2HQt5WEu/k8VCEdPghJ0d0Pfa9AffcQJivIUI6Zp1sHOnSsSjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=gWOhLED0; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Hxj2v5xy; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gWOhLED0"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Hxj2v5xy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338691; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Kx9TWcXB6g4zQsYJ1k0m/LLY9asJkpc0FRvOq2JFBz8=; b=gWOhLED0UTiTgfFNH/tGin9atmfL93ENnG6Uic6Pd3wDl6GC5js35aGazYKcxhaBTvORd7 Y93dfsg0WYqgn+J9ZOEzj75cYdT9lSbAnvvyEvDXUe9jOBTsYNh1suvbIBdDTatUmzw2n5 M0eYvr1/rl7oxk70AvP5+sre7ibaLpY= Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-348-lLj5-gaUM5ucuun17zF9DQ-1; Fri, 21 Aug 2026 14:58:10 -0400 X-MC-Unique: lLj5-gaUM5ucuun17zF9DQ-1 X-Mimecast-MFC-AGG-ID: lLj5-gaUM5ucuun17zF9DQ_1787338689 Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-52dd69b00cfso15349911cf.3 for ; Fri, 21 Aug 2026 11:58:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338689; x=1787943489; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Kx9TWcXB6g4zQsYJ1k0m/LLY9asJkpc0FRvOq2JFBz8=; b=Hxj2v5xyOzyUxF/PLaxHl18N/3jBLr28za1o0M/u2QzEDK4lYGGLpW3g2gUx7itJm5 X97y8A8Vw5obo9N123Y28Pe9ZTzDR7BCsOMvNnMWc7uDS35GieSZLiXhCaHte2RRLPxX mWyJXGNRaiZGxxeZ0YME2GRnWCO+NMf5ycOMvjOepGJKENOPVTEaa1LRNszOB5jZ+i4/ IfsoIbSUJ9ps1ErQ0o+G9enwRvGgX9lQr7WO0SId1rpivLFc9J7J6bqxE/7LiKR/etr8 k0pup+fZLeBLszy7RQl7HWV1Uh9R2u2Cy/WaPkOOdfND0g7OYlBy8W0T4Leg8Ku/6W65 4N2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338689; x=1787943489; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Kx9TWcXB6g4zQsYJ1k0m/LLY9asJkpc0FRvOq2JFBz8=; b=G574eYxhHFsgNCCPePE+NiHxu9z1Wv8PG6BS9ZCt+yIABktbJvVXjdCHoK7xvZl9bi Lul78/PQKo0xmOr0WGBdlhuvbN8/6/+A4oALP/k/pZbWbW5zyjTSETqEh/6ndXcixO4R LOEgCqASiPKf7cuBSVgZmExp1KdkzTAAW3V8/N+QZ2XowrecgF3a8+dyBQkpGwZFm0Ir Ou8Cc+zpiDaDyGLgNu6CuVLZp7skHXYtzFiaZsLkBqQhgmTpFf6jYc/w2unM/jbuPvOc YpUvCfgQnw2JTEH+LLuQ1+Sv+FGjCIgwe6Y4gCo/T2d0jI5hiP8hn5C/vxXlw9qLHlsh gIfQ== X-Forwarded-Encrypted: i=1; AHgh+Rqw1GUvcY7yjOskOuoTsI7nF+HMWER57aS24wJIw0f5amJVzb13Q31QTcji5BfsJ1kUE72/gOY/E1z8Im4=@vger.kernel.org X-Gm-Message-State: AFuF++kcwZG79dDSmZEmvu2bOBmg/Jya0YP4nK3X8SVVmKsKsat7iPIq jDpdo5qFtv46jfGG5xJvgzaWj2NkA5KeBopSn5+co8cnaJkGky/BzRHU7XUwb0csh94SwGOP1Lo 49TrwPSKx27DKHMpnanPfAQ80j1u4BfOwgsl9QJawMBLUsLUS8T7prr/OXaIBw0ItvA== X-Gm-Gg: AR+sD106kGPWaVhNvkcwMdFyXOqh21cU0OJxW9K/y8e5Um1I0/pukrqswvyJ5J4ye2b VUr95VFd1hesaQq/d7D8ZPZ/JBvWqQY7I3rh2HC1xgE3nY1KUa+nbg3qT+SXQdB/tbQhlN+2hky TEAEit9XHyDl4WnOor3WPKPRjEuRT1zFjmqQnSMhzRD+4aws6y/F1uUaHQ2rtw9/YIGiB510OVe Q3pFCNMHZZNluOn9t5aMf900viRDyPSnAlijtwbM/hDl8Vk1pq3DitZKd/WknvcZdqiOl4okfcY ovco6Eq1nm0M9JMthyRC+UvZtr5+bBeIv1ezISDm6wmNbdkM8+fIQyg3+JagRdm7HEtQiVGJXrV ok+sB4d/Huc6JFNXMiy9v8JyzIddSzX+TGvOIMRsJYU6Q X-Received: by 2002:a05:622a:1496:b0:52d:a4e5:6b3c with SMTP id d75a77b69052e-52df5748a04mr82975851cf.15.1787338689304; Fri, 21 Aug 2026 11:58:09 -0700 (PDT) X-Received: by 2002:a05:622a:1496:b0:52d:a4e5:6b3c with SMTP id d75a77b69052e-52df5748a04mr82975391cf.15.1787338688779; Fri, 21 Aug 2026 11:58:08 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-52e09974c7asm1255941cf.6.2026.08.21.11.58.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:58:07 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:57:00 -0400 Subject: [PATCH 08/11] selftests: cgroup: add memcg cma tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-8-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Add test_cma_memcg with two simple tests to exercise CMA memcg accounting using the dma-buf CMA heap (/dev/dma_heap/default_cma_region). test_cma_charge allocates a 4MB buffer in the default CMA area, verifies memory.cma.reserved.current increased by that amount, then frees the buffer and verifies that the counter returns to its original value. test_cma_limit sets memory.cma.reserved.max to 2MB, attempts a 4MB allocation in the default CMA area and verifies it fails as expected. Skip the test if memory_cma_accounting is not enabled on the cgroupfs. Signed-off-by: Eric Chanudet --- tools/testing/selftests/cgroup/.gitignore | 1 + tools/testing/selftests/cgroup/Makefile | 2 + tools/testing/selftests/cgroup/test_cma_memcg.c | 193 ++++++++++++++++++++= ++++ 3 files changed, 196 insertions(+) diff --git a/tools/testing/selftests/cgroup/.gitignore b/tools/testing/self= tests/cgroup/.gitignore index 952e4448bf07..b9a4298d4944 100644 --- a/tools/testing/selftests/cgroup/.gitignore +++ b/tools/testing/selftests/cgroup/.gitignore @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only test_core +test_cma_memcg test_cpu test_cpuset test_freezer diff --git a/tools/testing/selftests/cgroup/Makefile b/tools/testing/selfte= sts/cgroup/Makefile index e01584c2189a..601d930160a4 100644 --- a/tools/testing/selftests/cgroup/Makefile +++ b/tools/testing/selftests/cgroup/Makefile @@ -8,6 +8,7 @@ TEST_PROGS :=3D test_stress.sh test_cpuset_prs.sh test_= cpuset_v1_hp.sh TEST_GEN_FILES :=3D wait_inotify # Keep the lists lexicographically sorted TEST_GEN_PROGS =3D test_core +TEST_GEN_PROGS +=3D test_cma_memcg TEST_GEN_PROGS +=3D test_cpu TEST_GEN_PROGS +=3D test_cpuset TEST_GEN_PROGS +=3D test_freezer @@ -24,6 +25,7 @@ include ../lib.mk include lib/libcgroup.mk =20 $(OUTPUT)/test_core: $(LIBCGROUP_O) +$(OUTPUT)/test_cma_memcg: $(LIBCGROUP_O) $(OUTPUT)/test_cpu: $(LIBCGROUP_O) $(OUTPUT)/test_cpuset: $(LIBCGROUP_O) $(OUTPUT)/test_freezer: $(LIBCGROUP_O) diff --git a/tools/testing/selftests/cgroup/test_cma_memcg.c b/tools/testin= g/selftests/cgroup/test_cma_memcg.c new file mode 100644 index 000000000000..b5b5ea140518 --- /dev/null +++ b/tools/testing/selftests/cgroup/test_cma_memcg.c @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: GPL-2.0 +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include "kselftest.h" +#include "cgroup_util.h" + +#define CMA_HEAP_DEFAULT_PATH "/dev/dma_heap/default_cma_region" +#define CMA_RESERVED_CURRENT "memory.cma.reserved.current" +#define CMA_RESERVED_MAX "memory.cma.reserved.max" + +static int cma_heap_alloc(int heap_fd, size_t size) +{ + struct dma_heap_allocation_data data =3D { + .len =3D size, + .fd_flags =3D O_RDWR | O_CLOEXEC, + }; + + if (ioctl(heap_fd, DMA_HEAP_IOCTL_ALLOC, &data) < 0) + return -1; + + return data.fd; +} + +static int test_cma_charge(const char *root) +{ + int heap_fd =3D -1, buf_fd =3D -1; + int rc =3D KSFT_FAIL, in_cg =3D 0; + size_t size =3D 4UL << 20; + long before, after; + char *cg; + + cg =3D cg_name(root, "memcg_cma_charge"); + if (!cg) + goto cleanup; + + if (cg_create(cg)) + goto cleanup; + + if (cg_enter_current(cg)) + goto cleanup; + in_cg =3D 1; + + heap_fd =3D open(CMA_HEAP_DEFAULT_PATH, O_RDONLY | O_CLOEXEC); + if (heap_fd < 0) { + ksft_print_msg("cannot open CMA heap (%m)\n"); + goto cleanup; + } + + before =3D cg_read_long(cg, CMA_RESERVED_CURRENT); + + buf_fd =3D cma_heap_alloc(heap_fd, size); + if (buf_fd < 0) { + ksft_print_msg("cannot allocate in CMA heap (%m)\n"); + goto cleanup; + } + + after =3D cg_read_long(cg, CMA_RESERVED_CURRENT); + + if (after - before < (long)size) { + ksft_print_msg( + "invalid CMA counter after charge: before=3D%ld after=3D%ld\n", + before, after); + goto cleanup; + } + + close(buf_fd); + buf_fd =3D -1; + + after =3D cg_read_long(cg, CMA_RESERVED_CURRENT); + if (!values_close(before, after, 3)) { + ksft_print_msg( + "invalid CMA counter after uncharge: before=3D%ld after=3D%ld\n", + before, after); + goto cleanup; + } + + rc =3D KSFT_PASS; + +cleanup: + if (buf_fd >=3D 0) + close(buf_fd); + if (heap_fd >=3D 0) + close(heap_fd); + + if (in_cg) + cg_enter_current(root); + cg_destroy(cg); + free(cg); + + return rc; +} + +static int test_cma_limit(const char *root) +{ + int heap_fd =3D -1, buf_fd =3D -1; + int rc =3D KSFT_FAIL, in_cg =3D 0; + size_t size =3D 4UL << 20; + char *cg; + + cg =3D cg_name(root, "memcg_cma_limit"); + if (!cg) + goto cleanup; + + if (cg_create(cg)) + goto cleanup; + + if (cg_enter_current(cg)) + goto cleanup; + in_cg =3D 1; + + if (cg_write(cg, CMA_RESERVED_MAX, "2M")) { + ksft_print_msg("cannot set CMA limit (%m)\n"); + goto cleanup; + } + + heap_fd =3D open(CMA_HEAP_DEFAULT_PATH, O_RDONLY | O_CLOEXEC); + if (heap_fd < 0) { + ksft_print_msg("cannot open CMA heap (%m)\n"); + goto cleanup; + } + + buf_fd =3D cma_heap_alloc(heap_fd, size); + if (buf_fd >=3D 0) { + ksft_print_msg("CMA limit not enforced.\n"); + close(buf_fd); + } else + rc =3D KSFT_PASS; + +cleanup: + if (heap_fd >=3D 0) + close(heap_fd); + + if (in_cg) + cg_enter_current(root); + cg_destroy(cg); + free(cg); + + return rc; +} + +#define T(x) { x, #x } +struct cma_memcg_tests { + int (*fn)(const char *root); + const char *name; +} tests[] =3D { + T(test_cma_charge), + T(test_cma_limit), +}; +#undef T + +int main(int argc, char *argv[]) +{ + char root[PATH_MAX]; + int has_memory_cma_acc, i; + + ksft_print_header(); + ksft_set_plan(ARRAY_SIZE(tests)); + + has_memory_cma_acc =3D proc_mount_contains("memory_cma_accounting"); + if (has_memory_cma_acc < 0) + ksft_exit_skip("cannot query cgroup mount option.\n"); + else if (!has_memory_cma_acc) + ksft_exit_skip("CMA accounting is disabled.\n"); + + if (cg_find_unified_root(root, sizeof(root), NULL)) + ksft_exit_skip("cgroupfs is not available.\n"); + + if (cg_read_strstr(root, "cgroup.controllers", "memory")) + ksft_exit_skip("memory controller is not available (CONFIG_CGROUP_MEMCG?= )\n"); + + for (i =3D 0; i < ARRAY_SIZE(tests); ++i) { + switch (tests[i].fn(root)) { + case KSFT_PASS: + ksft_test_result_pass("%s\n", tests[i].name); + break; + case KSFT_SKIP: + ksft_test_result_skip("%s\n", tests[i].name); + break; + default: + ksft_test_result_fail("%s\n", tests[i].name); + break; + } + } + + ksft_finished(); +} --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2DC273DEAEB for ; Fri, 21 Aug 2026 18:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338696; cv=none; b=aJhaw6Y17loefRHvmL97FZOHE/Uz1zm69av8Qap5JN427lREQLtBGjI79osIV4KxJ7QiGQyRY3pTBWO4WO+NPloymggnVzth9Lj7SOZHdG2a9MWpvzAV8hdx7zLA/CQiT7rljEBKxm0EsSOQCGvuhgpZcoAgy7s1YisUAoomMGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338696; c=relaxed/simple; bh=Rj1uN9sO0+0eAEpjdehT8sKOBNe7Ctc1s/qVw1u0B/A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SNBEkk9k9iVAFCWOl+pwwiIACvyZx8h82c+M5JJ3RakiwWevWY/hl7IeT4MTP7nFpTjIWIRQd1y/qdd+4KsS5GJ0XZdnfcNYXXs/SXG8mcDI5ngrnZGNwwS+dZcLJO9McqGAx/EFG2XPjuOxxdIJMD1MHmDerry8/ZUxzSA4MX4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=hrDpbLyV; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=bYEWsG2h; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="hrDpbLyV"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="bYEWsG2h" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338693; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jb8nkZgnYdLG8ktPFayByOUpa/ch44LcnfTYgPP/10M=; b=hrDpbLyV3Gt8Cq58qJdk8tmzaO6BQGzJUthltqLx1JHMg/hDZB7+GC7MQGKpBsb++QXhGQ DLYumPEMmXLo+5sMurn2nvtHY0Ex5WdnfaG8jcxdDNiMd/se4MyljaRmHgW8lmqVRcc8DP 597m0Ue8yGjqwMPQh8mGxVzf5COhxAQ= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-248-WE-jaKAjOsa5FktyT9pE0A-1; Fri, 21 Aug 2026 14:58:11 -0400 X-MC-Unique: WE-jaKAjOsa5FktyT9pE0A-1 X-Mimecast-MFC-AGG-ID: WE-jaKAjOsa5FktyT9pE0A_1787338691 Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-92e52306621so105803285a.1 for ; Fri, 21 Aug 2026 11:58:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338691; x=1787943491; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=jb8nkZgnYdLG8ktPFayByOUpa/ch44LcnfTYgPP/10M=; b=bYEWsG2hyD9HXNWQRM4S5snQALdv+ujihPmW2eua23zChwkJEYezZzat2wdXsRijIP huSLwnm8fzL2/BAN1ZO7OGZh7kio8aHiJQFt7SjQqW+gT/NALPP65j2uPT+VeFJ0yYAM jHejqIc6DjCr784XwZAlMXQcDAqBqh0A28uBEBJamc8ezERclRSCtwZnl6ypJsPesLV7 q9Ef21Z1ccNU725UdtKEqMb3ku1kRAUmX948/QEBOUdAj6P7rrOwKnjX4PuqAqO+zril M4P5fgD0VbkKV2O581EGWXB1vbLyp9KnlGnRiR9Gr6yAuVwqwU93z3+/9+AlWTGCBymg cNbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338691; x=1787943491; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=jb8nkZgnYdLG8ktPFayByOUpa/ch44LcnfTYgPP/10M=; b=YEcmQ+Bg0HqL5NU7q83ge5tg6GylLlbiWGjyih1/5qwSPU020+TKHTwTpVpu/UBl9y MebIFkjzrrQXqYoXiZ7Z4XLSsrOXiKD+5dfsrnxrwY96+M2FZqApSLIcaMwZ5sjyhp4P yDu8ThD3f7+VxUE2mruX+uaXdmt2/JcRfhrt3KTb+KcAYJtZ9vR11xCXL4m2U48qxhaW pAiWgnvBMDqep3qrwGMVeD1HE3BP4uUhgfYSaLJgeK/ryCRoqCT19o/W0EApEO7xpmnU Gc2S7JsA6twk/agoj7pZ3w/MYiM1uhYfmp2nFH4dF4GiXL9y8GpD80K3xrsnzLi/thWl ZQHA== X-Forwarded-Encrypted: i=1; AHgh+Rp6KtSrLUQ35vHud+XtS/T/cQ5U0osLIqKJxWpWcfPnjCR5Z0AU2Zn3MEHbqj6mOtGgLgqT8wVGWg8jVI8=@vger.kernel.org X-Gm-Message-State: AFuF++lZ73/C7rfLz+Innfbv5+znWRq5ucjX2jbOF1NpFcDDaTfM/zm7 7Hxk/zpqvSMUZMSeznpT0yw3ZsKYNBb9zDX6rKgbY+aw3lWxrdemscxiVSEAkDQ+mQas4txM2s4 vEZd/RdUWJth6vTPXrMBLCr+nwHUQxQ2lGWctGLUpk3epCCg47Cg2rjdlHnB8ZmeTZg== X-Gm-Gg: AR+sD10UjCT9FEZYb3IDGq8O2/JwtMsoOYLGo6LBBklsG8rx6izfSvP3UprFnZXLyzp MpeCG1X6yzSmt+ZDb9fljJaBx1PM+UHs28zVFHttzmqsjy1obCiv33lNEmsXbMMtsr30IYMA4uL fyxWNjeGZEZxyh8POkVcy4bFkoq2B429BDTCSLBngElvwBdXj/44ibk/sJLD/UAJD9ywS8LiqkH 19/ekMuk+HbCIjy+pBiEfqynNb30bVsm8hjmhpx2fuZGleyr69XMvBdQuPKou/t3jiV+cGa+vkz IH2NnZVBbZlgjqfHsLmAPx8MmAtLd02IyU88AvUNAE/kXvURSo9cwB8JuDISw7exK7mOpAxcqCv pGBw6vqJIRLCopupBqYrZP/4rCxOom9swJuCKHCaEokOc X-Received: by 2002:a05:620a:6192:b0:915:9e84:85d1 with SMTP id af79cd13be357-9373952c7a5mr808446785a.23.1787338691124; Fri, 21 Aug 2026 11:58:11 -0700 (PDT) X-Received: by 2002:a05:620a:6192:b0:915:9e84:85d1 with SMTP id af79cd13be357-9373952c7a5mr808442485a.23.1787338690612; Fri, 21 Aug 2026 11:58:10 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id af79cd13be357-937204b7b6bsm663030085a.20.2026.08.21.11.58.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:58:09 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:57:01 -0400 Subject: [PATCH 09/11] selftests: cgroup: add a vmtest script for memcg Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-9-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Following dmem's example[1], add a vmtest-memcg.sh to provide a repeatable VM workflow using virtme-ng for memcg tests. Boot a VM using virtme-ng with cma=3D64M in its kargs and enable memory_cma_accounting on cgroupfs, then run the cgroup tests inside the guest. Provide -b to build the kernel first, -q to use a different qemu binary, -s to start a shell in the VM, and -v for verbose boot. [1] https://lore.kernel.org/all/20260706-kunit_cgroups-v5-3-6c42c8753468@re= dhat.com/ Signed-off-by: Eric Chanudet --- tools/testing/selftests/cgroup/vmtest-memcg.sh | 196 +++++++++++++++++++++= ++++ 1 file changed, 196 insertions(+) diff --git a/tools/testing/selftests/cgroup/vmtest-memcg.sh b/tools/testing= /selftests/cgroup/vmtest-memcg.sh new file mode 100755 index 000000000000..b19b96731784 --- /dev/null +++ b/tools/testing/selftests/cgroup/vmtest-memcg.sh @@ -0,0 +1,196 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# +# Copyright (c) 2026 Red Hat, Inc. +# +# Run cgroup memory controller selftests inside a virtme-ng VM +# Dependencies: +# * virtme-ng +# * busybox-static (used by virtme-ng) +# * qemu (used by virtme-ng) + +set -euo pipefail + +readonly SCRIPT_DIR=3D"$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && p= wd -P)" +readonly KERNEL_CHECKOUT=3D"$(realpath "${SCRIPT_DIR}"/../../../../)" + +source "${SCRIPT_DIR}"/../kselftest/ktap_helpers.sh + +readonly SSH_GUEST_PORT=3D"${SSH_GUEST_PORT:-22}" +readonly WAIT_PERIOD=3D3 +readonly WAIT_PERIOD_MAX=3D80 +readonly WAIT_TOTAL=3D$((WAIT_PERIOD * WAIT_PERIOD_MAX)) +readonly QEMU_PIDFILE=3D"$(mktemp /tmp/qemu_memcg_vmtest_XXXX.pid)" +readonly QEMU_OPTS=3D" --pidfile ${QEMU_PIDFILE} " + +BUILD=3D0 +QEMU=3D"qemu-system-$(uname -m)" +VERBOSE=3D0 +SHELL_MODE=3D0 +GUEST_TREE=3D"${GUEST_TREE:-$KERNEL_CHECKOUT}" + +usage() { + cat < QEMU binary/path (default: $QEMU) + -s Start interactive shell in VM + -v Verbose output (vng boot logs on stdout) +EOF + exit 1 +} + +die() { + echo "$*" >&2 + exit "${KSFT_FAIL}" +} + +cleanup() { + if [[ -s "$QEMU_PIDFILE" ]]; then + pkill -SIGTERM -F "$QEMU_PIDFILE" >/dev/null 2>&1 || true + fi + + if [[ -e "$QEMU_PIDFILE" ]]; then + rm -f "$QEMU_PIDFILE" + fi +} + +vm_ssh() { + stdbuf -oL ssh -q \ + -F "$HOME/.cache/virtme-ng/.ssh/virtme-ng-ssh.conf" \ + -l root "virtme-ng%$SSH_GUEST_PORT" \ + "$@" +} + +check_deps() { + for dep in vng "$QEMU" busybox pkill ssh; do + if ! command -v "$dep" >/dev/null 2>&1; then + echo "skip: dependency $dep not found" + exit "$KSFT_SKIP" + fi + done +} + +handle_build() { + if [[ ! "$BUILD" -eq 1 ]]; then + return + fi + + if [[ ! -d "$KERNEL_CHECKOUT" ]]; then + echo "-b requires $0 to be called from the kernel source tree" >&2 + exit 1 + fi + + pushd "$KERNEL_CHECKOUT" &>/dev/null + + if ! vng --kconfig --config "$SCRIPT_DIR"/config; then + die "failed to generate .config for kernel source tree ($KERNEL_CHECKOUT= )" + fi + + if ! make -j"$(nproc)"; then + die "failed to build kernel from source tree ($KERNEL_CHECKOUT)" + fi + + popd &>/dev/null +} + +vm_start() { + local logfile=3D/dev/null + local verbose_opt=3D"" + local kernel_opt=3D"" + + if [[ "$VERBOSE" -eq 1 ]]; then + verbose_opt=3D"--verbose" + logfile=3D/dev/stdout + fi + + if [[ "$BUILD" -eq 1 ]]; then + kernel_opt=3D"${KERNEL_CHECKOUT}" + fi + + vng \ + --run \ + ${kernel_opt} \ + ${verbose_opt} \ + --qemu-opts=3D"$QEMU_OPTS" \ + --qemu=3D"$(command -v "$QEMU")" \ + --user root \ + --ssh "$SSH_GUEST_PORT" \ + --append "cma=3D64M" \ + --rw &>"$logfile" & + + local vng_pid=3D$! + local elapsed=3D0 + + while [[ ! -s "$QEMU_PIDFILE" ]]; do + kill -0 "$vng_pid" 2>/dev/null || \ + die "vng exited early; failed to boot VM" + [[ "$elapsed" -ge "$WAIT_TOTAL" ]] && \ + die "timed out waiting for VM boot" + sleep 1 + elapsed=3D$((elapsed + 1)) + done +} + +vm_wait_for_ssh() { + local i=3D0 + while true; do + vm_ssh -- true && break + i=3D$((i + 1)) + [[ "${i}" -gt "$WAIT_PERIOD_MAX" ]] && \ + die "timed out waiting for guest ssh" + sleep "$WAIT_PERIOD" + done +} + +check_guest_requirements() { + vm_ssh -- "grep -q memory /sys/fs/cgroup/cgroup.controllers" \ + || die "memory controller not available (CONFIG_MEMCG?)" + vm_ssh -- "[[ -e /dev/dma_heap/default_cma_region ]]" \ + || die "CMA heap not available (CONFIG_DMABUF_HEAPS_CMA? cma=3D cmdline?= )" +} + +setup_guest_cma_accounting() { + vm_ssh -- "mount -o remount,memory_cma_accounting /sys/fs/cgroup" \ + || die "failed to enable memory_cma_accounting" + vm_ssh -- "echo +memory > /sys/fs/cgroup/cgroup.subtree_control" \ + || die "failed to enable memory controller" +} + +run_test() { + vm_ssh -- "cd '$GUEST_TREE' && make -C tools/testing/selftests TARGETS=3D= cgroup" + vm_ssh -- "cd '$GUEST_TREE' && make -C tools/testing/selftests TARGETS=3D= cgroup run_tests" +} + +while getopts ":hvq:sb" opt; do + case "$opt" in + v) VERBOSE=3D1 ;; + q) QEMU=3D"${OPTARG}" ;; + b) BUILD=3D1 ;; + s) SHELL_MODE=3D1 ;; + h|*) usage ;; + esac +done + +trap cleanup EXIT + +check_deps +handle_build +echo "Booting virtme-ng VM..." +vm_start +vm_wait_for_ssh +echo "VM is reachable via SSH." + +if [[ "$SHELL_MODE" -eq 1 ]]; then + echo "Starting interactive shell in VM. Exit to stop VM." + vm_ssh -t -- "cd '$GUEST_TREE' && exec bash --noprofile --norc" + exit "$KSFT_PASS" +fi + +check_guest_requirements +setup_guest_cma_accounting + +echo "Running cgroup selftests in VM..." +run_test +echo "PASS: cgroup selftests completed" +exit "$KSFT_PASS" --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6365C3DDB15 for ; Fri, 21 Aug 2026 18:58:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338704; cv=none; b=tqP49fostPyfEv635U+cMhllCEc2kP0TgHJwtoisoHTXTq+5tPIXO13LU9gllgp1PGPfPLkPom+o5alB8XKvGeEo3NPERLgNpys9gHEXyksvRQh9pxHpKRMV/vjAt3OpUIks6HciO9GAsIvgWbS2H4pElRxorebn+eUWqfNVLLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338704; c=relaxed/simple; bh=orQNNaUZmojI+/cs8egxOMQvuXgFqATETxJY+MjSr8w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cImnj+Y0YSOASCUIjIpmIO3WtGX5S0CpxR2CYzlnj03/EQUiYHEiQmZETiC4vQjfxoVRVtOIRCz7NEpH3md+Yo00Ys1xjlylbqkl9rlo2oEErqyxX9he2arjHeueEXm7cxm15NrbhjerFhiNhnyKMhIvam0WVY+23eCaOBNizBs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=DKJg7AUH; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=LUTohYnG; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="DKJg7AUH"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="LUTohYnG" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338698; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=s7YiByawknR2bKXyMMS9faTlbP3TdC6Smi6Eshk/hFk=; b=DKJg7AUH3vZg8XvIEpRvW8lDImcbuNV1WC3Iyp7mMtG2GyTSylr3cDafwWlI9VcrZFIWsN Ft4w90J3AdpzuCMy6syrvb5EeVJvPJkm5IGwRfrHu/ClX4ez3nkmtc0zNJ2Dsc4jpl6yUf U4b6tQ6ZK6LXwEx0280e79FZT9r01Uw= Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-418-2wqHbv3XPkCSgE4mxKdBDg-1; Fri, 21 Aug 2026 14:58:16 -0400 X-MC-Unique: 2wqHbv3XPkCSgE4mxKdBDg-1 X-Mimecast-MFC-AGG-ID: 2wqHbv3XPkCSgE4mxKdBDg_1787338696 Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-9077b4c35c5so25632166d6.2 for ; Fri, 21 Aug 2026 11:58:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338696; x=1787943496; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=s7YiByawknR2bKXyMMS9faTlbP3TdC6Smi6Eshk/hFk=; b=LUTohYnGVgS0R5QUoInTii2VjCg/+5rXJisqABF9/1YrnGD85Q/ypeEsU814uU4dvf 0xrMkVBd02ZOz6f5jqxTqLVaJKSFY5dV5A0jzDqWAg7LwOeQEshximHrWaWQnYwujTOT wPK6UC9/tOtftYm5RgUGOG9jsfr+Gxdrihfet9i1DYE2LMr8IHU6BFYDCstzUIL+P3DM AtlL87lbWmGEIDHlfV+/dDaKp6GRo361CVlGFFYvsP7F4l8zzzCBcZ0iqgQHdiQDFbNt oyCpepwwcpdG8UyOO7QR2ZcLzgxfXH523NmJyVbhLcc7OXBs98jlmdbw4MqsCD4XkAPb v+0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338696; x=1787943496; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=s7YiByawknR2bKXyMMS9faTlbP3TdC6Smi6Eshk/hFk=; b=cZdNicd7cZG9tAM4nWcOG/sCM18FeYfH+kMM5JygnqrGj6OvOzZ/e8kxZGU2fecQKZ B/QrQOPuXMX05SGJ60f7A1kQZERHTHLVPv/g38eGbWAkc/QRAS4MKzrQ5MCfDbl7CN1L zaRYx6vZmKBfVXjbVVgrZacpTIrpOUVbXWWbWCrygXXv9almHnaiMqKj8mP+OrM+BrEi 1ktYhtMGP+2RPlTHz5bx5p14PoNUbQoV6kV2MDtmHnAcI0OBQ8D7gUn+eQn+QF4Aufst PI7UeOeDsQ/eJVLkRPwYwBHYhz8iePadwW+k1RDejbFu2apNqBW6wTqJb5UmaLiLqYKx GApg== X-Forwarded-Encrypted: i=1; AHgh+RqdBIJeQ3ttdUsbyZysyLj/PiEXMztqdhzHBSg2i50qjgLCNly2o8t9MPm8S0KnwM2RVdzCP4mW16HoJH8=@vger.kernel.org X-Gm-Message-State: AFuF++lMe/PeDnX9OXduQxpYzIvYsYV9BTNQQDgpKukrqUMVe4QSvfGO 3iUMr9RHorJmGzAkiotXQI2vX+uWwxeIT92PYkONp0g1hOuebx01TGuopwIyY6gL9Qjy/mShnsW 6BcgGewHnP38TgQdVJEhZTZUT6QMRIOCqpFSdbGoB9Nts21lIskY/ypEnC8smLPwKUg== X-Gm-Gg: AR+sD10Xfv3g6niQsaVnHTagB3ZhVFuMTcqAv3oLYdL76eIAF7qWJ3UpbenvS4LMm/g e9X0JUse6pocFgEfnyoPkq3Bi7xZ3XGU9V7QZnWIQJ7mpQE9o3v+g0SFuoWw11K7PPi3RRHW8/3 1SpuPNwnz4BNHiXtEKb+UDo9JkfA4w1prc0vemaIi03COxZ++h6LraxW71nRhtKeZyrram4a6I4 q3difmsX8Iro/zqjptolsstLXTN9/lEbMlWS4+m/aWEuQyi8GUUP1Kn6P5zITGoC4Uf5EYgG3Lv ytYgPiNamwUea8xQ3IpFr8OvKZP7m4LD/8wD1mEXG5XIqARvy4FSXPt2R7lP4EDNjnigqAOpZ0F HD6kOaJTrlvr1NC/Hzrg+iTxUZbILYsTUlBsHnu9pB/TZ X-Received: by 2002:a05:6214:3114:b0:8de:25f7:98bc with SMTP id 6a1803df08f44-90c8fa2ace7mr7854546d6.22.1787338695745; Fri, 21 Aug 2026 11:58:15 -0700 (PDT) X-Received: by 2002:a05:6214:3114:b0:8de:25f7:98bc with SMTP id 6a1803df08f44-90c8fa2ace7mr7854186d6.22.1787338695297; Fri, 21 Aug 2026 11:58:15 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-90c6b42455dsm51197756d6.37.2026.08.21.11.58.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:58:11 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:57:02 -0400 Subject: [PATCH 10/11] selftests: cgroup: add memcg hugetlb_cma tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-10-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 test_hugetlb_cma_charge gets a hugepage by incrementing nr_hugepages, confirms memory.cma.hugetlb0.current increased as expected, then releases it and checks the counter returns to its initial value. test_hugetlb_cma_limit sets memory.cma.hugetlb0.max to 0, tries to allocate a hugepage and verifies it fails. Signed-off-by: Eric Chanudet --- tools/testing/selftests/cgroup/test_cma_memcg.c | 209 ++++++++++++++++++++= ++++ 1 file changed, 209 insertions(+) diff --git a/tools/testing/selftests/cgroup/test_cma_memcg.c b/tools/testin= g/selftests/cgroup/test_cma_memcg.c index b5b5ea140518..9bd41d9a6177 100644 --- a/tools/testing/selftests/cgroup/test_cma_memcg.c +++ b/tools/testing/selftests/cgroup/test_cma_memcg.c @@ -4,7 +4,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -15,6 +17,10 @@ #define CMA_RESERVED_CURRENT "memory.cma.reserved.current" #define CMA_RESERVED_MAX "memory.cma.reserved.max" =20 +#define HUGETLB_CMA_CURRENT "memory.cma.hugetlb0.current" +#define HUGETLB_CMA_MAX "memory.cma.hugetlb0.max" +#define HUGEPAGES_DIR "/sys/kernel/mm/hugepages" + static int cma_heap_alloc(int heap_fd, size_t size) { struct dma_heap_allocation_data data =3D { @@ -145,6 +151,207 @@ static int test_cma_limit(const char *root) return rc; } =20 +static long find_largest_hugepage_size_kb(void) +{ + DIR *dir; + struct dirent *entry; + long max_size =3D 0; + + dir =3D opendir(HUGEPAGES_DIR); + if (!dir) + return -1; + + while ((entry =3D readdir(dir)) !=3D NULL) { + long size; + + if (sscanf(entry->d_name, "hugepages-%ldkB", &size) =3D=3D 1) { + if (size > max_size) + max_size =3D size; + } + } + closedir(dir); + + return max_size > 0 ? max_size : -1; +} + +static long read_sysfs_long(const char *path) +{ + FILE *f; + long val =3D -1; + + f =3D fopen(path, "r"); + if (!f) + return -1; + if (fscanf(f, "%ld", &val) !=3D 1) + val =3D -1; + fclose(f); + return val; +} + +static int write_sysfs_long(const char *path, long val) +{ + FILE *f; + int rc; + + f =3D fopen(path, "w"); + if (!f) + return -1; + rc =3D fprintf(f, "%ld", val); + fclose(f); + return rc < 0 ? -1 : 0; +} + +static int test_hugetlb_cma_charge(const char *root) +{ + int rc =3D KSFT_SKIP, in_cg =3D 0; + long hpage_size_kb, hpage_size_bytes; + long orig_nr =3D -1, new_nr, before, after; + char nr_path[PATH_MAX]; + char *cg; + + hpage_size_kb =3D find_largest_hugepage_size_kb(); + if (hpage_size_kb < 0) { + ksft_print_msg("no hugepage size found\n"); + return KSFT_SKIP; + } + hpage_size_bytes =3D hpage_size_kb * 1024; + + snprintf(nr_path, sizeof(nr_path), + HUGEPAGES_DIR "/hugepages-%ldkB/nr_hugepages", hpage_size_kb); + + cg =3D cg_name(root, "memcg_hugetlb_cma_charge"); + if (!cg) + goto cleanup; + + if (cg_create(cg)) + goto cleanup; + + if (cg_enter_current(cg)) + goto cleanup; + in_cg =3D 1; + + if (cg_read_long(cg, HUGETLB_CMA_CURRENT) < 0) { + ksft_print_msg("hugetlb CMA counters not available\n"); + goto cleanup; + } + + orig_nr =3D read_sysfs_long(nr_path); + if (orig_nr < 0) { + ksft_print_msg("cannot read %s\n", nr_path); + goto cleanup; + } + + before =3D cg_read_long(cg, HUGETLB_CMA_CURRENT); + + if (write_sysfs_long(nr_path, orig_nr + 1)) { + ksft_print_msg("cannot write %s\n", nr_path); + goto cleanup; + } + + new_nr =3D read_sysfs_long(nr_path); + if (new_nr <=3D orig_nr) { + ksft_print_msg("failed to allocate a hugepage\n"); + goto cleanup; + } + + rc =3D KSFT_FAIL; + after =3D cg_read_long(cg, HUGETLB_CMA_CURRENT); + + if (after - before < hpage_size_bytes) { + ksft_print_msg( + "hugetlb CMA counter not charged: before=3D%ld after=3D%ld expected +%l= d\n", + before, after, hpage_size_bytes); + goto cleanup; + } + + write_sysfs_long(nr_path, orig_nr); + + after =3D cg_read_long(cg, HUGETLB_CMA_CURRENT); + if (!values_close(before, after, 3)) { + ksft_print_msg( + "hugetlb CMA counter not uncharged: before=3D%ld after=3D%ld\n", + before, after); + goto cleanup; + } + + rc =3D KSFT_PASS; + +cleanup: + if (orig_nr >=3D 0) + write_sysfs_long(nr_path, orig_nr); + + if (in_cg) + cg_enter_current(root); + cg_destroy(cg); + free(cg); + + return rc; +} + +static int test_hugetlb_cma_limit(const char *root) +{ + int rc =3D KSFT_SKIP, in_cg =3D 0; + long hpage_size_kb; + long orig_nr, new_nr; + char nr_path[PATH_MAX]; + char *cg; + + hpage_size_kb =3D find_largest_hugepage_size_kb(); + if (hpage_size_kb < 0) { + ksft_print_msg("no hugepage size found\n"); + return KSFT_SKIP; + } + + snprintf(nr_path, sizeof(nr_path), + HUGEPAGES_DIR "/hugepages-%ldkB/nr_hugepages", hpage_size_kb); + + cg =3D cg_name(root, "memcg_hugetlb_cma_limit"); + if (!cg) + goto cleanup; + + if (cg_create(cg)) + goto cleanup; + + if (cg_enter_current(cg)) + goto cleanup; + in_cg =3D 1; + + if (cg_read_long(cg, HUGETLB_CMA_MAX) < 0) { + ksft_print_msg("hugetlb CMA counters not available\n"); + goto cleanup; + } + + if (cg_write(cg, HUGETLB_CMA_MAX, "0")) { + ksft_print_msg("cannot set hugetlb CMA limit\n"); + goto cleanup; + } + + orig_nr =3D read_sysfs_long(nr_path); + if (orig_nr < 0) { + ksft_print_msg("cannot read %s\n", nr_path); + goto cleanup; + } + + write_sysfs_long(nr_path, orig_nr + 1); + new_nr =3D read_sysfs_long(nr_path); + + rc =3D KSFT_FAIL; + if (new_nr > orig_nr) { + ksft_print_msg("hugetlb CMA limit not enforced\n"); + write_sysfs_long(nr_path, orig_nr); + } else { + rc =3D KSFT_PASS; + } + +cleanup: + if (in_cg) + cg_enter_current(root); + cg_destroy(cg); + free(cg); + + return rc; +} + #define T(x) { x, #x } struct cma_memcg_tests { int (*fn)(const char *root); @@ -152,6 +359,8 @@ struct cma_memcg_tests { } tests[] =3D { T(test_cma_charge), T(test_cma_limit), + T(test_hugetlb_cma_charge), + T(test_hugetlb_cma_limit), }; #undef T =20 --=20 2.53.0 From nobody Mon Sep 28 12:34:46 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18D943DE450 for ; Fri, 21 Aug 2026 18:58:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338707; cv=none; b=W9D0YCymEpEfjWyyQrL5TCEZRtckkcowjgh+UeLAhh9loZLxu1HlFBkgKII98rTRWPWW/HRDIpObKwjGmptSuWyOUHCyegmhzAPDWVEVB2SVcaLbZlCNhO2V+dwATwxLIEbDg72Dpsxdp1lrVCs22tyDAT0iG36XdPdHd01JPc8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787338707; c=relaxed/simple; bh=rkPzVVDgoOEfaKV2nREKbkjAXfc0pbvyd/oIWLflpYE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SPWDlDAaOVGIXAUrJUe4BpmHXeJax+8bzkpblQbOhtNcBUgZ9BhJvHPcZ9KFOAyeMt7sscTL5zwvVdjnYeTtf8eZfn5SYqzs1MqwcAYqlOzdmIS86hPFjp2brXbrj7vzq+IFhXMKTFpfYpEA4Tohd9TMibf758x+woX/BtmRv2w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=SVoUO3oo; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=rxlCG2kq; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="SVoUO3oo"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="rxlCG2kq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787338700; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/8joInrEG3wyxgyxVErJ5zORrPbi9GYjPiUJzUhqISA=; b=SVoUO3oop36qNTEc/VNnIssNADWFJc2/g+pVtndwaZPqTouLzjtbKZTDaOdf6iiTC5pLXA wdv/46kswBj35TSvQYSLTKEC7Wj7BiktnwAEBYj+MmOQzWxWDlfisdNsCM1JfNTvuFh3PV SnKfja0z80dT1ghHGNAYdA5fsnA7z/0= Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-320-clQGKRiiMG6jf0TocAV0tg-1; Fri, 21 Aug 2026 14:58:17 -0400 X-MC-Unique: clQGKRiiMG6jf0TocAV0tg-1 X-Mimecast-MFC-AGG-ID: clQGKRiiMG6jf0TocAV0tg_1787338697 Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-8eeba1d9e47so9186056d6.2 for ; Fri, 21 Aug 2026 11:58:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1787338697; x=1787943497; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/8joInrEG3wyxgyxVErJ5zORrPbi9GYjPiUJzUhqISA=; b=rxlCG2kqriWBMcgab2d3GVQ2Te0Knk3Gk4AHZpf0049aZuDbpX0tXN239B8k7QTrqf iUaUtwvyPYN9SDqseT28lrdjCReapuR89ef8EWveh8gf+P4A4HhjwpVuuoI0jfRLcWZH rYuCF/eh/pEk+Bh+a3g3VmCdp4cf7wAqOBoNF0Lae4Y765+br/2ZntD1Br8pvineUH82 Wvk9lHF5TCtAJYcNB6ofA4I/aukQMANFbZ0YKPY/uZ+GKlcwT4TBeJC5B5zzLyDQHF/C zB/f72Q1qqGRI5/FZyI2qKM5tb98p4fOoZo2lHutQ+Q3byGFmJJQsD7JSR45gfqRa3CS 9yJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787338697; x=1787943497; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/8joInrEG3wyxgyxVErJ5zORrPbi9GYjPiUJzUhqISA=; b=Lmgv8IdLO0b1wKwM45EMtFdgBCNEEzkMrX9Ere9f7T1TU2ty56aVTpP+ATLVEvJCc+ 8+PhgA+VSTV8yiPWiMt56EvWJkXWHTQY7HX8ZbjgdaLNZORqPQdbr6r1AkN9Uf8RJoMI 5lRZbl2S2fFBw9FpNVRbjcF7aRX8xwla8RoZfY8PKotTuzf9bb+CLqpBxwuM1+ttfeeA 3+ZgqnPjluaesU5j9nFC6Ib1gxk1TVZxPAsrKJ+1yUtDpMY7V1CN4d0Ku0halc/IU8Z2 qnHPc8qc9RbURo2h/XQWJrDR4ZXVFHCwzrp43kFB7NyOBSBTcGvd6BfKLk6EZve8w/5q JfQA== X-Forwarded-Encrypted: i=1; AHgh+RqNN7IliXmfex5KXv3ktSW4SnKQsaNVH9nuASfBQ7FDqc+LamdjtQK9L4quSPkk8bf7PESs4DnEGbasR1s=@vger.kernel.org X-Gm-Message-State: AFuF++lszBEIqX8nUgEliJX+x6wO5rRkE0Q+KSkF55rfm48xes8gnk00 Y2rM7Bzw0FC6iq+JAgfzYwXzct25GGIlnSjPftPbau/wHgx5jzzzUvQMauBpksGEZ8M/3t21gw9 gsWmGnkuhuoBdNf/dN6kjtU7fsi8+S9TpqRGBVgj6jSX+294UULOBmBElG6KPc9aoqg== X-Gm-Gg: AR+sD11fseP9IriX3Zcij6Z+bBlVmdNhAMvKiSowRqH1BAcxUZQyiRIbbV5xkEfG3DO qAsFSYsXxItwczh7mbhHTqa1KkYHaIEWjDUI+XC+5f/NEXM3m79lmJMF9h/sYXP8PL7ZPkqGBke YkTiwKU3N4T28pDMXah8sSAmTIBsZRCcSjb5X+vUMk0utAaBOTFcDRcOIUcoXx0CQ2gGWpQGnCU v2YVlQEHmbMyUHb9YXpWUDstByCe1f3Fu3s6C9oxbzqf5OyrOgxEctoBQK6rJY2gS2oRdXXcjlc pz2UYY29Udp78bojz59e2+PNUuw6StQzz5n0do6rrloPFTW/1LE+A3oLq66CDkA/1+xsWdxaXNT lvWCadhzIoh6RVejNPiBwt9AMZj37zjlrV77f7Y+ECaxI X-Received: by 2002:a05:6214:21cb:b0:8f3:cf36:15ca with SMTP id 6a1803df08f44-90c8098e804mr82074726d6.9.1787338697314; Fri, 21 Aug 2026 11:58:17 -0700 (PDT) X-Received: by 2002:a05:6214:21cb:b0:8f3:cf36:15ca with SMTP id 6a1803df08f44-90c8098e804mr82074206d6.9.1787338696872; Fri, 21 Aug 2026 11:58:16 -0700 (PDT) Received: from localhost (pool-100-17-17-231.bstnma.fios.verizon.net. [100.17.17.231]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-90c5f2905d6sm68917236d6.29.2026.08.21.11.58.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Aug 2026 11:58:16 -0700 (PDT) From: Eric Chanudet Date: Fri, 21 Aug 2026 14:57:03 -0400 Subject: [PATCH 11/11] selftests: cgroup: amend vmtest-memcg to run the hugetlb cma tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260821-cma-memcg-regions-v1-11-d21b165b8440@redhat.com> References: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> In-Reply-To: <20260821-cma-memcg-regions-v1-0-d21b165b8440@redhat.com> To: Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Tejun Heo , Johannes Weiner , =?utf-8?q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Shuah Khan Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, Maxime Ripard , Albert Esteve , Eric Chanudet X-Mailer: b4 0.14.3 Add HUGETLBFS to the selftest configuration. Amend the vmtest script to pass hugetlb_cma=3D1G and hugetlb_cma_only=3D1. In order for hugepages to be available, ask qemu for 3G of memory so the CMA reservation succeeds. Signed-off-by: Eric Chanudet --- tools/testing/selftests/cgroup/config | 1 + tools/testing/selftests/cgroup/vmtest-memcg.sh | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/cgroup/config b/tools/testing/selftest= s/cgroup/config index c4f7df4f1b24..1c9034017682 100644 --- a/tools/testing/selftests/cgroup/config +++ b/tools/testing/selftests/cgroup/config @@ -8,3 +8,4 @@ CONFIG_CMA=3Dy CONFIG_DMA_CMA=3Dy CONFIG_DMABUF_HEAPS=3Dy CONFIG_DMABUF_HEAPS_CMA=3Dy +CONFIG_HUGETLBFS=3Dy diff --git a/tools/testing/selftests/cgroup/vmtest-memcg.sh b/tools/testing= /selftests/cgroup/vmtest-memcg.sh index b19b96731784..534a95ef5e07 100755 --- a/tools/testing/selftests/cgroup/vmtest-memcg.sh +++ b/tools/testing/selftests/cgroup/vmtest-memcg.sh @@ -116,7 +116,8 @@ vm_start() { --qemu=3D"$(command -v "$QEMU")" \ --user root \ --ssh "$SSH_GUEST_PORT" \ - --append "cma=3D64M" \ + --memory 3G \ + --append "cma=3D64M hugetlb_cma=3D1G hugetlb_cma_only=3D1" \ --rw &>"$logfile" & =20 local vng_pid=3D$! --=20 2.53.0