From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 C22813EDAD9 for ; Wed, 29 Apr 2026 10:45:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.208.42 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777459528; cv=pass; b=azKK5b2brlgB/fYCtxw5T/u9acUEQOSOAqvPk/lAl9bKSVKTLsSHz+vL4vVa7srw9n8Dp7wZeWhATq529OJ6NbebppAn8autUb/O0GeeBNyh1Y4yJNTm3sDAe8JqbYfRypbSeowjakIyPkyfCxkEbL5pFGyxFLQSOdXbmVEB5nI= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777459528; c=relaxed/simple; bh=tVE5S0BTtcfwt1bTdp6ZY8ouvoLE+94Nwmye+Lj3YWk=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=oLqjKRW22iIKdopZM3QZ6t0SZgDy19yOs7VWVSaavpIuLa4j6dOKkZyeRZbCZMeQiCV8jQdOJ52on+EJUConZDxbLKaEsMUFM+hUk0tjg730ALxxmvL24rYtRnGeahUJvpzHVD1f4XRCTejaJzAzUCM4BSnbkodshjo7p2clrPQ= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QLGkmjRc; arc=pass smtp.client-ip=209.85.208.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QLGkmjRc" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-674a44b84fcso17869776a12.1 for ; Wed, 29 Apr 2026 03:45:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777459521; cv=none; d=google.com; s=arc-20240605; b=eshWmMn+UV2YUrXW/gsZuL4omoaJmmkHzhvkDX0D7Svwq0CCKx316xAfKFnrD8LNkC zT9dbq7fAhGXm6ZpSYVIU0HWeT//dHq+QdW2X8L1gVTcjkTPsnlYrYL77O63Y1IklVmW JttmVrUJqA4QXByBh7FJkCQJjeXAl1RGSelU1rpmYABAqhMrX5QJHv5BtopU/gjCxRXd /g0Skl3WR65FHMO4aFlsS6nNM/nVfNFwY+s8UsSGGypBet5cE7RtuEwlFJcBoJKdLkPi 0OiaPH2YMrCIVzlbzv409m1WBv3106g9yQr8NZhsVdCeRgn8D7d1zFcT4dSxZ+8XgrVV O0fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=FLWv4Dyhc6xb0m6CxtxZb9sh84xrjTl4TA29ODfDuGI=; fh=2ChLFe9eoxUe48XwkbAGsu98DjEkQeDKtLGJSLEe42Q=; b=le0l3L7CCCaJ74868TSYePNEZt86UwcR5t0jQKHLxWpAVQpsO/hErp7QueT6bbk5DF KskY3IQ8dyJLcF2rkyIAvhDbj3wzGnTGaUXDC2JI23MAEl2dCV9omddbhLI26GKWV+nT mQVOBlyhC31bw1bEkhoejhvqk3/n8sodvVPh9avsk9Hqp2SabcdbqDn766LTo6LwGq1B k6trTalltIv8kHscRK/9uXLC6ylkGQJpFANOSFr3n40Uq8irW8uSItKI6tYT9Y06WLLe 5wunXUVhfdIrO43pZeo8szwCL2ft6zic+bi29Q86W8z0u4MwbuOTw+hRIlL0W3Jj2ZI1 ofEA==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777459521; x=1778064321; darn=vger.kernel.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=FLWv4Dyhc6xb0m6CxtxZb9sh84xrjTl4TA29ODfDuGI=; b=QLGkmjRcfwwJZMQQ5QMvYNBz4UmDKXaMhaGUiDqj42EXIRTw3mKTBKVGS+V2g7wVIx G1LpvjoBzM/h3nPk/pw61FDPMUU7iA3Dxtmtv4SFSpqaIlkI2WskdxzIbUErlUlvgvvV 2k3ch3k3mkvF4gQ2CeBbo+uNr9V6iRbJ7Sd5C/vScCMBdW+1O6DVa3/+fckkC7modWxI 5eYAPmzr2JFSk6XW46VpH7RU8WL6/ilcRwP/l1Sus1uXSi0DASyIX1ASM7h/RhS0pYQT XAGKbD8w+SsKp+Zrv/A9nKdBcE+M+rkLpMcad8d5zIGrtRXZRx67aikEkqP+pQbp1y4i V4yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777459521; x=1778064321; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=FLWv4Dyhc6xb0m6CxtxZb9sh84xrjTl4TA29ODfDuGI=; b=Tz87Npr9NaxhemBVaiKnAhaC/XMmNy6M1flhXDtMI4rInNoIposuzyyUTQgtMYuUpC NMtkKk10yfArj/r3Dz5A25wsHVXeBp6Bx5fFqP965PJ3/x3Y0X4ekiQysQOfksFNkJSv fh6yN62teYDkW79T7g7Yf4ceDItMPS0jhWSsh0vLK/KEQkUgK7cDuIqWSInLoOjgB2Bc BpQQqm/KRWmCjtr6d7WRzoKLAZntVzQOOyFjSu7V27Y+SwKXyXzB0ZS0kpWQlR/Kz0Dw fQ1U/VRzWxj/ywEqtSSkUzqC17y78QkUZVWwgQpk0CV6syRmZ7//lR1FgTWQfyxCosci XYLw== X-Forwarded-Encrypted: i=1; AFNElJ+A3xrSbyyOZdItvh2hbcCLH6cXVzHKfgYME4xI3mieAeu8eX2RTgaYfM3+qFYlCgBKOBFnC3VhcA98Cjo=@vger.kernel.org X-Gm-Message-State: AOJu0YwXRSKB+WBV44oxcl2LkAUtSgeWQgXU9LSh9nJUMfuOqNySWQiq kQ1gDYSha09L0UT28ZvTE/FCcIHoHpg1QH7/pY4IlfpPnwUyn0Jng0lKYe7meEcy1ZyFnTTW8qy M6F937DYQcddyepLwTgSVeYGkU17H2Hc= X-Gm-Gg: AeBDiev7BSVvPESQjP5qvN26Vhmc6fGapJOvom6sjtv1iS2w4SwAhh/kn+BvjLZ9lo1 4vreQAu6CIqkLAxL6kKOX71AWdARZzvjjCWgR56We+hhPpzI4cbnlOfbEh0ex/A1217iwXCrGNf g+wKKEueRZGSnKzA45EkdVYWbwBqb1V4+3aNB7WOO/i3bp4vyhho5pGP8W7HZuYGgJ7nuYne+GC nDTdByE08JhP1SI4nfOsSHc/eJ1pkT+XegemubFWCABotPzzyMBoS/pU9i+c+QMaJl+GUAxA/FB TtMga9yM71Do4GRAUK0yaFGs4fX+Jos/4/tsgThl1wZyFMAbFiHnobxzLvfIhg== X-Received: by 2002:a05:6402:28cb:b0:66b:f527:c69d with SMTP id 4fb4d7f45d1cf-679bb056acbmr3469252a12.8.1777459520846; Wed, 29 Apr 2026 03:45:20 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260427100553.2754667-1-usama.arif@linux.dev> In-Reply-To: <20260427100553.2754667-1-usama.arif@linux.dev> From: Kairui Song Date: Wed, 29 Apr 2026 18:44:43 +0800 X-Gm-Features: AVHnY4Lj3JwvK6nLT8VGNteFRcouuzt-BTqTKJjtlUiiJGvdcVjOBTBriiHzzHc Message-ID: Subject: Re: [PATCH 00/13] mm: PMD-level swap entries for anonymous THPs To: Usama Arif Cc: Andrew Morton , david@kernel.org, chrisl@kernel.org, ljs@kernel.org, ziy@nvidia.com, bhe@redhat.com, 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, npache@redhat.com, Liam.Howlett@oracle.com, ryan.roberts@arm.com, Vlastimil Babka , lance.yang@linux.dev, linux-kernel@vger.kernel.org, nphamcs@gmail.com, shikemeng@huaweicloud.com, kernel-team@meta.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 27, 2026 at 6:09=E2=80=AFPM Usama Arif w= rote: > > When reclaim swaps out a PMD-mapped anonymous THP today, the PMD is > split into 512 PTE-level swap entries via TTU_SPLIT_HUGE_PMD before > unmap. > > This series introduces a PMD-level swap entry. The huge mapping is > preserved across the swap round-trip, and do_huge_pmd_swap_page() > resolves the entire 2 MB region in a single fault on swap-in, Hi Usama, Thanks for the work! > no khugepaged involvement is needed. swap_map metadata is identical swap_map is gone, metadata is still per slot but with PMD sized swapout, I think soon we can store a swp_tb entry directly in ci->table (make it a union maybe) so the metadata is significantly reduced from there too. Better do that later with cluster compaction. > Core patches: > 5. PMD swap entry detection (pmd_is_swap_entry, > softleaf_is_valid_pmd_entry) and per-arch pmd_swp_*exclusive > helpers (x86/arm64/s390/riscv/loongarch). > 6. __split_huge_pmd_locked() learns to split a PMD swap entry > into 512 PTE swap entries, used as the fallback when a > PMD-order resource is unavailable. > 7. Fork: copy_huge_non_present_pmd() duplicates the PMD swap entry > in one folio_dup_swap() call, with GFP_KERNEL retry mirroring > copy_pte_range(). > 8. Swapoff: unuse_pmd() reads the whole 2 MB folio and reinstalls > the PMD; falls back to PTE-split + unuse_pte_range() on error. There is a slight conflict with the swap folio allocation unification, which should be easy to solve. Just a little head up, check the swap_cache_alloc_folio helper here: https://lore.kernel.org/linux-mm/20260421-swap-table-p4-v3-4-2f23759a76bc@t= encent.com/ We will be able to directly allocate 2M folios using swap_cache_alloc_folio(orders =3D BIT(PMD_ORDER)) in the patch link above. Might even help to avoid issues with splitting or raced swapin? The conflict can be solved from either side, I'll update that series to disable the forced order 0 fallback and let caller pass in (orders =3D | BIT(0)) instead.