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 91B79E77182 for ; Thu, 12 Dec 2024 10:30:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F3D856B008A; Thu, 12 Dec 2024 05:30:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EEDDD6B008C; Thu, 12 Dec 2024 05:30:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D99AB6B0092; Thu, 12 Dec 2024 05:30:16 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id B69A16B008A for ; Thu, 12 Dec 2024 05:30:16 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 37A90817D2 for ; Thu, 12 Dec 2024 10:30:16 +0000 (UTC) X-FDA: 82885936938.28.126EAAA Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) by imf26.hostedemail.com (Postfix) with ESMTP id BAE6014000D for ; Thu, 12 Dec 2024 10:29:55 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KjPSXmW3; spf=pass (imf26.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.128.42 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1733999398; 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=/bg1k7318njybk9wkbNIQBx/yMTbq3YWKaT1a6X4wNM=; b=Debr9wjMygSFt2GXiVL5RxItQB5W8LUJawUsJKup0kRFRBzcYf7XttmRCh8o6KHlpQxKCR 9F/bebpYRuaxdKRlCwHmykk/9DnsFbmsLCGwDAl19Jy6dEiczhgXpCBZU+ffBnm9Rap/cs NZ/nWpPoLfTgvYGVo+tkpUcIhaU7860= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1733999398; a=rsa-sha256; cv=none; b=DebQx+PWwcNgvGp0Xowv4q0SDHysUbDNeEtFuQ3kOgerLUplrt743dyR9CaV8dMkVWn8NR 6BSPP/q6yLwW1d8zlLvy6gvfS3CiVAEL2ykltJqrs10/pLaj8DPCjC6l7+mM0/idKOf1Ia A2DVDglkgKAPyRYnA7djlQP+vjpHrtM= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KjPSXmW3; spf=pass (imf26.hostedemail.com: domain of usamaarif642@gmail.com designates 209.85.128.42 as permitted sender) smtp.mailfrom=usamaarif642@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-434a1fe2b43so3944195e9.2 for ; Thu, 12 Dec 2024 02:30:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733999412; x=1734604212; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=/bg1k7318njybk9wkbNIQBx/yMTbq3YWKaT1a6X4wNM=; b=KjPSXmW3OUN2uAGAcixASbSvNNfBN6jv0OlR/VD0axtmA9/gTLdPP6s3MUNEjz9Eh7 gSDpJX4iT/OkfwQ96Xe9izSAUDO0y3ex0cIEa2rC+q+hCAvC1t3+M+MsRr7DHLnEiXTk GpT8Hc1zS8/sMqk0USHOPUW3PP3HAb071f/PnUrJzMA8FOjeBnLZjSw+e8u+I7DHcSr4 J5WNTkUjCYwHbOEDrfQbpMT7iZZYgPi8HAzFMXBkRWlKqgnFaFUFo5lfcsbAVf7KaiNM qwdQJ9ww4kZa/Zta2XTbUKW1gI9gEhXqJJBCEw6R3RTiFJeBpcchCAyLIptjS+P2rZ8T CFOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733999412; x=1734604212; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/bg1k7318njybk9wkbNIQBx/yMTbq3YWKaT1a6X4wNM=; b=AYstGA4ydkTPSuD9Q4irUMo+WSBm65MEZx5AjK8Zj94fFDfPUMGlhcxWmINwyCKM17 gdPznC+EOLusH1uborfY7MymxcyrLoLU81VFiUJhovlLSQto+Ung/nCdwu6sykilyY1R 2loUw/8IwiziZDlteHvDlzJvKZPxAyH9RwmUiV3h4Jf6mKp2Vd0EV+v324HSBPoFOOvq KqpUwE8/ZZQ7VwK823i8jCrDk83qUhO3B+INTLYAaEyr2TVEpIP9iVlupr7OiDIjSawp JNX9dhlZGyGfvvHJHzVqXZj7liGuaOGW9dqvvNxji0sdQ4ztrP+iz4LOO2cR8aBUcfyg FaRg== X-Forwarded-Encrypted: i=1; AJvYcCUhnr54Z39KrF0bQuTtm942G0vTNjVTZZhb/5XZE91kYn0hq/o4Rv/8lyWms13KHQ2sIMP993Alpw==@kvack.org X-Gm-Message-State: AOJu0YxYOYiFEbtz3zfugI+1XxFwJoh2FgCjR6apzXxRekEYSnlXyrmX 8DA8pU/C6XqeCjB8Yin5e87KWx9yEUmIFqRsY7jnyeMZmE4nBnXC X-Gm-Gg: ASbGncumWNwrOr4EySu9uf7UQBCQKfxMXAsf0Inwc+E0dJXA+bgKmnRBDHfu0bNoF+A 052b5Ym/fmb0pysOeURgG5lDobzT2hXeYVq/CPoyv9fL3OWl8RwUYQ/2Eg6PZA24YAWqeNP7DCT YtQncquOzoEjmyzZ3LDAH2TWa50uyzkHoQBH55x9cWal3wh9ScOysR5sW8M6JzoB7f0wux/pDH+ rdNRbm5nCi9zomJEZbkSDSlGLW/dptlsGJMgWATGSsdsQzZU51GCt43dbgNuH+S2kPn32Kpzi00 6N2YTvv+CZCmLShz+u8tGUs5GfeUN+7YUU/3wllzDwRLDZdw2Q== X-Google-Smtp-Source: AGHT+IEcWEgMPQkMvNLXcAO412zDfJYROlpv6v4QcXzBxDdKts3WRT/cTmsIt9VGSf0kgFFpJofa9g== X-Received: by 2002:a5d:47a1:0:b0:385:fac7:89b9 with SMTP id ffacd0b85a97d-387877c8fedmr1938481f8f.59.1733999412253; Thu, 12 Dec 2024 02:30:12 -0800 (PST) Received: from ?IPV6:2001:16a2:c8d4:e00:19:eba3:f7f0:1457? ([2001:16a2:c8d4:e00:19:eba3:f7f0:1457]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3878248f533sm3684526f8f.3.2024.12.12.02.30.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 12 Dec 2024 02:30:11 -0800 (PST) Message-ID: <9d602b3f-878f-4f92-aade-f7fd7c1a626a@gmail.com> Date: Thu, 12 Dec 2024 13:30:09 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 4/6] mm: Introduce a pageflag for partially mapped folios To: David Hildenbrand , akpm@linux-foundation.org, linux-mm@kvack.org Cc: hannes@cmpxchg.org, riel@surriel.com, shakeel.butt@linux.dev, roman.gushchin@linux.dev, yuzhao@google.com, npache@redhat.com, baohua@kernel.org, ryan.roberts@arm.com, rppt@kernel.org, willy@infradead.org, cerasuolodomenico@gmail.com, ryncsn@gmail.com, corbet@lwn.net, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kernel-team@meta.com References: <20240830100438.3623486-1-usamaarif642@gmail.com> <20240830100438.3623486-5-usamaarif642@gmail.com> Content-Language: en-US From: Usama Arif In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: BAE6014000D X-Stat-Signature: nbt3uozres7gwpn57w6ew3r7rmbugg6x X-Rspam-User: X-HE-Tag: 1733999395-977351 X-HE-Meta: U2FsdGVkX18lhDvlsLxvLuEupRlYUz3PJT8gUnudx1o8ZS+lw/7OjKmlRFybyIKJZF3BzkmpfxF/NisvpLcwJhRt65SZmnRLO70ypAIIfpcwoPatHZFoIMVhUX0xb884Tyc3MST8T47SjtjXAEyVT7ZzSManqj2MJQdxbKved4b5a396+EvWoWC8X/AuJHpToBGho91+Z5RZkjs2EaB5VKPeq0ZD4MqCUGe4prv+k2P0WWIYAykDyU3d9DIfSZ5cxmp9G1m/bnAFUU4TcSbFPhKtnPszMrvhKJW4bRbgk0BL70ivmgzNRrf+HCmewupHZsg3eVfg9v+1IxLxVfhi2WmcCJnmk7t9c4W5VpiArMc/ACJCNGdGmGZPofHA+H9OHH/CPlTpJtOOusg4YWpiNloK1jlmQ74uC5Dl3gp9wRb7J66utV1sdd1NJdx/Gko9wUuia869Ggkdvf4Y21VCpUeeJYaj3E2O7AuW2LMya1hGivU5CpeGZcafphYyEgzMcjpQ0UOgjg4lcEXHdkXDiX6sRhPEvNBfLDV51cnHm5hk2LV3jZFhWlaoprXnKNL8p/3NkamBooOLXt1PSeOmoyR2by5NMUPt3ucFCziMQCbvldScq8dtJ3Fy34FjAJmwZT84yKZbLxiogdvqaIHovYVnj2B0eM+ut1wNHs2Gaxw3+OR4Jc0DicNgYH/jtgI8wfDw//emChyGnl/cFkyIj4DndrwryKKaLi2pmxvdtj6yal9ZiJMOgR7atGh0VzDRqH0jnpQiSzi88fipyMSBKr2RGwZh2z+CdNDm/6LQIp7wj58h51nHUlrGhg7Y73exnWQDSVBrWSnhLVqhtqx8N/jdUs1TjMTcoKBazehNwg9Nd44kv6tu/lJFCAULv/PoY0H96qFFcwj0KbFMUQXjx/BQkoMgZ0+QcouS4kUeCb2gnNXI+74yOG6hB8mIdAtByMXy+bRjNBvBxPfxhoP MKCMuu8A 4wx71yuwcNii/3hIyHkWecuyzuoEhV97ZOZIGlD7udCsyI551giVhjNLZCqR6deutBBYdW4kWvco8hHCESL05//AaF1MhM05UarR+c6Gsn4rkC8VCnoNDny0UIpGz1f1C0SeXhRs4xUalMF7lqteVMibk0Wn0s1tEc3lVNE00d9i6iRb97hHDgjAQfXkWXDSuFEB5euI8fVNFfcIyuBTYTFaFPhk/b/HizIIb5Of6+Dl48HyLvikl6wF/i4qU0r7YkajR3g6XjKUAHh/VHCDQZ93ArtY22voG9IizJ+G/AMFBedXeueGzIciemiBGs0dR+jSVWDp5zI6Mj85/ln6oY2sRnwOGQOmSSokVCcUhOgkK1mwvwrDcfzmff5+CnR3VlaCz0Fvb3lia3R4dCN8lFKsb6zShCoO1RHw2U3m5/bNBE4NzAAkqyh4RGO0+QFvp6a9Nx0lSMGy58r6z+d+bx8YIBevuW/L9aBqBN889SpYK9Ck= X-Bogosity: Ham, tests=bogofilter, spamicity=0.001026, 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 11/12/2024 18:03, David Hildenbrand wrote: > On 30.08.24 12:03, Usama Arif wrote: >> Currently folio->_deferred_list is used to keep track of >> partially_mapped folios that are going to be split under memory >> pressure. In the next patch, all THPs that are faulted in and collapsed >> by khugepaged are also going to be tracked using _deferred_list. >> >> This patch introduces a pageflag to be able to distinguish between >> partially mapped folios and others in the deferred_list at split time in >> deferred_split_scan. Its needed as __folio_remove_rmap decrements >> _mapcount, _large_mapcount and _entire_mapcount, hence it won't be >> possible to distinguish between partially mapped folios and others in >> deferred_split_scan. >> >> Eventhough it introduces an extra flag to track if the folio is >> partially mapped, there is no functional change intended with this >> patch and the flag is not useful in this patch itself, it will >> become useful in the next patch when _deferred_list has non partially >> mapped folios. >> >> Signed-off-by: Usama Arif >> --- >>   include/linux/huge_mm.h    |  4 ++-- >>   include/linux/page-flags.h | 13 +++++++++++- >>   mm/huge_memory.c           | 41 ++++++++++++++++++++++++++++---------- >>   mm/memcontrol.c            |  3 ++- >>   mm/migrate.c               |  3 ++- >>   mm/page_alloc.c            |  5 +++-- >>   mm/rmap.c                  |  5 +++-- >>   mm/vmscan.c                |  3 ++- >>   8 files changed, 56 insertions(+), 21 deletions(-) >> >> diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h >> index 4da102b74a8c..0b0539f4ee1a 100644 >> --- a/include/linux/huge_mm.h >> +++ b/include/linux/huge_mm.h >> @@ -333,7 +333,7 @@ static inline int split_huge_page(struct page *page) >>   { >>       return split_huge_page_to_list_to_order(page, NULL, 0); >>   } >> -void deferred_split_folio(struct folio *folio); >> +void deferred_split_folio(struct folio *folio, bool partially_mapped); >>     void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, >>           unsigned long address, bool freeze, struct folio *folio); >> @@ -502,7 +502,7 @@ static inline int split_huge_page(struct page *page) >>   { >>       return 0; >>   } >> -static inline void deferred_split_folio(struct folio *folio) {} >> +static inline void deferred_split_folio(struct folio *folio, bool partially_mapped) {} >>   #define split_huge_pmd(__vma, __pmd, __address)    \ >>       do { } while (0) >>   diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h >> index 2175ebceb41c..1b3a76710487 100644 >> --- a/include/linux/page-flags.h >> +++ b/include/linux/page-flags.h >> @@ -186,6 +186,7 @@ enum pageflags { >>       /* At least one page in this folio has the hwpoison flag set */ >>       PG_has_hwpoisoned = PG_active, >>       PG_large_rmappable = PG_workingset, /* anon or file-backed */ >> +    PG_partially_mapped = PG_reclaim, /* was identified to be partially mapped */ >>   }; >>     #define PAGEFLAGS_MASK        ((1UL << NR_PAGEFLAGS) - 1) >> @@ -859,8 +860,18 @@ static inline void ClearPageCompound(struct page *page) >>       ClearPageHead(page); >>   } >>   FOLIO_FLAG(large_rmappable, FOLIO_SECOND_PAGE) >> +FOLIO_TEST_FLAG(partially_mapped, FOLIO_SECOND_PAGE) >> +/* >> + * PG_partially_mapped is protected by deferred_split split_queue_lock, >> + * so its safe to use non-atomic set/clear. > > Just stumbled over that. In my understanding, this assumption is wrong. > > I don't think anything prevents other PF_ANY (PG_anon_exclusive, PG_PG_hwpoison) / PF_SECOND (PF_has_hwpoisoned) flags from getting modified concurrently I'm afraid. > Hi David, Just to clear my understanding, what you are suggesting could happen in __folio_set/clear_partially_mapped is: 1) __folio_set/clear_partially_mapped reads the 2nd page flags (x) where one of the other 2nd page flags is lets say not set. 2) One of the other 2nd page flags are set atomically. 3) __folio_set/clear_partially_mapped writes x + changes to partially_mapped. However, the change in step 2 to one of the other 2nd page flag is lost. Is that correct? But that would mean we shouldn't have any page flags (first or second page) as non atomic? although it would depend if they are being changed at the same time point. If you encountered a particular instance of PG_anon_exclusive or PF_has_hwpoisoned being changed at the same point as __folio_set/clear_partially_mapped, could you point to it? I am happy to send a fix to change all set/clear_partially_mapped to atomic, but just want to understand this better. Thanks! Usama