From patchwork Wed Aug 30 18:50:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13370639 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 5AD78C83F01 for ; Wed, 30 Aug 2023 18:51:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 65EB7440182; Wed, 30 Aug 2023 14:50:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 60E7E440178; Wed, 30 Aug 2023 14:50:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 488B6440182; Wed, 30 Aug 2023 14:50:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 31518440178 for ; Wed, 30 Aug 2023 14:50:58 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 00E30120375 for ; Wed, 30 Aug 2023 18:50:57 +0000 (UTC) X-FDA: 81181662996.09.0E38F59 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf05.hostedemail.com (Postfix) with ESMTP id 5A195100018 for ; Wed, 30 Aug 2023 18:50:56 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=CZer6hyz; dmarc=none; spf=none (imf05.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1693421456; 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=AmmffUWi4DDP1uL4h7Uj4Rayaqkr0URd3IDmGP6kFS8=; b=Ig1E2KAU34CZb1W7fMW4Bg50G1XugugcpypiIMxMdHTVCnw74nt1k+qsBje9l0JYsvBbdc Qy0PVPij7HICTRDMaAq2W27OTusmWv4JzJjQ3HBbItaKm7CHE4PHzynLXvWUotiSRxrijG zEAttCA/wq/B6USJ0w9+4iHq/S4cAo4= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=CZer6hyz; dmarc=none; spf=none (imf05.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1693421456; a=rsa-sha256; cv=none; b=1FRk0SyS+ntbMng1QLAMrqs0kEhZVkBx2fAclGFY98ZN+MByTd+HHmkX/dZNGVI+wke5/+ QoIxCc8zvVhTPt2wDWtOgfIwPUzoLHDw7BrENFxSeBVQ83Rg+ru4edxEW9rcCBXeGqnSRv r1hACcIan4H2Hakeo9LSjGs4EKA1qXM= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=AmmffUWi4DDP1uL4h7Uj4Rayaqkr0URd3IDmGP6kFS8=; b=CZer6hyzIpnLeFvk7OZ9qZ5xVe wpZXsu+pN8c3RtnEt35mg4N4idC8D8WIWzF/DMrBkSor14+zxeaun3M9gc0hcrhxnxe/9oAQ61SFW BxbfophGEA23n1utvDLLquDw4aYQ3x17R4nfigFGb79l30ohpPiriVjyBnWPb8VTw8FQsvbYCx7jZ mMrkVQkgkRbN0HaJc4h8pQvWVurZNeWGyhznS9tTa6Krgl7QV2CXnsifN/vVQyNxZ4N1Eq47320LE AhjMVHw5F0Pc6BkzcDQZ8kbR3TVTc4rp+XtE6XeDt7NX+kex99z/8L4iMHFyrQMHpAOQYhelyJoRW TvcofpWQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qbQH7-00ENfb-8Q; Wed, 30 Aug 2023 18:50:45 +0000 From: "Matthew Wilcox (Oracle)" To: linux-mm@kvack.org Cc: "Matthew Wilcox (Oracle)" , Ryan Roberts Subject: [RFC PATCH 18/18] mm: Add pfn_range_put() Date: Wed, 30 Aug 2023 19:50:41 +0100 Message-Id: <20230830185041.3427464-4-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230825135918.4164671-1-willy@infradead.org> References: <20230825135918.4164671-1-willy@infradead.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 5A195100018 X-Stat-Signature: k8wh3bucfgi1cpa5uyqrxw8j6e6xjxeu X-HE-Tag: 1693421456-803791 X-HE-Meta: U2FsdGVkX182pHJ5aJnr6F+x91JJ8ZluMXob3S3CuByFuIHw5YR+NVePaSqy3FCFoJt8ZPL40dejxdOZorSznUiXlsUG8Cs9U7yVVhjH1hWm15NL3Y3UrbCGQnbWSA06BhoUzwU0XAX7uc245sEGv6PISj1ptVArWV3SGZz9fz44ViIDQMk5RmHPwd9QQFt1YMZgOrpItbwFaG/3taLpuj5WGp3NR7CbJOeSw4UaMojvgFxKlpuaROVWwdABMDqrSRVGLzhwSJKbsOzA3mDLoyStTJwt3lEdfKN9q3PZ/jSpnQnvS+rqCJUB9mk+oGIqx6qYCOUyA1jLCrxpuaS20ecKun2T1GJb7YsC4APDLmIPu5ttvNguUMXsDsCVkT6UPEq5Zp4GnD2AvF9HndkF3EXhrZwVtEPmj6psyTOduRO08+IaYx7yjD3Gu4mqLP6x4Mo4pO+OEoyeQxcmhfz90LkqT25Vy8gBpxqd9HPut8us6C6xkfbtD4VLgWYorzF0nK+WJJ6NgF5UdglmQsyugcJVVuToF8oJdo1GCAbr56krOijjC0MkUEQQHfbY7yo80xF9bGPhSVX1fP1eIF+b4LB7cViMLR2TGd1i3r5a6Zl8RWRXjHeTYWpU1l+dHSTsGO9EmZZnky+hhbPmdSW7skCtF1V3N/9fiHQ4PHoxdhnuNxJfWND0kSgsHcBbrpJlO6/jIpXDnpbeJ4NNmfa0/P85R759MAxSd9PH2S69JSAsGBmiUqH4i6/lOYmFzDQYnko6KQtIREtVddLNQTRzjvTCLDjGRZcdL2BZ2L1OEWrpmEajZiYVdH9h4w4vdy7B4NWMfzUt6A0yEP4DCcIBl7RDGI6WZvxXUq6n7QGdmF5E+s9IQ1OnV+lEmGQ3MK2SahesdNaN+vQvDrPwQAHWRVrVMndYjTMs2QG6OTosz46furXAkgSPBroiDG36MvFLtItAw+hLAsk/3IPmWK3 pAf8NQgQ pf56Cjzxt/fIcHjYjjDlyq2nX8Bi/xCR37NCCeE2fB//wtVDK7oXqujN+H1KO+eYioF0M6Xi1gMWKHunbaM+K9M37wYUtT3v/hOfv79Cxg3ST2uOMF8T5K2j14laVETgAvAuNGURdyeKmHszje/KQ2nA7MA+mVLchg5Ms6ig7B+CYN5b0+YYF1u7I/UHUYR+8zFiy0FLDIH0aSRtQaKEGcPwCAB3wQOZx8LcX 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: This function will be used imminently. Signed-off-by: Matthew Wilcox (Oracle) --- include/linux/mm.h | 7 ++++++ mm/swap.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index a517ef8d2386..4f9e2cfb372e 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1515,6 +1515,13 @@ typedef union { void release_pages(release_pages_arg, int nr); void folios_put(struct folio_batch *folios); +struct pfn_range { + unsigned long start; + unsigned long end; +}; + +void pfn_range_put(struct pfn_range *range, unsigned int nr); + static inline void put_page(struct page *page) { struct folio *folio = page_folio(page); diff --git a/mm/swap.c b/mm/swap.c index 8bd15402cd8f..218d2cc4c6f4 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -1027,6 +1027,62 @@ void folios_put(struct folio_batch *folios) } EXPORT_SYMBOL(folios_put); +void pfn_range_put(struct pfn_range *range, unsigned int nr) +{ + struct folio_batch folios; + unsigned int i; + struct lruvec *lruvec = NULL; + unsigned long flags = 0; + + folio_batch_init(&folios); + for (i = 0; i < nr; i++) { + struct folio *folio = pfn_folio(range[i].start); + unsigned int refs = range[i].end - range[i].start; + + if (folio_is_zone_device(folio)) { + if (lruvec) { + unlock_page_lruvec_irqrestore(lruvec, flags); + lruvec = NULL; + } + if (put_devmap_managed_page_refs(&folio->page, refs)) + continue; + if (folio_ref_sub_and_test(folio, refs)) + free_zone_device_page(&folio->page); + continue; + } + + if (!folio_ref_sub_and_test(folio, refs)) + continue; + + /* hugetlb has its own memcg */ + if (folio_test_hugetlb(folio)) { + if (lruvec) { + unlock_page_lruvec_irqrestore(lruvec, flags); + lruvec = NULL; + } + free_huge_folio(folio); + continue; + } + + __page_cache_release(folio, &lruvec, &flags); + if (folio_batch_add(&folios, folio) == 0) { + if (lruvec) { + unlock_page_lruvec_irqrestore(lruvec, flags); + lruvec = NULL; + } + mem_cgroup_uncharge_folios(&folios); + free_unref_folios(&folios); + } + } + if (lruvec) + unlock_page_lruvec_irqrestore(lruvec, flags); + + if (folios.nr) { + mem_cgroup_uncharge_folios(&folios); + free_unref_folios(&folios); + } +} + /** * release_pages - batched put_page() * @arg: array of pages to release