From patchwork Fri May 3 00:50:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Barry Song <21cnbao@gmail.com> X-Patchwork-Id: 13652248 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 31C94C4345F for ; Fri, 3 May 2024 00:51:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B7B436B0093; Thu, 2 May 2024 20:51:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B05206B0095; Thu, 2 May 2024 20:51:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9A56C6B0096; Thu, 2 May 2024 20:51:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 785A26B0093 for ; Thu, 2 May 2024 20:51:08 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 39F2B160164 for ; Fri, 3 May 2024 00:51:08 +0000 (UTC) X-FDA: 82075255416.29.C734F2A Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf05.hostedemail.com (Postfix) with ESMTP id 6AB6D100004 for ; Fri, 3 May 2024 00:51:06 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=AP+zSDyD; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf05.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714697466; 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=V8/xoQXqz11CQNwI09Ird7+bH6VcV03qRwDFMsnqJvs=; b=pprtE019vkmfGRGtijrKxPim9+W6YHie77cmTaOBlPurtrMd4RQpQZPYZcJ9Wv/Wvj7EAd kA3I3sEFf1gpWZ899ZtPsrwN4w/zfyRnuA4ROWeUHmJuTklrjcCCaF5m2xZziMslrI6jGZ rxOh7sapa5iXbgFh5Ecm62QqIBv0Av4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714697466; a=rsa-sha256; cv=none; b=ej1UugDRb96npqTEZlJ814h9JXyJX1eGM7MKpiMtosRa3boB6JRogPc5VnQvP54vkS9UIz T6cSNiYDT78UPbv7U4578En3C0LsCacvJVKYWx50JI4l3fxdCuxnqJ8mzSOgFbIXV5L8G+ ErfCkOz3iZND+FAUMCn69Tt4BRM+MvU= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=AP+zSDyD; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf05.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=21cnbao@gmail.com Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-1ecd3867556so16100995ad.0 for ; Thu, 02 May 2024 17:51:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714697465; x=1715302265; 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=V8/xoQXqz11CQNwI09Ird7+bH6VcV03qRwDFMsnqJvs=; b=AP+zSDyD2cbertc81m97nnSYNoeAekWZ943XqPXSMx5fpyvqEvzyrI0Hdob0Z6u6nB xQDGCBd8f/ys+dh1OzBNZxc9ThJ6y2TikE9o+A5ZdeRiKV/1WY06W9wa0qReJ7/Ri9Tl O/znHUkMkDl/Zd5g/gjehfs6ZnNMM8qbduXwXj/js14C+VjUs10+43vYVUo7bzaKzbAX iy9uhR6hzvytWdWQzpJOjRMtCAKWKG6wY9JORnrQv/scI7tth/k9on7SzW0SUn3rp386 JZxUtSwx0xlJadbLu9ThfDSzROKEccPsz3TZYoJebxdFebWN+06hvIHdzRXaTMzHx6c1 znwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714697465; x=1715302265; 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=V8/xoQXqz11CQNwI09Ird7+bH6VcV03qRwDFMsnqJvs=; b=dcxWEVr5jHxu96CWrz1V8cUEYhropgrxfMh5tnEno+FTxR4V3M7aDEMGTawnc2sayV GTpRmTrgnCSNxIA7fHeZmPeIoSSwHu3fZGPipjl69/zFV2TN3Slxo2S6YaxAXM3TSjTi JyJ0vdbzTgHbVf7IRTr8ISs7Y65WXPUNDNbzLP8atED8HOpk1Mu7DHPSF+ymMQY1+5VX kiveNw3YT8XyALWV0dIOOBnZ6/EcFdYfPyJ2YX4aCxam6jjaOgSx30wYQyeZacE1fDPc LWlUTATOaC6sDKp8h/fFSzUYLcgkEb+EzrES+ZbL8I3vts6ZnORJzCbxZOm0a2hZnhbs HmgQ== X-Forwarded-Encrypted: i=1; AJvYcCXbh+r1HC8n10QwmqTQFYaKV6RPbnwjQKFenbw/rYpXMRnoc+GbFZ1LSaCV4lCb+Mrjk31Lfjd2/1DsAXdoBMYs5Ps= X-Gm-Message-State: AOJu0YzawGZelcMhIT15euXwvSOS5RPknOpSKcwSadWlSbAcqxyBMPVC CtmaenOQwlt42KCqASa/vyySuXP5FrE3ph0uczIQGelEBnG1Wl6e X-Google-Smtp-Source: AGHT+IGFQTJEucm2ac55Okxx+HqgTWR7zEJF87WiBhCpMaLEsrJyrBBOIayzx6pibugr3l3cuGjLhA== X-Received: by 2002:a17:903:2384:b0:1ed:36dc:a570 with SMTP id v4-20020a170903238400b001ed36dca570mr620343plh.49.1714697465334; Thu, 02 May 2024 17:51:05 -0700 (PDT) Received: from localhost.localdomain ([2407:7000:8942:5500:aaa1:59ff:fe57:eb97]) by smtp.gmail.com with ESMTPSA id d14-20020a170903230e00b001ec48e41d2esm1969175plh.212.2024.05.02.17.50.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 May 2024 17:51:04 -0700 (PDT) From: Barry Song <21cnbao@gmail.com> To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: baolin.wang@linux.alibaba.com, chrisl@kernel.org, david@redhat.com, hanchuanhua@oppo.com, hannes@cmpxchg.org, hughd@google.com, kasong@tencent.com, linux-kernel@vger.kernel.org, ryan.roberts@arm.com, surenb@google.com, v-songbaohua@oppo.com, willy@infradead.org, xiang@kernel.org, ying.huang@intel.com, yosryahmed@google.com, yuzhao@google.com, ziy@nvidia.com Subject: [PATCH v3 3/6] mm: introduce pte_move_swp_offset() helper which can move offset bidirectionally Date: Fri, 3 May 2024 12:50:20 +1200 Message-Id: <20240503005023.174597-4-21cnbao@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240503005023.174597-1-21cnbao@gmail.com> References: <20240503005023.174597-1-21cnbao@gmail.com> MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 6AB6D100004 X-Stat-Signature: rmejz7ygs1brrd8gex7ewrdho7jm3rhg X-Rspam-User: X-HE-Tag: 1714697466-685770 X-HE-Meta: U2FsdGVkX1/QvhRCXfNh5zrz/kAxHA/d3pa7StQzpMafLXlPdyBCLLDm/PtFbYsH/VbuQ3xTk4aKSKkW3LK1HaI9XmiZNe2oYcItOJaw9Q3hLGeE/FzTqbxHYULJBrsnPhzM2ciGJ6SuEceHFu8KZEnHOPt+2z31ol7L5VuZJJw/LMMBn8tLp6HMLVyp7FIKB0byrbfdVxfnUdu0KZ/JvJwlmJyjAr1SgU7cYAunEiF9IpkPluT4u/Sj9wUFEKEcgKN7ZLbm0D2gfgXf/2am4uCKuvVb47T2ciWYTBni7EyEt/wuj3PfpZr2QHQGo7ijbJfSiT95RBhp6fLC5gWbyS5XNI6XLr/EGW89+ughDUnrQZZK38Dg6C7+iKE+qaF81OmJLOyaTJa8mB4grbzqs8G+7fWaG5vWnl99PzqlgdYHkn+lPrsSSgkcJtiAQHdbnCIJenpLba4YnigWsIfSIvGwT7q2Tniu/vXZDA9P0YRd5vHjgMTGCuRVcPWXglEGgBFEwe4PlcaFdOsdI44szX60m+dO6tFBwFFO7TwU/kqk1+EXN/R7EYh8Hxh/TQ8QWZHb5G3T/+iw7PPzDeKIyAXdn15GJgMp4YQaJj6N9om1VN5xZyQqGyfU0bVdq+bNxLxgVyGelYFqzXruk9dqOaK8ODZMlobNdMRrm3FzWdI5ruMX+Hf3uH3z+2enYjFFSSkTGNBFBR361fznBTJPyM9UObihuT8ADtcI51X6SLcCQOHV5UXcvwLoU+5HCrNLGWa/+nmd0hU9ooskTbEfXxQPhi/tlZa2bcBQq64OjnlwYY8NQ6pdyh6DpK/igM44w3ByjdiQ/CAQVNN5AnbLi8GdwDXsgAsT/PcN07I9QMlqN1vxU8f7oOF6BxzJKZYjctxoYqoP6WWKbBtbzmeK9uziF/U1by2u8jFJHWv/LWqpYzJyK2mEy+W6ZzHPunxjMxYGHELRqayiTkuVFuA CuAZHltI A0mJNlggQVxruKE5TaYBpdY0UPPNaeMs1hN7ulwE5sE4+MijoQ8WV/jejYe+rpF38Rtqf83QVBb0rqlDC/50adgjeOFP4bPYoj9HHxrCZBpMinJEGOIMw6m39gWfRETfsLJePr6F5cWXrDQ7env8aiXsfkp/lZcmwTiWug0cOPPHVcjk5ds1tdTPt/BgKdZtIDYYaGVnzB2X0S2MxtmQuZ5LKX33+RBmKxUY/znuj1nGzeeSdoo4IonYshteEoH5pMIqk8cHFujKFUzIfEC96P+hr2+E8w0rzuSkUDEqUgFHPTmEYf1P3Bkg1joeZhE4nFltMLlkB5vJ8mxllLhKaHftPiu9+miIilHhEHa0BWampUZHRyRpcF00+NwMOWmxHj0WTyOoHB4+g44IcoqRkB5dak0P7oqjl3tT6LgrvMnkUCc0absJOQvi1iXHlTNQqJS/T1CvJZ/BUhGB0ZPjsN3LHoNe9kW5dtopIPAXwnzZlvyTQPf7sTGaaMF8wBPG6tX92jAASFWsWR8yrQUhB+JdQKwv2EfhN538jImc/FPUDhdmXZc2wVhCLx56tVkA1hkDJL0srn5DEC2ja8uvjqvJqow== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Barry Song There could arise a necessity to obtain the first pte_t from a swap pte_t located in the middle. For instance, this may occur within the context of do_swap_page(), where a page fault can potentially occur in any PTE of a large folio. To address this, the following patch introduces pte_move_swp_offset(), a function capable of bidirectional movement by a specified delta argument. Consequently, pte_increment_swp_offset() will directly invoke it with delta = 1. Suggested-by: "Huang, Ying" Signed-off-by: Barry Song Reviewed-by: Ryan Roberts Reviewed-by: "Huang, Ying" --- mm/internal.h | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index c5552d35d995..cfe4aed66a5c 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -211,18 +211,21 @@ static inline int folio_pte_batch(struct folio *folio, unsigned long addr, } /** - * pte_next_swp_offset - Increment the swap entry offset field of a swap pte. + * pte_move_swp_offset - Move the swap entry offset field of a swap pte + * forward or backward by delta * @pte: The initial pte state; is_swap_pte(pte) must be true and * non_swap_entry() must be false. + * @delta: The direction and the offset we are moving; forward if delta + * is positive; backward if delta is negative * - * Increments the swap offset, while maintaining all other fields, including + * Moves the swap offset, while maintaining all other fields, including * swap type, and any swp pte bits. The resulting pte is returned. */ -static inline pte_t pte_next_swp_offset(pte_t pte) +static inline pte_t pte_move_swp_offset(pte_t pte, long delta) { swp_entry_t entry = pte_to_swp_entry(pte); pte_t new = __swp_entry_to_pte(__swp_entry(swp_type(entry), - (swp_offset(entry) + 1))); + (swp_offset(entry) + delta))); if (pte_swp_soft_dirty(pte)) new = pte_swp_mksoft_dirty(new); @@ -234,6 +237,20 @@ static inline pte_t pte_next_swp_offset(pte_t pte) return new; } + +/** + * pte_next_swp_offset - Increment the swap entry offset field of a swap pte. + * @pte: The initial pte state; is_swap_pte(pte) must be true and + * non_swap_entry() must be false. + * + * Increments the swap offset, while maintaining all other fields, including + * swap type, and any swp pte bits. The resulting pte is returned. + */ +static inline pte_t pte_next_swp_offset(pte_t pte) +{ + return pte_move_swp_offset(pte, 1); +} + /** * swap_pte_batch - detect a PTE batch for a set of contiguous swap entries * @start_ptep: Page table pointer for the first entry.