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 5EAE9C54ED1 for ; Fri, 23 May 2025 02:37:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B99DB6B0085; Thu, 22 May 2025 22:37:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B4B346B0088; Thu, 22 May 2025 22:37:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A62F86B0089; Thu, 22 May 2025 22:37:19 -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 899016B0085 for ; Thu, 22 May 2025 22:37:19 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 055921A11F3 for ; Fri, 23 May 2025 02:37:18 +0000 (UTC) X-FDA: 83472610998.17.B7A8EB8 Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by imf21.hostedemail.com (Postfix) with ESMTP id 4270E1C0002 for ; Fri, 23 May 2025 02:37:14 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=eoqdVMw7; dmarc=pass (policy=none) header.from=samsung.com; spf=pass (imf21.hostedemail.com: domain of jaewon31.kim@samsung.com designates 203.254.224.33 as permitted sender) smtp.mailfrom=jaewon31.kim@samsung.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747967836; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=As5i+0/cpCT9g4URT4jVIdfTgeV6sNph/97hu9uFMmo=; b=fLmCbP+q0sEnQUEHAPgCgKs/K2ICCkRnhpvejUyhPSuM65zzrXe+qWZ82hnGRSU2Oa6R9P ViRXcBD/+iOu6dpQupg8v1mV1dBpPvAmLx4tfefmZRztPLZed4Q1J6b1BH/KDc0Mlra39K Xzes9KXcD664m57FgcwjwHwF6gXTqv0= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=eoqdVMw7; dmarc=pass (policy=none) header.from=samsung.com; spf=pass (imf21.hostedemail.com: domain of jaewon31.kim@samsung.com designates 203.254.224.33 as permitted sender) smtp.mailfrom=jaewon31.kim@samsung.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747967836; a=rsa-sha256; cv=none; b=sE5eGSa30ql8JuXmSJTs/3I+KUULUhOVTImfmPWuvVupQDuxWns1kgfEel1qoeSMVTnjJU x1uuyzhi8Oe7OjaOOeaGUBJqNtnNIXYm4c/YlfWHoFXclMv4GWkgYE07wZhPEO1v0uDeJL 8OkQRSi8rHg9Q+j6aPe3YQGL3F5Qn+Q= Received: from epcas1p4.samsung.com (unknown [182.195.41.48]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20250523023711epoutp03c48e3768c5f8b67ae4a25a8ddecc9672~CB3tEHjGH0570505705epoutp03O for ; Fri, 23 May 2025 02:37:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20250523023711epoutp03c48e3768c5f8b67ae4a25a8ddecc9672~CB3tEHjGH0570505705epoutp03O DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1747967831; bh=As5i+0/cpCT9g4URT4jVIdfTgeV6sNph/97hu9uFMmo=; h=Subject:Reply-To:From:To:CC:In-Reply-To:Date:References:From; b=eoqdVMw7W7qDiWpHcAjkRTnJ2E9Ij8FIygGZDCrmlyFu0dOKUcvcyUao/6eca+Ou1 pGlSQY+IUTsagmAHPxB+hngYGLi9YL8efg+CptEgIppQOOBiKniV3ceOTfTfoPwYL4 u7eieRvN9uztu5O0Y1+TkVSY8tXjI93761qmb79I= Received: from epsnrtp03.localdomain (unknown [182.195.42.155]) by epcas1p2.samsung.com (KnoxPortal) with ESMTPS id 20250523023711epcas1p24db16f13d65fab22263cc8f0d3e956a0~CB3sv-knz2319523195epcas1p2P; Fri, 23 May 2025 02:37:11 +0000 (GMT) Received: from epcas1p2.samsung.com (unknown [182.195.36.225]) by epsnrtp03.localdomain (Postfix) with ESMTP id 4b3Tny4qjWz3hhTM; Fri, 23 May 2025 02:37:10 +0000 (GMT) Mime-Version: 1.0 Subject: reply: [RFC] pin_user_pages_fast failure count increased Reply-To: jaewon31.kim@samsung.com From: =?UTF-8?B?6rmA7J6s7JuQ?= To: David Hildenbrand , =?UTF-8?B?6rmA7J6s7JuQ?= , "zhaoyang.huang@unisoc.com" , =?UTF-8?B?7Jyg7Zic7IiY?= , "jhubbard@nvidia.com" , "surenb@google.com" , "Steve.Kang@unisoc.com" , "huangzhaoyang@gmail.com" CC: Jaewon Kim , "linux-mm@kvack.org" X-Priority: 3 X-Content-Kind-Code: NORMAL In-Reply-To: <1dd70770-f097-46bc-99b1-1bd3249032fb@redhat.com> X-Drm-Type: N,general X-Msg-Generator: Mail X-Msg-Type: PERSONAL X-Reply-Demand: N Message-ID: <20250523023709epcms1p236d4f55b79adb9366ec1cf6d5792b06b@epcms1p2> Date: Fri, 23 May 2025 11:37:09 +0900 X-CMS-MailID: 20250523023709epcms1p236d4f55b79adb9366ec1cf6d5792b06b Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" CMS-TYPE: 101P X-CPGSPASS: Y X-CPGSPASS: Y cpgsPolicy: CPGSC10-711,Y X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250522130101epcas1p435244c12cfc9bb7895008b8ea98af064 References: <1dd70770-f097-46bc-99b1-1bd3249032fb@redhat.com> <99ae448a-5c5e-4491-8cf7-1325f47e225e@redhat.com> <20250522130901epcms1p31d757b179fbb3563cad6bef4a1829235@epcms1p3> <20250522144418epcms1p2a31c1a5c95b1937077bddf1b30495e83@epcms1p2> X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 4270E1C0002 X-Stat-Signature: 4qnydm8s7eomuaipqabn988m4qssr4pk X-Rspam-User: X-HE-Tag: 1747967834-763896 X-HE-Meta: U2FsdGVkX18CDQIXVwiau8OsL2X0w+vbwwVCCeQHsUMUn3N6zcorTtpIjgRoveqYaREQbbeAHKqrEaasg4hvoJu43aDB9fS1xpiRNS8dBR2anJ+UB3KXU6IecDMm1Oa9IDQtIEtSWc8aBZmptsqaWRWjlIp4MMbPSdYjfcumEDgmzfsiMrFBlSAb8WSTfmiypp3mwBv1WTOWNqItrkwRMTM8T5ys1MnA67LNnm5mzzkZNp8DhQYhlzPEf9DfmWalAyFw3Vau6uwq9lwMRrOj0t3Hk8O6iT/wh3QR36BSsfDMqpEg9JKvPz8uMTOGt8TeYfVtWFj4T0nrE7nCOUqhVCHEhFAa5e76UlivmeHl2xk1q4XGEgxtMZVZW2V2puHQZKXGxwW9a/oBIbwkTXNsx4MyjZ31nYZv/do7XRTghWfkMP9DgPfKQggezyxpDvbE9fRPH2lVjb62/EN2LwMc1e7TZ1L7R7U0w4iH81HuveZSd7FRQ3OlwqWEcAYumetEjGCigPWoQWvP64mxK9nx8dlWYw6bAQEeYt2f6dwME1BTuTTFb2c3NCHfOVz3xNcrBqIlDI1aa74r0nxfc+4QBv37zw2KcW7D+hAffF/2pPlehoigd4v6dkKem1usvQMyxQEQc+zWRfzomxKRtjH/pC6qxp+amhfQMBWsuHV2klxmdjtMO6gseCY56C4nOLf8UlFfJd4Eby+J0pQCdnmn6p1emVgqTaYhGSMl8KiIIM6lxVOkPKrJ4rQjLPtWz6bjiJWX/gFn8Ky43z/WRBW7jt1v8w5qZt7LQtOElR2YSIxJxJUuQoqu91rd2hmoklTbZKUfsI0hAZN1Tp4+WHlk9HAtla726poV/laW5y/bQRumE182IYwKVklGcbgJ83y1o2FQR3uMVkQXY6oO57zXQm3OrNW4BHKPS2Z9rtiximSZxm+4xdI2v+w1ISjFN+TOo+yCQhTOQmkEu9QaCr7 xnQYSnv+ Z0K+j2O6zqQgR+D72yrT0sc7Sd2Pp8yajgrWFSpMaMRB880wtei2Jdgjg+yLC3wiCq4tnopavRcXwATfWMWp47ZucKBThClRtFIkhGzjpsJg6H+jdUpDi8j7l9CR//gsXBz7Uj4Ot6+MyFzIIx1rtkgZwEq6/FAhUNZ6LzvG8C41HBBeIQALQXp2VCOJsGGK4qaELr/FQsfW9HXKGmskShm4pTiYp+HyhcsFrbZ8NaP6fXeShrFUqZjZK7yTNrlSUalHe4DbU9bHIJT1gIl9Nv9fYtzTog7bNg21WxFns1gOXnS3o+enz+AWqePzuTluAQ44ynPVj3nbQfoJnSPeKV2YMODjKDE6Qjw4/EbBRJsNykmf8hgWlrS6LjvilrBMPpR353YgCmtyxuhHa24uiGgqs//NK7KBuhb+0CQGs9FXWJRyLiXKUsh2/RtUHWbV7Ygo/JT7RmlH2BV4= 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: >>> On 22.05.25 15:09, Jaewon Kim wrote: >>>>> On 22.05.25 12:18, ?=E6=9C=9D?=20(Zhaoyang=20Huang)=20wrote:=0D=0A>>>= >>>>=20On=20Mon,=20Apr=2028,=202025=20at=2002:12:57PM=20-0700,=20John=20Hub= bard=20wrote:=0D=0A>>>>>>>>=20On=204/28/25=201:56=20PM,=20David=20Hildenbra= nd=20wrote:=0D=0A>>>>>>>>>=20On=2028.04.25=2022:14,=20John=20Hubbard=20wrot= e:=0D=0A>>>>>>>>>>=20On=204/28/25=208:17=20AM,=20Jaewon=20Kim=20wrote:=0D= =0A>>>>>>>>>>>=20Hi=0D=0A>>>>>>>>>>>=0D=0A>>>>>>>>>>>=20If=20pin_user_pages= _fast=20does=20not=20pin=20all=20the=20requested=20number=20of=0D=0A>>>>>>>= >>>>=20pages,=20then=20drivers=20calling=20to=20pin_user_pages_fast=20shoul= d=20retry=0D=0A>>>>>>>>>>>=20until=20the=20gup=20pins=20all?=0D=0A>>>>>>>>>= >>=0D=0A>>>>>>>>>>=0D=0A>>>>>>>>>>=20Approaches=20vary,=20for=20handling=20= partial=20success=20of=20pin_user_pages().=0D=0A>>>>>>>>>>=0D=0A>>>>>>>>>>= =20*=20Many=20drivers=20unpin=20everything=20and=20either=20bail=20out=20en= tirely,=20or=0D=0A>>>>>>>>>>=20retry=20pinning=20the=20entire=20original=20= range.=0D=0A>>>>>>>>>=0D=0A>>>>>>>>>=20Hm,=20unpinning=20+=20trying=20to=20= repin=20the=20entire=20range=20can=20easily=20result=0D=0A>>>>>>>>>=20in=20= an=20endless=20loop=20on=20persistent=20errors=20IIRC?=0D=0A>>>>>>>>>=0D=0A= >>>>>>>>=0D=0A>>>>>>>>=20I=20vaguely=20recall=20a=20limited=20number=20of= =20retries,=20yes.=0D=0A>>>>>>>>=0D=0A>>>>>>>>=20thanks,=0D=0A>>>>>>>>=20--= =0D=0A>>>>>>>>=20John=20Hubbard=0D=0A>>>>>>>>=0D=0A>>>>>>>>=0D=0A>>>>>>>=0D= =0A>>>>>>>=20Hi,=0D=0A>>>>>>>=0D=0A>>>>>>>=20I'd=20like=20to=20report=20a= =20potential=20issue=20introduced=20by=20a=20recent=20change=20in=0D=0A>>>>= >>>=201aaf8c122918=20mm:=20gup:=20fix=20infinite=20loop=20within=20__get_lo= ngterm_locked=0D=0A>>>>>>>=0D=0A>>>>>>>=20Previously,=20the=20call=20to=20m= igrate_longterm_unpinnable_folio()=20was=20guarded=20by=20the=0D=0A>>>>>>>= =20collected=20variable.=20This=20meant=20that=20if=20a=20CMA=20page=20was= =20temporarily=20held=20in=20the=0D=0A>>>>>>>=20pagevec=20and=20failed=20LR= U=20isolation,=20it=20wouldn't=20be=20added=20to=20the=0D=0A>>>>>>>=20movab= le_page_list,=20but=20the=20collected=20counter=20would=20still=20be=20incr= emented.=0D=0A>>>>>=0D=0A>>>>>=20Okay,=20so=20we'd=20also=20express=20that= =20way=20=22any=20longterm_pinnable=20page=20found=22.=0D=0A>>>>>=0D=0A>>>>= >>=20There=20is=20lru_add_drain_all=20for=20dealing=20with=20this=20scenari= o,=20so=20this=20won't=20be=20the=20case,=20right?=0D=0A>>>>>=0D=0A>>>>>=20= Good=20point.=20Only=20concurrent=20isolation=20might=20be=20problematic=20= (concurrent=20reclaim?).=0D=0A>>>>>=0D=0A>>>>>>>=0D=0A>>>>>>>=20As=20a=20re= sult,=20migrate_longterm_unpinnable_folio()=20would=20return=20-EAGAIN,=20a= nd=0D=0A>>>>>>>=20the=20process=20would=20be=20retried=20until=20migration= =20of=20the=20CMA=20page=20succeeded.=0D=0A>>>>>>>=0D=0A>>>>>>>=20However,= =20in=20the=20recent=20patch=20merged=20into=20mainline,=20the=20logic=20no= w=20only=20checks=0D=0A>>>>>>>=20whether=20movable_page_list=20is=20empty,= =20and=20no=20longer=20relies=20on=20the=20collected=0D=0A>>>>>>>=20count.= =0D=0A>>>>>>>=20This=20can=20cause=20CMA=20pages=20that=20fail=20isolation= =20to=20bypass=20retry=20logic=20and=20remain=0D=0A>>>>>>>=20pinned.=0D=0A>= >>>>>>=0D=0A>>>>>>>=20Effectively,long-term=20pinning=20is=20now=20possible= =20for=20CMA=20pages=20?=20something=20that=0D=0A>>>>>>>=20previously=20wou= ld=20have=20been=20avoided=20through=20repeated=20attempts.=0D=0A>>>>>=0D= =0A>>>>>=20Calling=20migrate_longterm_unpinnable_folios()=20when=20there=20= is=20nothing=20to=20migrate=20is=20stupid.=0D=0A>>>>>=0D=0A>>>>>=20Maybe=20= something=20like:=0D=0A>>>>>=0D=0A>>>>>=20diff=20--git=20a/mm/gup.c=20b/mm/= gup.c=0D=0A>>>>>=20index=20329c5f7acc7a0..58b8e40fc19ed=20100644=0D=0A>>>>>= =20---=20a/mm/gup.c=0D=0A>>>>>=20+++=20b/mm/gup.c=0D=0A>>>>>=20=40=40=20-23= 01,14=20+2301,15=20=40=40=20static=20void=20pofs_unpin(struct=20pages_or_fo= lios=20*pofs)=0D=0A>>>>>=20=20=20=20=7D=0D=0A>>>>>=0D=0A>>>>>=20=20=20=20/*= =0D=0A>>>>>=20-=20*=20Returns=20the=20number=20of=20collected=20folios.=20R= eturn=20value=20is=20always=20>=3D=200.=0D=0A>>>>>=20+=20*=20Returns=20whet= her=20any=20longterm=20unpinnable=20folio=20was=20found=20(if=20isolation= =0D=0A>>>>>=20+=20*=20fails,=20not=20all=20can=20be=20added=20to=20the=20mo= vable_folio_list).=0D=0A>>>>>=20=20=20=20=20*/=0D=0A>>>>>=20-static=20void= =20collect_longterm_unpinnable_folios(=0D=0A>>>>>=20+static=20bool=20collec= t_longterm_unpinnable_folios(=0D=0A>>>>>=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20struct=20list_head=20*movable_folio_list,=0D=0A>>>>= >=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20struct=20pages_or= _folios=20*pofs)=0D=0A>>>>>=20=20=20=20=7B=0D=0A>>>>>=20+=20=20=20=20=20=20= =20bool=20drain_allow=20=3D=20true,=20any_unpinnable=20=3D=20false;=0D=0A>>= >>>=20=20=20=20=20=20=20=20=20=20=20struct=20folio=20*prev_folio=20=3D=20NU= LL;=0D=0A>>>>>=20-=20=20=20=20=20=20=20bool=20drain_allow=20=3D=20true;=0D= =0A>>>>>=20=20=20=20=20=20=20=20=20=20=20unsigned=20long=20i;=0D=0A>>>>>=0D= =0A>>>>>=20=20=20=20=20=20=20=20=20=20=20for=20(i=20=3D=200;=20i=20<=20pofs= ->nr_entries;=20i++)=20=7B=0D=0A>>>>>=20=40=40=20-2320,6=20+2321,7=20=40=40= =20static=20void=20collect_longterm_unpinnable_folios(=0D=0A>>>>>=0D=0A>>>>= >=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20if=20(folio_is_lo= ngterm_pinnable(folio))=0D=0A>>>>>=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20continue;=0D=0A>>>>>=20+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20any_unpinnable=20=3D=20true;=0D=0A>>>>>= =0D=0A>>>>>=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20if=20(f= olio_is_device_coherent(folio))=0D=0A>>>>>=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20continue;=0D=0A>>>>>=20=40= =40=20-2342,6=20+2344,8=20=40=40=20static=20void=20collect_longterm_unpinna= ble_folios(=0D=0A>>>>>=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20NR_ISOLAT= ED_ANON=20+=20folio_is_file_lru(folio),=0D=0A>>>>>=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20folio_nr_pages(folio));=0D=0A>>>>>=20=20=20=20=20=20=20= =20=20=20=20=7D=0D=0A>>>>>=20+=0D=0A>>>>>=20+=20=20=20=20=20=20=20return=20= any_unpinnable;=0D=0A>>>>>=20=20=20=20=7D=0D=0A>>>>>=0D=0A>>>>>=20=20=20=20= /*=0D=0A>>>>>=20=40=40=20-2417,11=20+2421,12=20=40=40=20migrate_longterm_un= pinnable_folios(struct=20list_head=20*movable_folio_list,=0D=0A>>>>>=20=20= =20=20static=20long=0D=0A>>>>>=20=20=20=20check_and_migrate_movable_pages_o= r_folios(struct=20pages_or_folios=20*pofs)=0D=0A>>>>>=20=20=20=20=7B=0D=0A>= >>>>=20+=20=20=20=20=20=20=20bool=20any_unpinnable;=0D=0A>>>>>=20=20=20=20= =20=20=20=20=20=20=20LIST_HEAD(movable_folio_list);=0D=0A>>>>>=0D=0A>>>>>= =20-=20=20=20=20=20=20=20collect_longterm_unpinnable_folios(&movable_folio_= list,=20pofs);=0D=0A>>>>>=20+=20=20=20=20=20=20=20any_unpinnable=20=3D=20co= llect_longterm_unpinnable_folios(&movable_folio_list,=20pofs);=0D=0A>>>>>= =20=20=20=20=20=20=20=20=20=20=20if=20(list_empty(&movable_folio_list))=0D= =0A>>>>>=20-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20return=200;=0D=0A>= >>>>=20+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20return=20any_unpinnabl= e=20?=20-EAGAIN=20:=200;=0D=0A>>>>>=0D=0A>>>>>=20=20=20=20=20=20=20=20=20= =20=20return=20migrate_longterm_unpinnable_folios(&movable_folio_list,=20po= fs);=0D=0A>>>>>=20=20=20=20=7D=0D=0A>>>>>=0D=0A>>>>>=0D=0A>>>>>=20--=0D=0A>= >>>>=20Cheers,=0D=0A>>>>>=0D=0A>>>>>=20David=20/=20dhildenb=0D=0A>>>>=0D=0A= >>>>=20Hi=0D=0A>>>>=0D=0A>>>>=20Thank=20you=20for=20your=20comment=20and=20= patch.=0D=0A>>>>=20By=20the=20way,=20what=20if=20there=20are=20any_unpinnab= le=20pages=20and=20also=20pages=20in=20the=20movable_folio_list,=0D=0A>>>>= =20but=20migrate_longterm_unpinnable_folios=20failed=20to=20migrate=20and= =20return=20other=20erros=20instead=20of=20-EAGAIN?=0D=0A>>>>=20In=20that= =20case,=20I=20think=20the=20CMA=20or=20other=20unpinnable=20pages=20would= =20be=20pinned.=0D=0A>>>=0D=0A>>>=20Oh,=20I=20think=20what=20we=20have=20to= =20do=20is=20call=20pofs_unpin(pofs)()=20in=20case=20we=0D=0A>>>=20return= =20with=20-EAGAIN=20early.=20That's=20what=0D=0A>>>=20migrate_longterm_unpi= nnable_folios()=20would=20do.=0D=0A>>=20=0D=0A>>=20I=20did=20not=20understa= nd.=20Do=20you=20mean=20we=20need=20to=20call=20pofs_unpin=20in=20case=20of= =20any_unpinnable?=0D=0A>=0D=0A>At=20least=20that's=20what=20we=20did=20bef= ore=201aaf8c122=20when=20calling=20=0D=0A>collect_longterm_unpinnable_folio= s()=20I=20think.=0D=0A>=0D=0A>>=20I=20think=20your=20following=20code=20see= ms=20to=20be=20good=20to=20me.=0D=0A>>=20=20=20=20return=20any_unpinnable= =20?=20-EAGAIN=20:=200;=0D=0A>=0D=0A>I=20think=20we=20have=20to=20call=20po= fs_unpin()=20here.=0D=0A>=0D=0A>Assuming=20we=20always=20call=20migrate_lon= gterm_unpinnable_folios()=20with=20a=20list=20=0D=0A>now,=20we=20could=20dr= op=20the=20list_empty()=20check=20in=20there.=0D=0A>=0D=0A=0D=0AThank=20for= =20your=20kind=20explanation.=0D=0A=0D=0AI=20think=20this=20is=20what=20you= =20meant,=20please=20let=20me=20know=20if=20you=20have=20an=20idea=20to=20m= ake=20this=20nicer.=0D=0AWe=20may=20be=20to=20able=20to=20prepare=20the=20p= atch=20next=20week.=0D=0A=0D=0A=20static=20long=0D=0A=20check_and_migrate_m= ovable_pages_or_folios(struct=20pages_or_folios=20*pofs)=0D=0A=20=7B=0D=0A+= =20=20=20=20=20=20=20bool=20any_unpinnable;=0D=0A=20=20=20=20=20=20=20=20LI= ST_HEAD(movable_folio_list);=0D=0A=20=0D=0A-=20=20=20=20=20=20=20collect_lo= ngterm_unpinnable_folios(&movable_folio_list,=20pofs);=0D=0A-=20=20=20=20= =20=20=20if=20(list_empty(&movable_folio_list))=0D=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20return=200;=0D=0A+=20=20=20=20=20=20=20any_unpinnab= le=20=3D=20collect_longterm_unpinnable_folios(&movable_folio_list,=20pofs);= =0D=0A+=20=20=20=20=20=20=20if=20(list_empty(&movable_folio_list))=20=7B=0D= =0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20if=20(any_unpinnable)=0D= =0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20po= fs_unpin(pofs);=0D=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20return= =20any_unpinnable=20?=20-EAGAIN=20:=200;=0D=0A+=20=20=20=20=20=20=20=7D=0D= =0A=20=0D=0A=20=20=20=20=20=20=20=20return=20migrate_longterm_unpinnable_fo= lios(&movable_folio_list,=20pofs);=0D=0A=20=7D=0D=0A=0D=0A=0D=0A>--=20=0D= =0A>Cheers,=0D=0A>=0D=0A>David=20/=20dhildenb=0D=0A=0D=0A=0D=0A