From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mta1.migadu.com (out-24.mta1.migadu.com [95.215.58.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E97B82D8DD0 for ; Wed, 19 Aug 2026 12:34:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.24 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787142852; cv=none; b=SDWy/dpwIUFb6Wmlivfo/JxS8DgeRqu6R1H6FOQ7Y+sTR0KzTQGtXw7O+wYptvg9o9c7hDhgmLvR46ecEgS/Vb3NcNxas01zFPrRm4F3HpzkYqBOlXVuyPHxmxIjZo4ShfTd/RlIBrfK9Ttk7MgHKGuHzDDDfcf3mQ21xMhNYu8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787142852; c=relaxed/simple; bh=1Mi6ywisfNPGRA43uZhTcAwin6zOWap1I65ss7T8AI0=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=OYs24tvs9J40dTRkJwtcpHEUrmW4EVaCInDzeGm10/qJtPwZKWLno2DRmoOaCRP8DvoqFqlxKX1T96Vy3Wuy9MYftZrfQpTz/cCpQYlwInqhPNVlFMroTitz1m2/ruTgtLbsn1sq1DbXCAP/18J4wL6sZjNhpJJ1QOk9BuCvAJQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=A46HJ2pj; arc=none smtp.client-ip=95.215.58.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="A46HJ2pj" X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=1Mi6ywisfNPGRA43uZhTcAwin6zOWap1I65ss7T8AI0=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1787142844; v=1; x=1787747644; b=A46HJ2pj64npg82sCkXrs/oN3zXYhC0M8eZXuqJqnXnkua3btMTRXvoK+O/KkPdhjy/nEvkZ W7tFAKC5abb1tF3MRbJLIJu4/JApnnarxo9EOKr0M5vOFDTnjehkhX3ubZbYaqDTAh/5Fb/tsRq Nf/xS5sVMofmGtE+Ky637kpo= X-Envelope-To: linux-kernel@vger.kernel.org Received: from [IPV6:2a03:83e0:1126:4:9d:a05e:5bd8:c200] (2620:10d:c092:500::4:a428) by smtp.migadu.com with ESMTPS id 8e3edf76e993b089; Wed, 19 Aug 2026 12:34:04 +0000 X-Migadu-Flow: FLOW_OUT Message-ID: Date: Wed, 19 Aug 2026 13:33:57 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 02/12] mm: add PMD swap entry detection support To: "Lorenzo Stoakes (ARM)" , "David Hildenbrand (Arm)" Cc: Andrew Morton , chrisl@kernel.org, kasong@tencent.com, ziy@nvidia.com, linux-mm@kvack.org, ying.huang@linux.alibaba.com, Baoquan He , willy@infradead.org, youngjun.park@lge.com, hannes@cmpxchg.org, riel@surriel.com, shakeel.butt@linux.dev, alex@ghiti.fr, kas@kernel.org, baohua@kernel.org, dev.jain@arm.com, baolin.wang@linux.alibaba.com, Nico Pache , "Liam R. Howlett" , ryan.roberts@arm.com, Vlastimil Babka , lance.yang@linux.dev, linux-kernel@vger.kernel.org, nphamcs@gmail.com, shikemeng@huaweicloud.com, yosry@kernel.org, kernel-team@meta.com References: <20260818131202.494754-1-usama.arif@linux.dev> <20260818131202.494754-3-usama.arif@linux.dev> <69e8469c-aa7f-4141-be3c-796c9cf11f2f@kernel.org> Content-Language: en-US From: Usama Arif In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 18/08/2026 19:42, Lorenzo Stoakes (ARM) wrote: > On Tue, Aug 18, 2026 at 04:40:25PM +0200, David Hildenbrand (Arm) wrote: >> On 8/18/26 15:09, Usama Arif wrote: >>> Currently when a PMD-mapped THP is swapped out, the PMD is always >>> split into HPAGE_PMD_NR PTE-level swap entries. To preserve huge >>> page information across swap cycles, later patches will install a >>> single PMD-level swap entry instead. Add the infrastructure to detect >>> those entries. >>> >>> Teach the softleaf layer to recognise PMD swap entries: >>> pmd_is_swap_entry() detects them and softleaf_is_valid_pmd_entry() >>> accepts them as a valid non-present type. Because swap entries do not >>> encode a PFN, make pmd_softleaf_to_folio() warn and return NULL for them >>> instead of passing the swap offset to softleaf_to_folio(). Clear the >>> exclusive overlay bit in softleaf_from_pmd() before decoding, matching >>> how soft_dirty and uffd bits are already stripped. >>> >>> Add pmd_swp_mkexclusive(), pmd_swp_exclusive(), and >>> pmd_swp_clear_exclusive() helpers to each architecture that supports >>> PMD softleaf entries (x86, arm64, s390, riscv, loongarch, powerpc), >>> mirroring the existing PTE swap exclusive helpers in each arch's >>> pgtable.h. >> >> Ah, for migration entries we still use a dedicated migratetype. I actually have >> on my todo list to move to PTE bits as well. > > We do seem to have rather hacked in PMD level stuff across the board > previously :) > >> >> (likely the _swp_ part should then be renamed to indicate that this is for >> softdirty entries, not just swap entries) > > You mean softleaf? > Yes, I read that as softleaf as well.>> >>> Provide generic no-op PMD swap exclusive fallbacks for >>> architectures without PMD softleaf support, matching the generic PMD >>> swap soft-dirty fallbacks. >> >> No softleaf implies to migration and no swap, so this would work. >> >> You should extend mm/debug_vm_pgtable.c in a separate commit to test what >> pte_swap_exclusive_tests() tests for PMDs. > > BTW one thing I should maybe mention here is that I never quite _finished_ > the softleaf thing, so there's some awkward overlap between swap stuff and > softleaf stuff (swap entries _are_ softleaf entries, just a specific kind). > > Infinite TODO list etc. (maybe this is a hint/nudge to somebody else to do > it ;) > I kind of tried to tackle some this along the way, with the prep series in [1] [1] https://lore.kernel.org/all/20260706114320.1643046-1-usama.arif@linux.dev/#t >> >>> >>> Signed-off-by: Usama Arif >>> --- >>> arch/arm64/include/asm/pgtable.h | 6 +++++ >>> arch/loongarch/include/asm/pgtable.h | 19 ++++++++++++++ >>> arch/powerpc/include/asm/book3s/64/pgtable.h | 17 +++++++++++++ >>> arch/riscv/include/asm/pgtable.h | 15 +++++++++++ >>> arch/s390/include/asm/pgtable.h | 17 +++++++++++++ >>> arch/x86/include/asm/pgtable.h | 17 +++++++++++++ >> >> I'm sorry for asking you to compete with Kiryll's series by creating one patch >> for each architecture that directly jumps at arch maintainers :) >> >> [...] >> >>> #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY >>> static inline pte_t pte_swp_mksoft_dirty(pte_t pte) >>> { >>> diff --git a/include/linux/leafops.h b/include/linux/leafops.h >>> index 7c13c58a5e218..4a6c52974b305 100644 >>> --- a/include/linux/leafops.h >>> +++ b/include/linux/leafops.h >>> @@ -102,6 +102,8 @@ static inline softleaf_t softleaf_from_pmd(pmd_t pmd) >>> pmd = pmd_swp_clear_soft_dirty(pmd); >>> if (pmd_swp_uffd(pmd)) >>> pmd = pmd_swp_clear_uffd(pmd); >>> + if (pmd_swp_exclusive(pmd)) >>> + pmd = pmd_swp_clear_exclusive(pmd); >> >> Can't we just unconditionally clear these flags? >> >> pmd = pmd_swp_clear_uffd(pmd); >> pmd = pmd_swp_clear_exclusive(pmd); >> >> Avoids these rather unnecessary conditionals unless I am missing something. >> >> >>> arch_entry = __pmd_to_swp_entry(pmd); >>> >>> /* Temporary until swp_entry_t eliminated. */ >>> @@ -634,18 +636,30 @@ static inline bool pmd_is_migration_entry(pmd_t pmd) >>> */ >>> static inline bool softleaf_is_valid_pmd_entry(softleaf_t entry) >>> { >>> - /* Only device private, migration entries valid for PMD. */ >>> + /* Device private, migration, and swap entries valid for PMD. */ >> >> Can we just drop that comment? I mean, it's as clear as it gets in the code >> immediately below :) >> >>> return softleaf_is_device_private(entry) || >>> - softleaf_is_migration(entry); >>> + softleaf_is_migration(entry) || >>> + softleaf_is_swap(entry); >>> +} >>> + >> >> -- >> Cheers, >> >> David > > -- > Cheers, Lorenzo