All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baolin Wang <baolin.wang@linux.alibaba.com>
To: Kairui Song <ryncsn@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: Re: [PATCH v3 2/6] mm/mglru: introduce helpers for manipulating gen and refs flags
Date: Mon, 31 Aug 2026 16:52:56 +0800	[thread overview]
Message-ID: <8ba99027-7ee0-4459-9eeb-acc15769b2c0@linux.alibaba.com> (raw)
In-Reply-To: <apRx-xd0csgBU4sL@KASONG-MC4>



On 8/31/26 2:12 AM, Kairui Song wrote:
> On Thu, Aug 27, 2026 at 03:32:18PM +0800, Baolin Wang wrote:
>>
>>
>> On 8/26/26 1:53 AM, Kairui Song via B4 Relay wrote:
>>> From: Kairui Song <kasong@tencent.com>
>>>
>>> Instead of doing bit ops on folio->flags.f, introduce helpers for
>>> adjusting a folio's refs and generation info, making the code easier
>>> to debug and understand.
>>>
>>> No functional change is intended: some combined atomic operations are
>>> split into two, which only creates harmless transient states. There is
>>> no measurable performance impact, and some paths even look slightly
>>> better in the generated assembly.
>>>
>>> Signed-off-by: Kairui Song <kasong@tencent.com>
>>> ---
>>>    include/linux/mm_inline.h | 76 ++++++++++++++++++++++++++++++++++++++++++-----
>>>    include/linux/mmzone.h    |  1 +
>>>    mm/folio.c                | 19 +++++++-----
>>>    mm/vmscan.c               | 61 ++++++++++++++++++++-----------------
>>>    4 files changed, 114 insertions(+), 43 deletions(-)
>>>
>>> diff --git a/mm/folio.c b/mm/folio.c
>>> index c02dcea9c03c..a932059057ac 100644
>>> --- a/mm/folio.c
>>> +++ b/mm/folio.c
>>> @@ -353,26 +353,28 @@ static void __lru_cache_activate_folio(struct folio *folio)
>>>    static void lru_gen_inc_refs(struct folio *folio)
>>>    {
>>> -	unsigned long new_flags, old_flags = READ_ONCE(folio->flags.f);
>>> +	unsigned long new_flags, old_flags = READ_ONCE(*folio_flags(folio, 0));
>>> +	int refs;
>>>    	if (folio_test_unevictable(folio))
>>>    		return;
>>>    	/* see the comment on LRU_REFS_FLAGS */
>>> -	if (!folio_test_referenced(folio)) {
>>> -		set_mask_bits(&folio->flags.f, LRU_REFS_MASK, BIT(PG_referenced));
>>> +	if (!folio_lru_refs(folio)) {
>>> +		folio_set_lru_refs(folio, 1);
>>>    		return;
>>>    	}
>>>    	do {
>>> -		if ((old_flags & LRU_REFS_MASK) == LRU_REFS_MASK) {
>>> +		new_flags = old_flags;
>>> +		refs = lru_refs_from_flags(old_flags);
>>> +		if (refs == LRU_REFS_MAX) {
>>>    			if (!folio_test_workingset(folio))
>>>    				folio_set_workingset(folio);
>>>    			return;
>>>    		}
>>> -
>>> -		new_flags = old_flags + BIT(LRU_REFS_PGOFF);
>>> -	} while (!try_cmpxchg(&folio->flags.f, &old_flags, new_flags));
>>> +		lru_refs_set_flags(&new_flags, refs + 1);
>>> +	} while (!try_cmpxchg(folio_flags(folio, 0), &old_flags, new_flags));
>>>    }
>>>    static bool lru_gen_clear_refs(struct folio *folio)
>>> @@ -384,7 +386,8 @@ static bool lru_gen_clear_refs(struct folio *folio)
>>>    	if (gen < 0)
>>>    		return true;
>>> -	set_mask_bits(&folio->flags.f, LRU_REFS_FLAGS | BIT(PG_workingset), 0);
>>> +	folio_set_lru_refs(folio, 0);
>>
>> Actually this clears the folio's refs counter. Would it be more readable to
>> introduce a folio_clear_lru_refs(folio) helper and use it for all the other
>> folio_set_lru_refs(folio, 0) calls too?
> 
> Thanks for the review! And yeah, that's right. But a standalone
> folio_clear_lru_refs seems a bit bloated? I'll add some comment on the
> relationship of refs and PG_referenced for the helpers first, that
> might be helpful enough I guess?

OK, I'm fine with that.


  parent reply	other threads:[~2026-08-31  8:53 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-25 17:53 [PATCH v3 0/6] mm/mglru: clean up folio counters and flag usage Kairui Song via B4 Relay
2026-08-25 17:53 ` Kairui Song
2026-08-25 17:53 ` [PATCH v3 1/6] mm/memcontrol: make lru_zone_size atomic and simplify sanity check Kairui Song via B4 Relay
2026-08-25 17:53   ` Kairui Song
2026-08-29  3:34   ` Barry Song
2026-08-25 17:53 ` [PATCH v3 2/6] mm/mglru: introduce helpers for manipulating gen and refs flags Kairui Song via B4 Relay
2026-08-25 17:53   ` Kairui Song
2026-08-25 18:20   ` Kairui Song
2026-08-26 10:48   ` Qi Zheng
2026-08-27  7:32   ` Baolin Wang
     [not found]     ` <apRx-xd0csgBU4sL@KASONG-MC4>
2026-08-31  8:52       ` Baolin Wang [this message]
2026-08-29  4:21   ` Barry Song
2026-08-29  7:47     ` Kairui Song
2026-08-29  8:26       ` Barry Song
2026-08-30 18:34       ` Kairui Song
2026-08-30  9:08     ` Ridong Chen
2026-08-30  8:39   ` Ridong Chen
2026-08-30 17:19     ` Kairui Song
2026-08-25 17:53 ` [PATCH v3 3/6] mm/migrate: copy all referenced state via folio_migrate_lru_refs Kairui Song via B4 Relay
2026-08-25 17:53   ` Kairui Song
2026-08-27  7:33   ` Baolin Wang
2026-08-27 10:55   ` David Hildenbrand (Arm)
2026-08-28  5:26   ` Lian Wang
2026-08-29  9:56   ` Barry Song
2026-08-30  9:23   ` Ridong Chen
2026-08-25 17:53 ` [PATCH v3 4/6] mm/mglru: move max_seq read into walk_update_folio Kairui Song via B4 Relay
2026-08-25 17:53   ` Kairui Song
2026-08-28  5:28   ` Lian Wang
2026-08-29 10:04   ` Barry Song
2026-08-25 17:53 ` [PATCH v3 5/6] mm/mglru: use explicit tier range in read_ctrl_pos() Kairui Song via B4 Relay
2026-08-25 17:53   ` Kairui Song
2026-08-28  5:29   ` Lian Wang
2026-08-29 14:31     ` Kairui Song
2026-08-30  9:43   ` Ridong Chen
2026-08-25 17:53 ` [PATCH v3 6/6] mm/mglru: fix potential generation folio number leak Kairui Song via B4 Relay
2026-08-25 17:53   ` Kairui Song
2026-08-28 23:19 ` [PATCH v3 0/6] mm/mglru: clean up folio counters and flag usage Andrew Morton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8ba99027-7ee0-4459-9eeb-acc15769b2c0@linux.alibaba.com \
    --to=baolin.wang@linux.alibaba.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ryncsn@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.