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 C56D3C7114A for ; Tue, 17 Jun 2025 04:19:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 655B56B0092; Tue, 17 Jun 2025 00:19:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 62D376B0093; Tue, 17 Jun 2025 00:19:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 56A776B0095; Tue, 17 Jun 2025 00:19:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 4813B6B0092 for ; Tue, 17 Jun 2025 00:19:01 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id CD3421D8338 for ; Tue, 17 Jun 2025 04:19:00 +0000 (UTC) X-FDA: 83563587240.27.841FA2B Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) by imf10.hostedemail.com (Postfix) with ESMTP id 04A2FC000E for ; Tue, 17 Jun 2025 04:18:58 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dwH7Epxv; spf=pass (imf10.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=lizhe.67@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750133939; 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=w56CkoZmOBP7eVY7ps5X3d048z5btToxOlcYqOG+Pe4=; b=Pyhwomn1a6EwxWSKdzkqejUXSAVcZwQRevWJ60V6TB3kySDwh24sEdyAwD8Ik09Wk535kR 1SxiLPFX33ZY+nWozoyOqFpXSHcQ/TdPcwkwg34balK8n5HxJFa+rTze/X9HSAq8Zbodso rXgOi1yXLEby1fmwz/u5VCvGMvwvnjo= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=dwH7Epxv; spf=pass (imf10.hostedemail.com: domain of lizhe.67@bytedance.com designates 209.85.214.171 as permitted sender) smtp.mailfrom=lizhe.67@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750133939; a=rsa-sha256; cv=none; b=8luI0Ngm8JNTz6ekUIICunmr9OHrSMJd3rrc1J8eXmilt7zDTyRKSAGghYuaR/HNQo1Ary cRwQSJkEc6IcepgIQHbV46gVvAdDXWpcX5bmGGqUUb5U6rlfpeDP8MBt78Xf7cavntNQ5Z LAXajOCBJfyVoZ5e0gJqU3unYkUBoTM= Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-23694cec0feso954555ad.2 for ; Mon, 16 Jun 2025 21:18:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1750133938; x=1750738738; 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=w56CkoZmOBP7eVY7ps5X3d048z5btToxOlcYqOG+Pe4=; b=dwH7EpxvrFtvLvE8kFd2j6p/K3tTXK0tmgNzaBeKttygGkB+QtNIyXKUYs0J4HC5zd VH/5zYE/p/mmg+1KQ1M8IBLe196G9OaMMEzgH+J8jyyGqEOJYDhFdZfWvkXNFdE4aPVS MMRgvAogKpD++UyvHETvaomE+q5wSKcK195c/hS/BvBdxpTvv+otPZOE8VaCeiQD+RcA K3wWSD+zCU+4qZ/AzFcsJvB7BFIQj3OMspFYNWm0BUiWlAxd10hUC9e/e45kxzq3XTXy w6dAaRhY7Q6yzTvQomesJJdJ470WtUocFs9OZyiHsraTerc5n7eAbtUt3zoCnLvl3ENu QICQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750133938; x=1750738738; 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=w56CkoZmOBP7eVY7ps5X3d048z5btToxOlcYqOG+Pe4=; b=K3iMFpFrNBLnshVnQa/JNIw16zJ33gFKvhxw/i9+gRMOXwwywkLIfZKp63vlXu740S LJM1JeC5FvShQnLVcD41aG0Lq8iTRrGrSfHXhx39VRlAd5FuBkZ9Y1lgF64XkVjdyuhn w44lGnNarsKGevH7wZhCUCnAoxzGyxjcUCP8Lwf0RZsTxztvu1vTqirMhoKnAPoz23T9 8wcM9Y6JHMoyX89VQguDy5T9I9n3QQpaVjHYavnWpchl+LQ7ZwPALVSioqFnKss57y6e NYTKzIMMdIMuFCr9OMNDh6gI8Sre1Qs+NzlmGOOOJZwvkND3rBoYIjvzul7PM8t38y40 Ex/g== X-Forwarded-Encrypted: i=1; AJvYcCUJElMusmN50sni+uPRvAhtFGfGhXxoai5qnpiahCuPlXeKC458akUCgD7V5DD6kslEQNPzAbJkkg==@kvack.org X-Gm-Message-State: AOJu0YyU/nzGt7rNYeSlGfP6vG0Le2uqz0l0j/pMhZccC/9TwzqBpp+k TWSNXnW0ttlzaeap97Ihtp4Th2oTMtxCtD2MdG6hCPgNqk9tpd59djIez+ZAlrBJses= X-Gm-Gg: ASbGnctlhBuYtQHig6SCngnq2WrLSy4+MtUihH/SIiBE9KgpBq0E774p2cC9ayclE34 /mJ+F9Ldou667pK/AbSTXUitnD+qAStJwwCOHjRJu3GOs8pTtU+8prJe+UBiIZWiABlo75pE/sS vUAiVcXcMI5cuJU4obRx8bapwIFZqc3LlrjOMllFzgM5f1S/wpxzSaELwa2QTcEm3uLGuAsAQ0o MY8RIJa3C3mRPH+D4F7ULXvAAu3RSXGbV46AdSSs3P57mk5eb8MDcB4QjR7RgEF3TN/qj5aP8dW qwZ2tosRStG8z07aHC3yUT/re+0Vzu9Pw9CBdflqklR6YbxvEDK8KC9f6aApwoU96kjC9Hl3NKc UMwDTWM4l5A2tHA== X-Google-Smtp-Source: AGHT+IG96Kfj3jnMCouOQtJaFnWQzQIm60pETT4IyUybRMTMZVSaQLyo4ZaTsJAfjEoT+giwIio3Nw== X-Received: by 2002:a17:903:24f:b0:234:bca7:292e with SMTP id d9443c01a7336-2366afe6223mr187956125ad.14.1750133937768; Mon, 16 Jun 2025 21:18:57 -0700 (PDT) Received: from localhost.localdomain ([203.208.189.10]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2365d88c029sm69798345ad.26.2025.06.16.21.18.54 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 16 Jun 2025 21:18:57 -0700 (PDT) From: lizhe.67@bytedance.com To: alex.williamson@redhat.com, akpm@linux-foundation.org, david@redhat.com, peterx@redhat.com Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, lizhe.67@bytedance.com Subject: [PATCH v4 2/3] gup: introduce unpin_user_folio_dirty_locked() Date: Tue, 17 Jun 2025 12:18:20 +0800 Message-ID: <20250617041821.85555-3-lizhe.67@bytedance.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250617041821.85555-1-lizhe.67@bytedance.com> References: <20250617041821.85555-1-lizhe.67@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 04A2FC000E X-Stat-Signature: qm4xair541ifcfzy9yqwyai9yd4wfryh X-Rspam-User: X-HE-Tag: 1750133938-510192 X-HE-Meta: U2FsdGVkX1+XEXOyrzofbxr2DOpRb5nTmxkAPulEEAEMQX9GYdyZaBQYbmr69T7jYv9hiN4Mcwo2pXF6aRFqf9VFQrjBnztlMh6yHv0NhNuh5j95/PqCxQMdXE+YlR82/oEEhS+BZFezPI11BQjQRN+2ljM9hobKM3P9PwcYz8h3lYMz3Q1pOQi4zpvNtyuGbMtu8GN2L8rIpHuM6vm2olY3xFdj0VNc0JUzkxIxA5+duCcP5izVG3rOEIrQ8mKqAQaei4go9Oqk/o2UMjf3HZqbXCOLdFAif6nPbldMa7QAwAhiJbwYt64HJe+zgqoMBZy1WRn+1cvvtodnhgufIvjkHn9O4yYUnWMeKee4uokcsHQMGjgNSw4OMlFvxqD/ol2x2pDrv5UqY6h7zluy2tgRRBdZRaSItVR8sDUT2xmdbxdDScijxpUSXuUU6c0Qjq0D9mbtaT83CyTBA64W7i2yvLG34OOngxg6QCIla0Q2JF/Z0q8HW+DkcIycpKc8vZzRZI3yMWF1aWHXar49zygrwu56RuDHDeRukfXWsbWJgu/9B3LYMFRjj4vvs6aUqDp6kG/WFSlx6BGA+SmRSp1LAPxY27J8ep9u3IZmzk8yB7xOML02JlkWkUMCvVy6wCR+lG8bIiVQ5P8PlGFjdGIX2LkGBzNDZ+vxJ+65dvLwf9mZN5anjXSyyrYcgAIl5aEY3N+Lagc+hj4X7syBWKxf8GuOrpubP9HpEPhIFlEMydPZatYUH8m/iUubV+F0vTalVsMj2IMuWnWS/nvrutHnJNBKSTvsrTP/x7IdRBVuNEUbo6C01L/xrtKqwMA3O4L9gNbtEbn5KmQ+nmBJ2tdpfN8W7/s8QeD25EDgdBh8f9eHkaCkdLXbdPEj6OgSxG8OegUy09XLEnAeRrUC7SjCdjIjC/hmIMmkQgazb0qSUVwSmkQtBNZNU0e7D2/lmRxUtoctef2/02+zNQB aLsBLfQH cbVMkwseE7cU9EuqRuXvlyPvLLU1/H5tBskSJyQstORIIdJJMfgF7jw+rZ3fmKxrRiwtynHmWeuirGHJRNrk6WOBf/ysiKLNx145RipTCf3QcjnFsTKsWUNZj28Mz0N2BEhaXtwfnhPxEsHY8j5tceREco+tOpcsURSgIH8yBrGg/7qLRT3OfSUflR9QRWOJySzI6HLwI+Lz1rLZ55UmLEouDDKhR8Zx727YZPv+VrY4N7Rrup5ra5XiClxxYE5J8HSELOgSNhvLmk6QzSB1vianMEoJ0UZt26Soeq196cL7CBj8RNt2CrwsEWNlSdwEUTb1fMIdEDYABPr4nl9d6zUsxreUHVqALVj3n63HOIRq0PmstSI44FO5ZKbU44ZEVArj6 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: Li Zhe Introduce a new interface, unpin_user_folio_dirty_locked(). This interface is similar to unpin_user_folio(), but it adds the capability to conditionally mark a folio as dirty. VFIO will utilize this interface to accelerate the VFIO DMA unmap process. Suggested-by: David Hildenbrand Signed-off-by: Li Zhe --- include/linux/mm.h | 2 ++ mm/gup.c | 27 +++++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index fdda6b16263b..242b05671502 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1689,6 +1689,8 @@ void unpin_user_page_range_dirty_lock(struct page *page, unsigned long npages, bool make_dirty); void unpin_user_pages(struct page **pages, unsigned long npages); void unpin_user_folio(struct folio *folio, unsigned long npages); +void unpin_user_folio_dirty_locked(struct folio *folio, + unsigned long npins, bool make_dirty); void unpin_folios(struct folio **folios, unsigned long nfolios); static inline bool is_cow_mapping(vm_flags_t flags) diff --git a/mm/gup.c b/mm/gup.c index 84461d384ae2..15debead5f5b 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -360,12 +360,7 @@ void unpin_user_page_range_dirty_lock(struct page *page, unsigned long npages, for (i = 0; i < npages; i += nr) { folio = gup_folio_range_next(page, npages, i, &nr); - if (make_dirty && !folio_test_dirty(folio)) { - folio_lock(folio); - folio_mark_dirty(folio); - folio_unlock(folio); - } - gup_put_folio(folio, nr, FOLL_PIN); + unpin_user_folio_dirty_locked(folio, nr, make_dirty); } } EXPORT_SYMBOL(unpin_user_page_range_dirty_lock); @@ -435,6 +430,26 @@ void unpin_user_folio(struct folio *folio, unsigned long npages) } EXPORT_SYMBOL(unpin_user_folio); +/** + * unpin_user_folio_dirty_locked() - conditionally mark a folio + * dirty and unpin it + * + * @folio: pointer to folio to be released + * @npins: number of pins + * @make_dirty: whether to mark the folio dirty + * + * Mark the folio as being modified if @make_dirty is true. Then + * release npins of the folio. + */ +void unpin_user_folio_dirty_locked(struct folio *folio, + unsigned long npins, bool make_dirty) +{ + if (make_dirty && !folio_test_dirty(folio)) + folio_mark_dirty_lock(folio); + gup_put_folio(folio, npins, FOLL_PIN); +} +EXPORT_SYMBOL_GPL(unpin_user_folio_dirty_locked); + /** * unpin_folios() - release an array of gup-pinned folios. * @folios: array of folios to be marked dirty and released. -- 2.20.1