From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 761A9C3DA5D for ; Mon, 22 Jul 2024 16:25:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A437A6B0082; Mon, 22 Jul 2024 12:25:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9F4D86B0083; Mon, 22 Jul 2024 12:25:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8BAFD6B0085; Mon, 22 Jul 2024 12:25:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 6EFC36B0082 for ; Mon, 22 Jul 2024 12:25:13 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C32F91618DB for ; Mon, 22 Jul 2024 16:25:12 +0000 (UTC) X-FDA: 82367913264.20.7C49A76 Received: from mail-vs1-f52.google.com (mail-vs1-f52.google.com [209.85.217.52]) by imf09.hostedemail.com (Postfix) with ESMTP id 0343D14000D for ; Mon, 22 Jul 2024 16:25:10 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=qhT1F+5b; spf=pass (imf09.hostedemail.com: domain of fvdl@google.com designates 209.85.217.52 as permitted sender) smtp.mailfrom=fvdl@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721665488; h=from:from:sender: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:dkim-signature; bh=syTpRGvSO0E4azvLrelw/wgCBe3qkzAwnMtnyLn6YHM=; b=v4KIbGbicVJfCziejKjI7qxGVfDneWVQtotwqnqBXMYKwvmjQgT4+fYAuBAXEcfKPwktqh sXGobu00lXNEntUj74J1YbkGkRDEXG5DMwIu0dLhdfared3O7nNMfbx3KBKrVZMc3ieU58 51rBkSfCqTf50CTiwPKBo4S6GCTf+kw= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=qhT1F+5b; spf=pass (imf09.hostedemail.com: domain of fvdl@google.com designates 209.85.217.52 as permitted sender) smtp.mailfrom=fvdl@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721665488; a=rsa-sha256; cv=none; b=V9CEIIar60juvU7xTkqdWBwmglZ+HaWKBeuGnEMU38hrNuQ3fpj6xipxpXWC7XQH+iZzyL 0Ug4OwTV5ZVyMoAzTQCr1T95U7tlYR+fXf1GdJC0qnSvfQAtdVf5q2zP+FXuZgomDKWTh3 IPIId0dn29poa3pnPtX/WqS8YL1ohGQ= Received: by mail-vs1-f52.google.com with SMTP id ada2fe7eead31-4928b5531caso626534137.3 for ; Mon, 22 Jul 2024 09:25:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1721665510; x=1722270310; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=syTpRGvSO0E4azvLrelw/wgCBe3qkzAwnMtnyLn6YHM=; b=qhT1F+5b+AnInB+72pX7+2MmPVjli3uThycudcpQy6ar4g3PkrTU3WBXQTBdvlxH56 Sqye040/Tcs8y3/9x8laidrRghsGDfxh96JeU45IxDQGXIXQ6i6Tz4VvHRVbH0mn6eZb rK+FihpxGmnK4AsDErpH4LjLbbD8sDOD+Q/IF1utu9rw5zBM+rVD5x2u4SPOwGb9HEC1 Cmw6TG+cInYe1mf3jUeO71JfvqGbsVdkQ0uDCP9MRn++6PVfs+BGT3ZmYtf9Flqen+cv H44A+mOrKI+HteRsFGpnqMgM+guIf/IaBQ7wtG3uDSpC8ng+qET/hrgs5S4Eqfv0x09L 5EQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721665510; x=1722270310; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=syTpRGvSO0E4azvLrelw/wgCBe3qkzAwnMtnyLn6YHM=; b=VxyzOBxRjchZqHGgULNz8KnyVTUyprmsf5nA5LHDPXqhh9XLnj90ywiXUPNiglMvmH YDAHmI9ZbzqBwZdgt6HzKg2KSP1x6A3+mRgFB+bRLCBlcQr6btSpqyo1BL32M4Ao6Bw6 Gv9zFdtaaThNlOKGhh5kRRgwIf/wwoN9tQHauaXRQTBTVUOailZOeKGaxCRK4YW7kMSy Fl8i8zCXHhggK9Tb8MqZ5P7t+uHd3wuJVM0e+32VWNr3kM9zRZiZ5JCuYlOJiBS9czBL DoRsNv3zRNO0Xy2T6qIQBHcov0/NeiFpjF6T7hti4DwXRmr2xfNlmupMCK2Isf/WjW9M /jPA== X-Gm-Message-State: AOJu0Yx1PKdUHitHN2SzNOoOFK9LJGEDtIM3oGGRXP6akaFPEZ1rcYq0 Y0QY4O92BFbUC+0I+glBHAFT+IH2bx6oIK37B/FODUIGqD8kDoLMt6qgn+eaa9JyCcIjZj7u7+t Z+L0VsMbrMvTC1kAmK4NU+FeZPJD4I0pV7nZlL8NEkLd9XLka1w== X-Google-Smtp-Source: AGHT+IE5qTN/DY+v/kCbF/fFfo2SFK3A/ptsmkc42cRuZJsEuIo/w7+0qz53Jr5J27nKGsBks8POfvXVBUssVCddGfs= X-Received: by 2002:a05:6102:2d0c:b0:492:9291:503c with SMTP id ada2fe7eead31-49292915de7mr7165973137.7.1721665509414; Mon, 22 Jul 2024 09:25:09 -0700 (PDT) MIME-Version: 1.0 References: <20240709163053.2514760-1-fvdl@google.com> In-Reply-To: <20240709163053.2514760-1-fvdl@google.com> From: Frank van der Linden Date: Mon, 22 Jul 2024 09:24:58 -0700 Message-ID: Subject: Re: [PATCH] mm/cma: export total and free number of pages for CMA areas To: linux-mm@kvack.org, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 0343D14000D X-Stat-Signature: cdu6kbx3a6g96jk1wfjszbi86skopx4m X-HE-Tag: 1721665510-419334 X-HE-Meta: U2FsdGVkX1+hsx3LIOF25rMw+srI9BGGzJQr3QS/r4WEgjFDBOtYw4C2AZ9ICchqng5uC0RVnv/eBYgsM/ZpDad/n2GHiTQqzaRi7V/AGEihFQCkrKibk9HY8LEPp7D2tmCEsBKOUBU1IvoQCjtiM+JpLZd9uGx1zFhV89+Ckq/NfvywF8LpYeVHghtqahNjQlq7VdxKfG5A4AP5mZBJjzwQZuyn7IICaF6fsNagoxo/OEXKhi/2E+PmqoXjwQQnHHRgJSe3TisjEuZ9Ug2/ZPJgp5t8Nb8HZ47XdswhKcs5xjWvlj1XN8NBqyykXDMfiLdKe4JgyyAYqUP5nhHZUjoH50tZIrrCFaRXcS2Ww9l2xNZmuO8vDyhQWt1cHM00uCg+SGcCs9ygCGRH0acTZuW5069GMuqhSL0QrQlWvvEoWel3ESbOsTsox5528dvL3lZj3ytTcrr/NBloi6826jiSFYLNoLu9ivnhRfvElPeSzPHRzfEWBkEA9wostCBiC1VUDaKncqGn63TWsVTa11UIgVwxJsDsGvTzdozXwe4dPSjCp4CevRWd9Btcu1lz7FP5BoTIMKsiHzNWIAziku0/HZWQs/A92ImWSdiy6mxQU8dBknwlHE/rXAkkvbLaAwXRbUDBlyM6L7JF71dO09aMk4LWffHzEfiegAhndKuybX2TUb7AIVEri4awlEgL5YyGWkDQWoJn3AExA8OoUbAl3c3LZA4/H2EBTezeuis0R1J24hsFEt7WMu77t0yeJM0VIgJIEKIPaC8DFS5SpnsH/54U4JyhGKsZIyWhShf0h3PkwOmFxowtGLjkllwmLyMPW6/DTuPbuNhC9kMh/oSi7rP8uzCSIw0R/q4b955slGeDW6TnG5+Nnr0TYnRfuw9wrJy5wuOxKviFIc25+g1AOd0YeZ6R7v9FxoClJhcXkmTKMo7Ocf6d3iBjvWadxoSIscfQiMwcaXY3AsN HeQlsnfg 08lJEp7H+wRt2ORE+FSbEMO6EuPUp4AcqVb5CZk1YZrcrp5DI5lTLuVm3FoE/X1+4odSI6YHNXqnOxR6KapOM6oQpP4OtyTQpOHnFQD3KHquh4nfdXy5ATghReUaKwbgHDcIYSv6jvz/3quDgJQtV3xblvI7zPHapKPoAoJKZStK9p6ps6oSc26zGQjO17STzv8cC8Eojk5ICred88QF3G9Os3/jp8j6xo8N04qxQTV3PFDeCqZ1Tm16U/0iNG/5zw/0xxHPWDfUeCIRhYnxYfX6i+QvJUV0Iq3xbnob2aMWNv6Qrqjk1Ptrp7Igk7HVjmExjyh2x85E9G8A= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Jul 9, 2024 at 9:31=E2=80=AFAM Frank van der Linden wrote: > > In addition to the number of allocations and releases, system > management software may like to be aware of the size of CMA > areas, and how many pages are available in it. This information > is currently not available, so export it in total_page and > available_pages, respectively. > > The name 'available_pages' was picked over 'free_pages' because > 'free' implies that the pages are unused. But they might not > be, they just haven't been used by cma_alloc > > The number of available pages is tracked regardless of > CONFIG_CMA_SYSFS, allowing for a few minor shortcuts in > the code, avoiding bitmap operations. > > Signed-off-by: Frank van der Linden > --- > Documentation/ABI/testing/sysfs-kernel-mm-cma | 13 ++++++++++++ > mm/cma.c | 18 +++++++++++------ > mm/cma.h | 1 + > mm/cma_debug.c | 5 +---- > mm/cma_sysfs.c | 20 +++++++++++++++++++ > 5 files changed, 47 insertions(+), 10 deletions(-) > > diff --git a/Documentation/ABI/testing/sysfs-kernel-mm-cma b/Documentatio= n/ABI/testing/sysfs-kernel-mm-cma > index dfd755201142..aaf2a5d8b13b 100644 > --- a/Documentation/ABI/testing/sysfs-kernel-mm-cma > +++ b/Documentation/ABI/testing/sysfs-kernel-mm-cma > @@ -29,3 +29,16 @@ Date: Feb 2024 > Contact: Anshuman Khandual > Description: > the number of pages CMA API succeeded to release > + > +What: /sys/kernel/mm/cma//total_pages > +Date: Jun 2024 > +Contact: Frank van der Linden > +Description: > + The size of the CMA area in pages. > + > +What: /sys/kernel/mm/cma//available_pages > +Date: Jun 2024 > +Contact: Frank van der Linden > +Description: > + The number of pages in the CMA area that are still > + available for CMA allocation. > diff --git a/mm/cma.c b/mm/cma.c > index 3e9724716bad..727e8c04d53a 100644 > --- a/mm/cma.c > +++ b/mm/cma.c > @@ -86,6 +86,7 @@ static void cma_clear_bitmap(struct cma *cma, unsigned = long pfn, > > spin_lock_irqsave(&cma->lock, flags); > bitmap_clear(cma->bitmap, bitmap_no, bitmap_count); > + cma->available_count +=3D count; > spin_unlock_irqrestore(&cma->lock, flags); > } > > @@ -133,7 +134,7 @@ static void __init cma_activate_area(struct cma *cma) > free_reserved_page(pfn_to_page(pfn)); > } > totalcma_pages -=3D cma->count; > - cma->count =3D 0; > + cma->available_count =3D cma->count =3D 0; > pr_err("CMA area %s could not be activated\n", cma->name); > return; > } > @@ -198,7 +199,7 @@ int __init cma_init_reserved_mem(phys_addr_t base, ph= ys_addr_t size, > snprintf(cma->name, CMA_MAX_NAME, "cma%d\n", cma_area_co= unt); > > cma->base_pfn =3D PFN_DOWN(base); > - cma->count =3D size >> PAGE_SHIFT; > + cma->available_count =3D cma->count =3D size >> PAGE_SHIFT; > cma->order_per_bit =3D order_per_bit; > *res_cma =3D cma; > cma_area_count++; > @@ -382,7 +383,7 @@ static void cma_debug_show_areas(struct cma *cma) > { > unsigned long next_zero_bit, next_set_bit, nr_zero; > unsigned long start =3D 0; > - unsigned long nr_part, nr_total =3D 0; > + unsigned long nr_part; > unsigned long nbits =3D cma_bitmap_maxno(cma); > > spin_lock_irq(&cma->lock); > @@ -394,12 +395,12 @@ static void cma_debug_show_areas(struct cma *cma) > next_set_bit =3D find_next_bit(cma->bitmap, nbits, next_z= ero_bit); > nr_zero =3D next_set_bit - next_zero_bit; > nr_part =3D nr_zero << cma->order_per_bit; > - pr_cont("%s%lu@%lu", nr_total ? "+" : "", nr_part, > + pr_cont("%s%lu@%lu", start ? "+" : "", nr_part, > next_zero_bit); > - nr_total +=3D nr_part; > start =3D next_zero_bit + nr_zero; > } > - pr_cont("=3D> %lu free of %lu total pages\n", nr_total, cma->coun= t); > + pr_cont("=3D> %lu free of %lu total pages\n", cma->available_coun= t, > + cma->count); > spin_unlock_irq(&cma->lock); > } > > @@ -446,6 +447,10 @@ struct page *cma_alloc(struct cma *cma, unsigned lon= g count, > > for (;;) { > spin_lock_irq(&cma->lock); > + if (count > cma->available_count) { > + spin_unlock_irq(&cma->lock); > + break; > + } > bitmap_no =3D bitmap_find_next_zero_area_off(cma->bitmap, > bitmap_maxno, start, bitmap_count, mask, > offset); > @@ -454,6 +459,7 @@ struct page *cma_alloc(struct cma *cma, unsigned long= count, > break; > } > bitmap_set(cma->bitmap, bitmap_no, bitmap_count); > + cma->available_count -=3D count; > /* > * It's safe to drop the lock here. We've marked this reg= ion for > * our exclusive use. If the migration fails we will take= the > diff --git a/mm/cma.h b/mm/cma.h > index ad61cc6dd439..d111f3d51868 100644 > --- a/mm/cma.h > +++ b/mm/cma.h > @@ -13,6 +13,7 @@ struct cma_kobject { > struct cma { > unsigned long base_pfn; > unsigned long count; > + unsigned long available_count; > unsigned long *bitmap; > unsigned int order_per_bit; /* Order of pages represented by one = bit */ > spinlock_t lock; > diff --git a/mm/cma_debug.c b/mm/cma_debug.c > index 602fff89b15f..89236f22230a 100644 > --- a/mm/cma_debug.c > +++ b/mm/cma_debug.c > @@ -34,13 +34,10 @@ DEFINE_DEBUGFS_ATTRIBUTE(cma_debugfs_fops, cma_debugf= s_get, NULL, "%llu\n"); > static int cma_used_get(void *data, u64 *val) > { > struct cma *cma =3D data; > - unsigned long used; > > spin_lock_irq(&cma->lock); > - /* pages counter is smaller than sizeof(int) */ > - used =3D bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma)); > + *val =3D cma->count - cma->available_count; > spin_unlock_irq(&cma->lock); > - *val =3D (u64)used << cma->order_per_bit; > > return 0; > } > diff --git a/mm/cma_sysfs.c b/mm/cma_sysfs.c > index f50db3973171..97acd3e5a6a5 100644 > --- a/mm/cma_sysfs.c > +++ b/mm/cma_sysfs.c > @@ -62,6 +62,24 @@ static ssize_t release_pages_success_show(struct kobje= ct *kobj, > } > CMA_ATTR_RO(release_pages_success); > > +static ssize_t total_pages_show(struct kobject *kobj, > + struct kobj_attribute *attr, ch= ar *buf) > +{ > + struct cma *cma =3D cma_from_kobj(kobj); > + > + return sysfs_emit(buf, "%lu\n", cma->count); > +} > +CMA_ATTR_RO(total_pages); > + > +static ssize_t available_pages_show(struct kobject *kobj, > + struct kobj_attribute *attr, ch= ar *buf) > +{ > + struct cma *cma =3D cma_from_kobj(kobj); > + > + return sysfs_emit(buf, "%lu\n", cma->available_count); > +} > +CMA_ATTR_RO(available_pages); > + > static void cma_kobj_release(struct kobject *kobj) > { > struct cma *cma =3D cma_from_kobj(kobj); > @@ -75,6 +93,8 @@ static struct attribute *cma_attrs[] =3D { > &alloc_pages_success_attr.attr, > &alloc_pages_fail_attr.attr, > &release_pages_success_attr.attr, > + &total_pages_attr.attr, > + &available_pages_attr.attr, > NULL, > }; > ATTRIBUTE_GROUPS(cma); > -- > 2.45.2.803.g4e1b14247a-goog > I realize that this isn't the most exciting patch, but.. any comments? :) - Frank