From patchwork Mon Feb 3 22:55:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Usama Arif X-Patchwork-Id: 13958385 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 027B2C02193 for ; Mon, 3 Feb 2025 22:56:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B0E776B0089; Mon, 3 Feb 2025 17:56:22 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9ACB56B008C; Mon, 3 Feb 2025 17:56:22 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7FE5E6B0092; Mon, 3 Feb 2025 17:56:22 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 535086B0089 for ; Mon, 3 Feb 2025 17:56:22 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 10AB4B0303 for ; Mon, 3 Feb 2025 22:56:22 +0000 (UTC) X-FDA: 83080143804.21.9871D02 Received: from mail-qv1-f53.google.com (mail-qv1-f53.google.com [209.85.219.53]) by imf08.hostedemail.com (Postfix) with ESMTP id 17DDE16000F for ; Mon, 3 Feb 2025 22:56:19 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=X11HxVME; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf08.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.219.53 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738623380; a=rsa-sha256; cv=none; b=wM0YSBeUuHQB09fN/CYttbFLBf4IixZSpdJ8W8zjn1ghuDUNBD6p3XsnoCZtNrXb/RRAEy eNcZAdtGIJAjjCivGkbgHvrslOKxZMzUzg0CyQecgEI6W4wzhkZN3DFkug4KH3xdfc5EEF xLsg9gqUrpozL7gKF3eMHXfsjvbwFfc= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=X11HxVME; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf08.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.219.53 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738623380; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=SznZScwVx0h8bqXh4qDWiYSeLp6PkS46eqcLFfP1ky4=; b=vko2iPIdSojP/6pc5gs7IrgAziEDFrSV66qaOK7U5a7+AbXuxfy9ISwVBDMnGIS96T321J lUJwZ0UmY7TQrvrR+hYiCJmJHRBlEHJJHOmIqzIHbyV6aWW8YiEzCzzz9qfway4bGNDTlw aPDhq4k1LuHOuPFHRod0S9A//PV280Y= Received: by mail-qv1-f53.google.com with SMTP id 6a1803df08f44-6e1a36b3684so58508846d6.1 for ; Mon, 03 Feb 2025 14:56:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738623379; x=1739228179; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SznZScwVx0h8bqXh4qDWiYSeLp6PkS46eqcLFfP1ky4=; b=X11HxVMEMS9WzvAMsnt2ZLWnwC+pUi+tKSZaaibF35jIG0Gbq/s4YKkoFun7bkC1Hw 960ksN/KR82DTv+mHlxdbboZlKozPSg5p0yhL2VSR4khIxbZmuYKlDgvlhlJMHyXUJMR wss9WyEkXlx81QQcP4qgFfgDIuZOdCVB0Fj2aFOKkCcxUakBE6sevnmvTBe19LRgM6Ge QpK38Y3AGelcX8fFnakyYdtIjxZCGQBfu52d4mPnzsLo9keb7UFrh3HKMK4B0PZJIze0 kOgJTpattvjWl+e6NhKef43/WzCFpoUfQNQR5vjMq03HybhEN73PiEw6CG5stSe7sjt3 /whg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738623379; x=1739228179; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SznZScwVx0h8bqXh4qDWiYSeLp6PkS46eqcLFfP1ky4=; b=fnDZd5Yg7TNN/4eTk0qi3PVsqQCJ+MQu1C69eT74VNqAc9ZDxsn1hmxvDzIfghaANy EKttumOgK82Oyt72/0WNswDfhJ/CttolP0EYzvYMCyWwJAFxZ+ypvx5GIq/48kNM1YNU QUSAy0iAeJmJC9VLTpDNsd+gT4xBngFHBL1AbMUycPkGCqmw8cfBz8tv1D/Big3Nn8EW yTbDPuTUI7if+2p5nfpNsjEozS0nCumrNJaOB1/CGMsCYC0YXW1v2ySx7qhW0EtuXSje crLMNbpmPI74412fcpFLQU7BbJrmv46KYf2awLI+fnjbb0HodoPAc2SDMrDUyB1FNA6w Vpmg== X-Forwarded-Encrypted: i=1; AJvYcCXFjwmqIojAtKqtUHd7157XoTpJxeJNea2UQfFeJaWcaZ7KvC44LER/n6Fp6tSQ0pCJCrfN0oGiew==@kvack.org X-Gm-Message-State: AOJu0Yzf8vlf05PwVZaN+NzsHkEUT9PejZ2+HYA0YG14FxSmzb0uDq8y iyNgNbWGe1n2a9/3cZ/MlNZyUzU9xKPdjLb6TUwL4PR0ELNH4AFx X-Gm-Gg: ASbGncumei2onsxm53tvQqFhGM9b/5zaG3JmnPKYTZ5RJ9u7ujEG2zNX2W7wLyoDWcK yOy44VQg+AyTWXjmwu3C6hHO0gDhjeJ0RsqJ6ofmY/PkTpVdD+arOMA5nstFPBQ4tDr4Yu72jx2 tfQ8lY4YNroqTsqYYMEPzce13Z07Kyzf8j9T3mlSKeKMYPHXNf0ab4QCYc/alfzGTecs+8FfBb6 0ZWZAq+chiPhboLrodi5sjtaD374x1iIuz2gmhdlkur9wJJoaqhW7i97juw58L0jsFc37QZUm9e /IEkpoRe24IkFw== X-Google-Smtp-Source: AGHT+IHolYwlmjrVZZLm3U+zwl/FznhpD+yD7VG24ol3h/GVVlqv4G30P3bbLumNQdAfUzhAeEqEsg== X-Received: by 2002:a05:6214:1c86:b0:6d8:850a:4d6a with SMTP id 6a1803df08f44-6e243b90ed5mr303232856d6.1.1738623379118; Mon, 03 Feb 2025 14:56:19 -0800 (PST) Received: from localhost ([2a03:2880:20ff:73::]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e254922857sm55094796d6.87.2025.02.03.14.56.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 14:56:17 -0800 (PST) From: Usama Arif To: sj@kernel.org, akpm@linux-foundation.org Cc: damon@lists.linux.dev, linux-mm@kvack.org, hannes@cmpxchg.org, david@redhat.com, kernel-team@meta.com, Usama Arif Subject: [PATCH v4 3/6] mm/damon/sysfs-schemes: add files for setting damos_filter->folio_size Date: Mon, 3 Feb 2025 22:55:30 +0000 Message-ID: <20250203225604.44742-4-usamaarif642@gmail.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250203225604.44742-1-usamaarif642@gmail.com> References: <20250203225604.44742-1-usamaarif642@gmail.com> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 17DDE16000F X-Rspamd-Server: rspam10 X-Stat-Signature: 179bztuqeidre4ruo58rrwpbc1k9onjy X-HE-Tag: 1738623379-851591 X-HE-Meta: U2FsdGVkX1/u/9KoJDKNlan3DyD4bC7/QtCP26MUqWnu/73XOdCwy6SDbnMJB23mFTI90+c4si2W2jUckWVemp/pClnrUx3R5YlSuQmhuLLXWvkG1cp9F4GAd9kx/EIf62qO4P08PlfGaFWvoN99lvZLRZcYugOJFnoCwpFw2TneEnLIGPVRbKu3UWcW/b2Gbe186IB8Xi30ZXlUjUB/QTPGzYXTOL6jcvDFhX8C4K1S6hEZ9kj8NJ8WipfCqyipCM3E94wCRSSpGQvaJEqNej3BRESb9Sw74ZEKJw5r/B6WqFzz1W9Ln9j5YIQsd6aQTmRQiAk3vE8xUGocZQK0RTKfnsG8cVnihTxd/aSXDDll3f9h+uKHwDaxPyCELCtn4qDe+M85S565VTWqggk7gtsYbbddtWLSlqyEYsV90Q5nZOZmDEiN+Dbq099w5rRrbiygSTC6ApYlH206pmuiLDLJWmKwVZFf8t/FnRPu+fQmWx/gxb5amUdhOn6C+haPXsKVjMZG2Rk6F5img3o6LaOr3+gJsWjpoJupYr+xbRUdZWeL9JpQD2xu/UjUFmAmS6Q3Wn1NAJ60Y0RYNx1KXgHY/OMk8YgY+my4KoYD4I2YR/DvgmdDoLe4YsqXzd6tpt+nFyLXvT3M18L6aJonKJWc0EvaeGCVQtA/Ib8K757o//Hnpxyl5ziWsUGKP+khSPLk5GqGQKYGvMmSexPwZetLWxazXT3u7n58pZCU58BsHP2IBQq6C+CuPoQlGtWPcKcTL+iwwgZcMLuKyeSzKeCTwPGvngzFBJWMYpxJefHJtpOVT4TVkwy3CLz5NBufqHT/aQ72Fi3EufTBRsTZGTU6cH3Uoxl2z5ZVjSV8WMHzyT4v+cnG12SvvFGhllHVi0FkiE1kx4FstQ4YbKuoXyPiHetHaMErJaJLMvqiN9BCFR7BPRzIQgDPhUfgvvM287x08zYb0uEy/Mmde5T ht3UfoVs 4nNz8NcUWxy8t5t5xbdM40VSRqKn0+H8wo2v3PSa8LoDuE3jlfoS7BOnPkTZ0va53KTBUqWceOByX4anpUEB3k+Jo0+JKULxOkXnLH6piMqUnOSmURZwG4OVHijAq6h6f/gYXIr8ud4P73414dKloxqwTmDFK4EtcIjwYH0B6SxyKfmekn/nt3qYdF3jKWjTwui37z4edxQOsfapStkZ7/cHjXEYUydEAOlJjD5PKXvDx0DgnRHsQFcVFr//pCQrQO4U0UWKGQ92i10Op7xq9FyS9YHZhz3YkQzDp+EyG0g9ZLUZMYAOLYVhWTt9htlFRaY2KKxh5qJbLW9hVYiombeosiHRcF5tfXGhcy7PVAZ4M9jWypVKkaQMa7qBYKry9e3WAjGlCI5vEo5yvz//Ld+QRgxUyeQANr2DJJIJii6n/ZjEf7bL0RnJ20Zp2KU1NBQmThZ2YlJgRnHZc+AEpig8O9rnY3kKXoMZ5tlVjaUo+JcD73AYDOx3boZEiNaxML/Lp55qSuAaz6HHweiILpgRz2wTVkZOVl9VAvRRE2YifKeUl1D81Qu2kIj1ZHEIjQi8VcEZAwfjZtWpq3ULNdcgLXaDIHP7ugZunYwoe5zz9iBZMC0GTGZCHvNvvangja2Yr1zIHoUW/wdj+tgk0PXEIFamFMD2Vx6b55+TKey5uqGnJLHajLvgfCZxGBBZkEMKox69peBBksOB7MipI+LfrreXMLJbP2AVzKbvMRMonHpCazMD8YnZAfyWmUAy4CyuJwymxrySRSQ8zgoxX7JTaWYIxwknC8oXSHdYR2h2upQuDgXDCJqonDTlFg3B/e9+rzdTMc1eFnP1CYwd4oLF9fJKuglQUsJGeZsKJkTKk2u0go27rU+HgZOti3bN066wL4Wlqs9LS1EKKB++V/1XHzPlVuzePzTcyHQfp805oUcvY8xxauLvuLjzn1BWuqXk3gPcSxvBg5MPbM/cmjC1Q11rE anjl7i1N As9DORJWJAbDQXeGtQUn8PkrO4s2YRXToYDzEzshhvJIEV4zgV3H886K7muncqQsZuiL1A3ONEqwIDfZKrjtvU1uH6ekZZWhEIw2ZY44WgM= X-Bogosity: Ham, tests=bogofilter, spamicity=0.001214, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add min and max files for damon filters to let the userspace decide the min/max folio size to operate on. This will be needed to decide what folio sizes to give pa_stat for. Signed-off-by: Usama Arif --- include/linux/damon.h | 11 +++++++++ mm/damon/core.c | 3 +++ mm/damon/sysfs-schemes.c | 53 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index af525252b853..6f30ceeff215 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -35,6 +35,16 @@ struct damon_addr_range { unsigned long end; }; +/** + * struct damon_folio_size - Represents size of folio filter on [@min, @max]. + * @min: Min size of the folio (inclusive). + * @max: Max size of the folio (inclusive). + */ +struct damon_folio_size { + unsigned long min; + unsigned long max; +}; + /** * struct damon_region - Represents a monitoring target region. * @ar: The address range of the region. @@ -377,6 +387,7 @@ struct damos_filter { struct damon_addr_range addr_range; int target_idx; }; + struct damon_folio_size folio_size; struct list_head list; }; diff --git a/mm/damon/core.c b/mm/damon/core.c index c7b981308862..27323e3a800d 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -776,6 +776,9 @@ static void damos_commit_filter_arg( case DAMOS_FILTER_TYPE_TARGET: dst->target_idx = src->target_idx; break; + case DAMOS_FILTER_TYPE_HUGEPAGE: + dst->folio_size = src->folio_size; + break; default: break; } diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 98f93ae9f59e..bc7ca43ca9c4 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -316,6 +316,7 @@ struct damon_sysfs_scheme_filter { bool allow; char *memcg_path; struct damon_addr_range addr_range; + struct damon_folio_size folio_size; int target_idx; }; @@ -469,6 +470,43 @@ static ssize_t addr_end_store(struct kobject *kobj, struct damon_sysfs_scheme_filter *filter = container_of(kobj, struct damon_sysfs_scheme_filter, kobj); int err = kstrtoul(buf, 0, &filter->addr_range.end); + return err ? err : count; +} + +static ssize_t min_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_scheme_filter *filter = container_of(kobj, + struct damon_sysfs_scheme_filter, kobj); + + return sysfs_emit(buf, "%lu\n", filter->folio_size.min); +} + +static ssize_t min_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_scheme_filter *filter = container_of(kobj, + struct damon_sysfs_scheme_filter, kobj); + int err = kstrtoul(buf, 0, &filter->folio_size.min); + + return err ? err : count; +} + +static ssize_t max_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_scheme_filter *filter = container_of(kobj, + struct damon_sysfs_scheme_filter, kobj); + + return sysfs_emit(buf, "%lu\n", filter->folio_size.max); +} + +static ssize_t max_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_scheme_filter *filter = container_of(kobj, + struct damon_sysfs_scheme_filter, kobj); + int err = kstrtoul(buf, 0, &filter->folio_size.max); return err ? err : count; } @@ -519,6 +557,12 @@ static struct kobj_attribute damon_sysfs_scheme_filter_addr_start_attr = static struct kobj_attribute damon_sysfs_scheme_filter_addr_end_attr = __ATTR_RW_MODE(addr_end, 0600); +static struct kobj_attribute damon_sysfs_scheme_filter_min_attr = + __ATTR_RW_MODE(min, 0600); + +static struct kobj_attribute damon_sysfs_scheme_filter_max_attr = + __ATTR_RW_MODE(max, 0600); + static struct kobj_attribute damon_sysfs_scheme_filter_damon_target_idx_attr = __ATTR_RW_MODE(damon_target_idx, 0600); @@ -529,6 +573,8 @@ static struct attribute *damon_sysfs_scheme_filter_attrs[] = { &damon_sysfs_scheme_filter_memcg_path_attr.attr, &damon_sysfs_scheme_filter_addr_start_attr.attr, &damon_sysfs_scheme_filter_addr_end_attr.attr, + &damon_sysfs_scheme_filter_min_attr.attr, + &damon_sysfs_scheme_filter_max_attr.attr, &damon_sysfs_scheme_filter_damon_target_idx_attr.attr, NULL, }; @@ -1953,6 +1999,13 @@ static int damon_sysfs_add_scheme_filters(struct damos *scheme, filter->addr_range = sysfs_filter->addr_range; } else if (filter->type == DAMOS_FILTER_TYPE_TARGET) { filter->target_idx = sysfs_filter->target_idx; + } else if (filter->type == DAMOS_FILTER_TYPE_HUGEPAGE) { + if (sysfs_filter->folio_size.min > + sysfs_filter->folio_size.max) { + damos_destroy_filter(filter); + return -EINVAL; + } + filter->folio_size = sysfs_filter->folio_size; } damos_add_filter(scheme, filter);