From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-180.mta1.migadu.com (out-180.mta1.migadu.com [95.215.58.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5008B3EF658 for ; Tue, 21 Jul 2026 01:34:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.180 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784597657; cv=none; b=BxSOICyUoxKA+S7j2jPAG71BXclCl0xbucykTfeK0gTGEFV6usZgYtHAa0OV7pWk/yjf8Fe/YncTFbkXjBFkhCuErVLFo2znTuixc2EPdwmCuHbLK8vLRnjE/UjbH+kxN1gmCT4IPuJhsoOHiPDVVr7f4wMC8y6U+I5p73Ydkv8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784597657; c=relaxed/simple; bh=Um+R2QgTvA9ZP6aA+ak47jjhalXVbnrF2gj/fwReRVM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Mwu8mpXKAt+dAj7feNBxeiJ1Oa3ltqlY+yKQsZ5NCb61jT2iWvWlzkeBHF9KiQgUqXL/2Wz8Wj9X5PawkfYXjaSZDHnMBuycSyiVZusvIMXIXmbJ9g9N1158DRlGrtl63qHzXzTceRZAwm+49YkBe+47mNbquTLmiZwB9RbArdQ= 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=Bw8Mi6dQ; arc=none smtp.client-ip=95.215.58.180 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="Bw8Mi6dQ" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1784597652; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=ssCjc5RyO4iON0/B4Mm6pQ4p+Fnv9Wcq91/6zrguLIA=; b=Bw8Mi6dQItJMykB2V4qA0T3ghdDWdAHjVAPr82lCKXtONIdiQg5xRnBKyucW9X5oV++0Kz jD5z8z8Li6CFZWs12EviQX77byjbHlaEBuTT1H64vyCmyjIGWfGew5KAzN01RLNukDn3ky nG8sQn+WoDqaIcKuRCJDUOYlwq3zBXU= From: Hongfu Li To: akpm@linux-foundation.org, david@kernel.org, ljs@kernel.org, liam@infradead.org, vbabka@kernel.org, rppt@kernel.org, surenb@google.com, mhocko@suse.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, hongfu.li@linux.dev, Hongfu Li Subject: [PATCH] mm/memory: use folio lock/ref helpers in do_swap_page Date: Tue, 21 Jul 2026 09:33:47 +0800 Message-ID: <20260721013347.65698-1-hongfu.li@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT From: Hongfu Li Replace page-level lock/ref operations with their folio equivalents in the device_private migration path of do_swap_page(). Introduce a local fault_folio to hold page_folio(vmf->page) to avoid repeated page_folio() invocations. Signed-off-by: Hongfu Li --- mm/memory.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index d5e87624f692..bd27372a1052 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4852,6 +4852,8 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) vmf->page = softleaf_to_page(entry); ret = remove_device_exclusive_entry(vmf); } else if (softleaf_is_device_private(entry)) { + struct folio *fault_folio; + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { /* * migrate_to_ram is not yet ready to operate @@ -4863,6 +4865,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) } vmf->page = softleaf_to_page(entry); + fault_folio = page_folio(vmf->page); vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address, &vmf->ptl); if (unlikely(!vmf->pte || @@ -4874,15 +4877,15 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) * Get a page reference while we know the page can't be * freed. */ - if (trylock_page(vmf->page)) { + if (folio_trylock(fault_folio)) { struct dev_pagemap *pgmap; - get_page(vmf->page); + folio_get(fault_folio); pte_unmap_unlock(vmf->pte, vmf->ptl); pgmap = page_pgmap(vmf->page); ret = pgmap->ops->migrate_to_ram(vmf); - unlock_page(vmf->page); - put_page(vmf->page); + folio_unlock(fault_folio); + folio_put(fault_folio); } else { pte_unmap(vmf->pte); softleaf_entry_wait_on_locked(entry, vmf->ptl); -- 2.54.0