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 622BDC54798 for ; Tue, 27 Feb 2024 23:19:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A1B746B0200; Tue, 27 Feb 2024 18:19:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9A3586B0201; Tue, 27 Feb 2024 18:19:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 844736B0202; Tue, 27 Feb 2024 18:19:06 -0500 (EST) 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 6D4F66B0200 for ; Tue, 27 Feb 2024 18:19:06 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 21EC480E86 for ; Tue, 27 Feb 2024 23:19:06 +0000 (UTC) X-FDA: 81839151492.22.26BCE4B Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf06.hostedemail.com (Postfix) with ESMTP id 80D8118001C for ; Tue, 27 Feb 2024 23:19:02 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=PVfsPdJu; spf=pass (imf06.hostedemail.com: domain of gonehacking@gmail.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=gonehacking@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709075942; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=k+BpDIFupl9L47GEChtRc9Hw8hU3e9sbyTct+1KRPXE=; b=jOO4KniortiWQOT5S98fBIfRrVeJb3Kb9iweY/u+eEF0FTb9frgDxfn7B9AYIE5dNA3VJ5 0RNE5fqEsWVbZAUfNzqb34Bt9DJDNUvkR3FEX5RC0dfKUTU0utAFL7abQ/1CiweAi9pQHX bK5w/hvZxeuxkl5GF6ZygSiSCvci03E= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=PVfsPdJu; spf=pass (imf06.hostedemail.com: domain of gonehacking@gmail.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=gonehacking@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709075942; a=rsa-sha256; cv=none; b=bgVfO0VcQ5CQNKaAkyCgCjf+2ikq/FEtBFFXDIichD1EwtGEj9hkEDXCDn3YaTA+Uxf7ci WFofUOKvNx25enxAymLMAeJK5eL3cRXlGWSn4xAYRGggUt6CwsoYI/nq2+PsrGu58kc5o1 4AQVtU+y9ywrzIGbeM+13JT7ALRQPiA= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1dc96f64c10so25927955ad.1 for ; Tue, 27 Feb 2024 15:19:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709075941; x=1709680741; darn=kvack.org; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:subject:message-id:from:from:to :cc:subject:date:message-id:reply-to; bh=k+BpDIFupl9L47GEChtRc9Hw8hU3e9sbyTct+1KRPXE=; b=PVfsPdJu+1wKFEg0MMY4l2xXNbe+jZjqxTv8Ae9rWXIW11UnC1CSfMdWN1RmhmULKC 2S+Oiqqk1NsqmOrsd/yCnX0cvainGf0hX8nKXieiqTvNoHpOxewulAB9be8KyndRFuQH Agh4UMWHntqtxx9lGr/OueDHXC69oML6NlfR3W/DbIM1Bxl578Zv08NaCJGqiPCXTPwb H5kbsGYWg8FwNfRLLJp3ck2yK4V/A37yM0FwOb6JjqZkxNkquLUlpwOpa6i9be0z9umA XCFLMErP5ElAOSJyaU3Hn5TtXdx9C2yCQygHgsvmUTaqp7AMm58oikgWj411Ynq0tVYM t04g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709075941; x=1709680741; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:subject:message-id:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=k+BpDIFupl9L47GEChtRc9Hw8hU3e9sbyTct+1KRPXE=; b=IAJeYumQkXFbMpqPAHHoOPB6BRY9s5AgA7yyNWLERssnuoefdDLig4WVfKM67O6uOL 6Nk4nHraq49IPjkSKwToh9I0zwMtAw1j7Q9YKZnltCSvSsGmeU6/6B1aNVHV8LpNpTFp PCT/XTZoTqINpaRvVB7Pd5EwTUpcz83C6Qq0M4IiGS4KyPX8Ff2vvcAZCy6IPXhrDpqm nhaL8w1DBVCR1Yxfx8Ar8UJdORrNyaIezUfC7dKa2FFRCv3cQy38u+GiZF1AxJqvtd9e 3rvi4tRQeBXjC9ihVxVg6Uhx2hVyDyJxtzbzHv2Vov9pTTNtRBAnlrhhHf/e2+hOX0qY NxJA== X-Gm-Message-State: AOJu0YypKEcXQYKJK+Y32ubqtYIFcEL2s/gkyo3E7lAP5nPmlcAfT1gp JaSS0eqCHFFsFkqjmSd6u263yY4I2WQlUJMgcNrHBwBk9pQmx1Yo X-Google-Smtp-Source: AGHT+IHhQQZwHOzSmMsfpAmkSOHt5WYPh3kxfwTYs5P+5qXT5n4tcCf/e0D5j/XBcPaQsMPNFJEhAg== X-Received: by 2002:a17:902:8349:b0:1db:5b41:c5ac with SMTP id z9-20020a170902834900b001db5b41c5acmr9865212pln.68.1709075941149; Tue, 27 Feb 2024 15:19:01 -0800 (PST) Received: from [10.239.156.40] ([148.87.23.13]) by smtp.googlemail.com with ESMTPSA id az2-20020a170902a58200b001dca920ae40sm2030171plb.203.2024.02.27.15.19.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 15:19:00 -0800 (PST) From: Khalid Aziz X-Google-Original-From: Khalid Aziz Message-ID: <661e519bc7753d784449931876a61f34bc8ad6ca.camel@oracle.com> Subject: Re: [PATCH v1] mm: convert folio_estimated_sharers() to folio_likely_mapped_shared() To: David Hildenbrand , linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, Barry Song , Vishal Moola , Ryan Roberts Date: Tue, 27 Feb 2024 16:18:59 -0700 In-Reply-To: <20240227201548.857831-1-david@redhat.com> References: <20240227201548.857831-1-david@redhat.com> Autocrypt: addr=khalid.aziz@oracle.com; prefer-encrypt=mutual; keydata=mQINBFA5V58BEADa1EDo4fqJ3PMxVmv0ZkyezncGLKX6N7Dy16P6J0XlysqHZANmLR98yUk41rpAY/Sj/+dhHy4AeMWT/E+f/5vZeUc4PXN2xqOlkpANPuFjQ/0I1KI2csPdD0ZHMhsXRKeNv32eOBivxyV0ZHUzO6wLie/VZHeem2r35mRrpOBsMLVvcQpmlkIByStXGpV4uiBgUfwE9zgoOSZ6m3sQnbqE7oSGJaFdqhusrtWesH5QK5gVmsQoIrkOt3Al5MvwnTPKNX5++Hbi+SaavCrODBoJolWd5R+H8aRpBh5B5R2XbIS8ELGJZfqV+bb1BRKeo0kvCi7G6G4X//YNsgLv7Xl0+AiwIu/ybxI1d4AtBE9yZlyG21q4LnO93lCMJz/XqpcyG7DtrWTVfAFaF5Xl1GT+BKPEJcI2NnYnGIXydyh7glBjI8GAZA/8aJ+Y3OCQtVxEub5gyx/6oKcM12lpbztVFnB8+S/+WLbHLxm/t8l+Rg+Y4jCNm3zB60Vzlz8sj1NQbjqZYBtBbmpy7DzYTAbE3P7P+pmvWC2AevljxepR42hToIY0sxPAX00K+UzTUwXb2Fxvw37ibC5wk3t7d/IC0OLV+X29vyhmuwZ0K1+oKeI34ESlyU9Nk7syc1WJmk71XIoxJhObOiXmZIvWaOJkUM2yZ2onXtDM45YZ8kyYTwARAQABtCNLaGFsaWQgQXppeiA8a2hhbGlkQGdvbmVoaWtpbmcub3JnPokCOgQTAQgAJAIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAUCUDlYcgIZAQAKCRDNWKGxftAz+mCdD/4s/LpQAYcoZ7TwwQnZFNHNZmVQ2+li3sht1MnFNndcCzVXHSWd/fh00z2du3ccPl51fXU4lHbiG3ZyrjX2Umx 48C20Xg8 gbmdUBzq49+s12COrgwgsLyWZAXzCMWYXOn9ijPHeSQSq1XYj8p2w4oVjMa/Qf GueKiJ5a14yhCwye2AMf5o8uDLf+UNPgJIYAGJ46fT6k5OzXGVIgIGmMZCbYPhhSAvLKBfLaIFd5Bu6sPjp0tJDXJd8pG831Kalbqxk7e08FZ76opzWF9x/ZjLPfTtr4xiVvx+f9g/5E83/A5SvgKyYHdb3Nevz0nvnMqQIVfZFPUAQfGxdWgRsFCudl6i9wEGYTcOGe00t7JPbYolLlvdn+tA+BCE5jW+4cFg3HmIfYFchQtp+AGxDXG3lwJcNwk0/x+Py3vwlZIVXbdxXqYc7raaO/+us8GSlnsO+hzC3TQE2E/Hyn45FDXgl51rV6euNcDRFUWGE0d/25oKBXGNHm+l/MRvV8mAdg3iTiy2+tAKMYmg0PykiNsjDb3P5sMtqeDxr3epMO+dO6+GYzZsWU2YplWGGzEKI8sn1CrPsJzcMJDoWUv6v3YL+YKnwSyl1Q1Dlo+K9FeALqBE5FTDlwWPh2SSIlRtHEf8EynUqLSCjOtRhykmqAn+mzIQk+hIy6a0to9iXuLRdVbQfS2hhbGlkIEF6aXogPGtoYWxpZEBkZWJpYW4ub3JnPokCNwQTAQgAIQUCUDlYLwIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDNWKGxftAz+uTuD/9LyL45D/8uvqDgdECy7nQOAQua9Lir/HuA2IpE78rzrYPRQHkuX3NFDyVbMW8U9+67k2QtNKsWWGApZVX1hPmkho/gb/NZqLfrqQlQRhiEMP7IECxzuE+qCK7YE3fGuCUWDspR9U59dj2D0JZ81gnu0BnvXZwgIp5Hnc2gPpEdsWXRywhR0tQHnZApe3pPIHU49Nn6ZercETdq4/8zVMXqg+aKmt2UelbikfNAdJ9W5Ah4VCoXl2E5AOFNKvUYBQ5vELaD/jen1N88kr4Eq/g 0hRcPK+z +gUnk8ugMrB29tGPcoozh9fYnQ1TUc7OwkZpxnm/NqJl65hvyOksPN7YHgNQwOl tmpWi/PTRzRmyOrzYRUvnGb7oSVdU5io3CVqTnxt7YTrDFGrN8xZN6D1CKDXjHIWo6+nH3ihFuAsQG/oG7VSKXzW2EdTOwAswewkeiOwQl5/xvfMlXnTVA7O/hA3xb0QdHAQM7fAyJcRnYQ2Ahv0upEVoXK09trSSZ7gApKG3PeyY4KegeqcXcfp/2H7E7bsf3k8UrgCPB8uK+JgdM+/3UvGFqCny+i8jmTQ4vNbcmymSc3RqFjPOSYeBFQXEtYdUK1OC9Cc0uK5tsbZMbdKr1SKYlpdv95AQtXS7O0q6AoII4FdLYkwXU27MfCFFQZcOtMlhij8dCHhsb3LQoS2hhbGlkIEF6aXogKEB3b3JrKSA8a2hhbGlkLmF6aXpAaHAuY29tPokCYwQwAQgATQUCUi3Wn0YdIEkgbm8gbG9uZ2VyIHdvcmsgYXQgSFAgYW5kIHRoaXMgZW1haWwgYWRkcmVzcyBpcyBub3QgdmFsaWQgYW55IG1vcmUuAAoJEM1YobF+0DP6v9YQANPqiRTiAasHJhP4FYKAjbZ8eVvtsX7X2PMELU0u4UbMuxf4Sfc7hMLG8olMOx2nN9xPK2F4Hk5toLsu+eynliX0WcjaRC8Kjv2UqUGQMGZVPvTIVVL2qxkNpQ65kxKKoD+jmGT9/3YXV61PhRsMG0KvZ95ua9ESsb5NqS6kjlVuecZmo7tRZYgyVTAUSk7oyGbJhvpRNgMc73Kcnlb/Dv57LYEtpczo41iT1m6doQzUYkQXHDrFqMxq9v0QU1+yEzADhp5oIgzweoJ3ROOupyk5ZGj7nDj/HCTH4yEgd3HQ0aVIhVDGm3t5VfH04OLGsdX94hHu2O3fVajFkv0oKR7E3dbZE6sJd/vN7tDw/4fpAVvBsC+KG1O8HdxdA43AIma8EktAlGCldn2 z2+kC0U8 bomOeUSgXpKIRPOQ4aAk/SkyijuMGURMs3JJVSCnJrA4uDuV7T6TyukP8WSW4hfz c1G3dsBL5lLJbdKxcSBcYJkyoubXsbB/dIZbkDur9IxJoPb2kvu114KftVpJD8kTmxOUF0EzY5nTQcL4OXlkWeeQJOSq8WJ6u6zMrxa9yhj3ycI6+cruujTlDbG1uZ1ZDUR8QuDsaXPkmToZEIgs+qxCo5TNuO3Qtf7unkgZ7QO98wbEno9uI6faOEITRqGDuIQjRjMGF5fgYqOMHxGOytCRLaGFsaWQgQXppeiA8a2hhbGlkLmF6aXpAb3JhY2xlLmNvbT6JAk4EEwEKADgWIQQs2Bi/9kYZ6ttYITTNWKGxftAz+gUCXB2D7gIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDNWKGxftAz+nuYD/0UxkZQKUjmbqLXQVzAM42sJTUfVdH6SaJ6oP4KRBIujjiImcM4pgz0z/8MnKnSPEsbMyZBTebyDtRvBUj65R4ErWoVGdxV4zW3alkO0aiO8omptZBxhGaewndQkK5Ce0P99+3A+h006EBf9kwnannjVn1rnK27vu5Z4LEWDwSztVNsskpfCoRuG//tFNRY5C2tIQ6mMcqpqAYVOR4txj0zUJIrqbzA1EYmboY1T7xt5BJpm35z1twm4PEytwxzZInlqy9g2dc8gSBnosboQq4hqbtFllD+9nmya1nMKWD0sLM/4pR8A+NoZQBwyT9g4DNe2ElHMJ5jU02OaMdPsCZgdCSS7t9YdmL86gcWrCR3zmrXd8rUq8UsT1N8pVpAUarWC9aNAnMFXWEVgiARVjaVK74gwd7cfg+xVCJWbP7FN3Mxpa08yfpQMCqDHQEv2w1heR30n+V97Mi1VfICV/QK6ikkxGOfOBrh+a/Y8pAoo9Ciobci1POy0NwiPh0tx8dmVY3UGzQ5iqO4X0ELIu+5SOUsZvU4hsTv4oRgcPa hYKZrQkZ Z7mozyYnviXQDp98+fhVi/pqO2nGdt9bjIFtxv4BesK/QAa9VoQFKewNKOZQmzj8g TqwpyOz+qXApkJAD9CM1cidYo4vhRYRvozidcYy+FFZwCEk4NckLw6mP67kCDQRQOVefARAAsdGTEi98RDUGFrxK5ai2R2t9XukLLRbRmwyYYx7sc7eYp7W4zbnIW6J+hKv3aQsk0C0Em4QCHf9vXOH7dGrgkfpvG6aQlTMRWnmiVY99V9jTZGwK619fpmFXgdAtWFPMeNKVGkYzyMMjGQ4YbfDcy04BSH2fEok0jx7Jjjm0U+LtSJL8fU4tWhlkKHtO1oQ9Y9HHUie/D/90TYm1nh7TBlEn0I347zoFHw1YwRO13xcTCh4SL6XaQuggofvlim4rhwSN/I19wK3iYwAm3BTBzvJGXbauW0HiLygOvrvXiuUbyugMksKFI9DMPRbDiVgCqe0lpUVW3/0ynpFwFKeRFyDouBc2gOx8UTbcFRceOEew9eNMhzKJ2cvIDqXqIIvwEBrA+o92VkFmRG78PleBr0E8WH2//H/MI3yrHD4F4vTRiPwpJ1sO/JUKjOdfZonDF6Hu/Beb0U5coW6u7ENKBmaQ/nO1pHrsqZp+2ErG02yOHF5wDWxxgbd4jgcNTKJiY9F1cdKP+NbWW/rnJgem8qYI3a4VkIkFT5BE2eYLvZlRcIzWc/ve/RoQh6jzXD0T08whoajZ1Y3yFQ8oyLSFt8ybxF0b5XryL2RVeHQTkE8NKwoGVYTnER+o7x2sUGbIkjHrE4Gq2cooEl9lMv6I5TEkvP1E5hiZFJWYYnrXa/cAEQEAAYkCHwQYAQgACQUCUDlXnwIbDAAKCRDNWKGxftAz+reUEACQ+rz2AlVZZcUdMxWoiHqJTb5JnaF7RBIBt6IaLB9triebZ7GGW+dVPnLW0ZR1X3gTaswo0pSFU9ofHkG2WKoYM8FbzSR031k2NNk/CR0lw5BhwhAUZ0w 2jgF4Lr+ u8u6zU7Qc2dKEIa5rpINPYDYrJpRrRvNne7sj5ZoWNp5ctl8NBory6s3bbXvQ8zlMx x42oF4ouCcWtrm0mg3Zk3SQQSVn/MIGCafk8HdwtYsHpGmNEVn0hJKvUP6lAGGSuDDmwP+Q+ThOq6b6uIDPKZzYSaa9TmL4YIUY8OTjONJ0FLOQl7DsCVY9UIHF61AKOSrdgCJmN3d5lXevKWeYa+v6U7QXxM53e1L+6h1CSABlICA09WJP0Fy7ZOTvVjlJ3ApO0Oqsi8iArScpfbUuQYfPdk/QjyIzqvzklDfeH95HXLYEq8g+u7nf9jzRgff5230YW7BW0Xa94FPLXyHSc85TE1CNnmSCtgX15U67Grz03Hp9O29Dlg2XFGr9rK46Caph3seP5dBFjvPXIEC2lmyRDFPmw4ywKQczTkg+QRkC4j/CEFXw0EkwR8tDAPW/NVnWr/KSnR/qzdA4RRuevLSK0SYSouLQr4IoxAujnniu8LClUU5YxbF57rmw5bPlMrBNhO5arD8/b/XxLx/4jGQrcYM+VrMKALwKvPfj20mB6A== Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.50.0-1 MIME-Version: 1.0 X-Rspamd-Queue-Id: 80D8118001C X-Rspam-User: X-Stat-Signature: p1b7bbsdskt77xpx74hgsiqdthu5pdsa X-Rspamd-Server: rspam01 X-HE-Tag: 1709075942-898524 X-HE-Meta: U2FsdGVkX19fD/PAOD1SVi5Byl1kvifjLiVQdvDZ9unzE33NYL1X84f/ib0IC+fDyc+z33l08iHY+CST3DJiaqm8Yzgxxmfbs7SIU7HY1ieHotf2LxBEu5H1vwJ2qll5s3OYXhwAUvjVsujA80yDH0wTP7gJ5eTmAHMbxYHBR6zOXHBW4ODsnM/ZaziniPHc99bP59lXTZPo0+b6PKqBxfkEnmyNuFdmCrN7ZgisIITABvz1Agz3yEW388j+2Jj4rQ2sebK6UOE6CtHeyDAuZosdvaxndvHNK5JQM2dXN96Bdk4BXXfe5S1i1JYMvMm4NnP4R0Stggrxda3Qqo0e4fZWzBErgvGvJ2ezytT6Vkep2ncStM6kfQ9d9PaQ+qt3cNDHZVf5f5ZJL6n0IBL7MDzKWjuot+15vKzYKndMvjH37BudaRukGi4VxSCjEWCN3J94otyM995FrGM92104BLfdYMijEZg7vTqZKXSr0U7TR2jQ1O2H946YBDs5N198Y6iYeFpFlCAKIsB/s26Vu4epdIg5YzNwP3NWP/Djgd7n9BapB9LBWmxnDNPZN2NfCvzms7NOdhsRCztzRbKSaurD6tK6bi5pfnpGe5IC8ZgbHz9O0lT0AFyqIGoPrmTnWmXtcQSsSJAWgxU/K+DOSeWhwNPv/y9QkyPDrlfjUwFQGK7jHUmtSDtDodNjSg+x5WvPtXsKNMIcnq+SWDtLKTjXXCnt9M3SKfdF21tO5gORbxvuJlBy8X1o9e8NGp5uElEgD8jo1yatbmqoqYVOnD0erlfyLi8K9r/XwPgih9gHqErxRx6LsDnztV4vPYz8+ZcSMdWCb41tAg1PNaBPTi/jvzPl6mCoeYUHyYMbzXxHoIol7mAgIwo+7+XS44Dj5yWhj3SynD8F2OQQgr56PkiKuTB6uHdmx3LNtP/2NSc1tYjPNbEKaFAm4jVvfpeYKGO2SzUUT05C6zbCj9p tYyjhQnL tZZ0B7SEs+Up6k595/m5MQ9RFAs+H5SMDh110d5ndGt5KuS8ahWwjlZD3LmPLBeVC8GDBxkDWTkNgnk8bXPCAMGsoYaJSdm1mLsLdCF/B/FW5SCwfaIehhrFW/79GyGYYBL1I3pVHroThnWLP9ODD/feY4Hkh75P+Eot0zBuNZMdw/ZbrB6w0z2WYzRg7Dp26i5TwDW5Ci6SaJGZNCoDay3arGLkPjarsv4ZImXdMGIdrnm0Oa1Qf4pg7tzx+sWH6+OrJsvkoIqSm5TRVgTJv5qOYV8Vbpcha1vY8pbFfcxzogRzpQI5QtV/9TO2f8NmbI7H9AHW1eP27FdQTzx4kTveMzrRlecBbNqDPVgpwXBCVSzL+8mK9ijsFvbSViFWmNG+fsPpoehriELf1cNhvFgvDKi2pFkD3fWSwRBLe4k3d350DPx3MKFG70pYhM42ACZlvS2Q71RT1L+wF8Z7Z22zCSTaD3pALD9FhLF6cq2hMGPCV3PcTJm7HMiR/0hIt9rYDPrI0fXutAI4KfoV63DZaN6cgC4B+7bTmuJP++/75ds5vKd6IfMyZplwILO8g+jNs6mHcuWmd2tW0/DDUIjmrMIwEpS1z9CldxLvJe88/2XHvnJutB2ptxQqwFgYLTipwDNYrebj18cjmRskFzoZ02piNzu372YGdNA1ZqaF9Gj6c6PFf0pmRa0PGOMHeR0Z/ 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 Tue, 2024-02-27 at 21:15 +0100, David Hildenbrand wrote: > Callers of folio_estimated_sharers() only care about "mapped shared > vs. > mapped exclusively", not the exact estimate of sharers. Let's > consolidate > and unify the condition users are checking. While at it clarify the > semantics and extend the discussion on the fuzziness. >=20 > Use the "likely mapped shared" terminology to better express what the > (adjusted) function actually checks. >=20 > Whether a partially-mappable folio is more likely to not be partially > mapped than partially mapped is debatable. In the future, we might be > able > to improve our estimate for partially-mappable folios, though. >=20 > Note that we will now consistently detect "mapped shared" only if the > first subpage is actually mapped multiple times. When the first > subpage > is not mapped, we will consistently detect it as "mapped > exclusively". > This change should currently only affect the usage in > madvise_free_pte_range() and queue_folios_pte_range() for large > folios: if > the first page was already unmapped, we would have skipped the folio. >=20 > Cc: Barry Song > Cc: Vishal Moola (Oracle) > Cc: Ryan Roberts > Signed-off-by: David Hildenbrand This patch adds clarity while retaining current behavior, so looks good to me. Reviewed-by: Khalid Aziz > --- > =C2=A0include/linux/mm.h | 46 ++++++++++++++++++++++++++++++++++++-------= - > -- > =C2=A0mm/huge_memory.c=C2=A0=C2=A0 |=C2=A0 2 +- > =C2=A0mm/madvise.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 6 +++--- > =C2=A0mm/memory.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 2 +- > =C2=A0mm/mempolicy.c=C2=A0=C2=A0=C2=A0=C2=A0 | 14 ++++++-------- > =C2=A0mm/migrate.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 8 ++++---- > =C2=A06 files changed, 51 insertions(+), 27 deletions(-) >=20 > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 6f4825d829656..795c89632265f 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2147,21 +2147,47 @@ static inline size_t folio_size(struct folio > *folio) > =C2=A0} > =C2=A0 > =C2=A0/** > - * folio_estimated_sharers - Estimate the number of sharers of a > folio. > + * folio_likely_mapped_shared - Estimate if the folio is mapped into > the page > + * tables of more than one MM > =C2=A0 * @folio: The folio. > =C2=A0 * > - * folio_estimated_sharers() aims to serve as a function to > efficiently > - * estimate the number of processes sharing a folio. This is done by > - * looking at the precise mapcount of the first subpage in the > folio, and > - * assuming the other subpages are the same. This may not be true > for large > - * folios. If you want exact mapcounts for exact calculations, look > at > - * page_mapcount() or folio_total_mapcount(). > + * This function checks if the folio is currently mapped into more > than one > + * MM ("mapped shared"), or if the folio is only mapped into a > single MM > + * ("mapped exclusively"). > =C2=A0 * > - * Return: The estimated number of processes sharing a folio. > + * As precise information is not easily available for all folios, > this function > + * estimates the number of MMs ("sharers") that are currently > mapping a folio > + * using the number of times the first page of the folio is > currently mapped > + * into page tables. > + * > + * For small anonymous folios (except KSM folios) and anonymous > hugetlb folios, > + * the return value will be exactly correct, because they can only > be mapped > + * at most once into an MM, and they cannot be partially mapped. > + * > + * For other folios, the result can be fuzzy: > + * (a) For partially-mappable large folios (THP), the return value > can wrongly > + *=C2=A0=C2=A0=C2=A0=C2=A0 indicate "mapped exclusively" (false negative= ) when the folio > is > + *=C2=A0=C2=A0=C2=A0=C2=A0 only partially mapped into at least one MM. > + * (b) For pagecache folios (including hugetlb), the return value > can wrongly > + *=C2=A0=C2=A0=C2=A0=C2=A0 indicate "mapped shared" (false positive) whe= n two VMAs in > the same MM > + *=C2=A0=C2=A0=C2=A0=C2=A0 cover the same file range. > + * (c) For (small) KSM folios, the return value can wrongly indicate > "mapped > + *=C2=A0=C2=A0=C2=A0=C2=A0 shared" (false negative), when the folio is m= apped multiple > times into > + *=C2=A0=C2=A0=C2=A0=C2=A0 the same MM. > + * > + * Further, this function only considers current page table mappings > that > + * are tracked using the folio mapcount(s). It does not consider: > + * (1) If the folio might get mapped in the (near) future (e.g., > swapcache, > + *=C2=A0=C2=A0=C2=A0=C2=A0 pagecache, temporary unmapping for migration)= . > + * (2) If the folio is mapped differently (VM_PFNMAP). > + * (3) If hugetlb page table sharing applies. Callers might want to > check > + *=C2=A0=C2=A0=C2=A0=C2=A0 hugetlb_pmd_shared(). > + * > + * Return: Whether the folio is estimated to be mapped into more > than one MM. > =C2=A0 */ > -static inline int folio_estimated_sharers(struct folio *folio) > +static inline bool folio_likely_mapped_shared(struct folio *folio) > =C2=A0{ > - return page_mapcount(folio_page(folio, 0)); > + return page_mapcount(folio_page(folio, 0)) > 1; > =C2=A0} > =C2=A0 > =C2=A0#ifndef HAVE_ARCH_MAKE_PAGE_ACCESSIBLE > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 50d146eb248ff..4d10904fef70c 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -1829,7 +1829,7 @@ bool madvise_free_huge_pmd(struct mmu_gather > *tlb, struct vm_area_struct *vma, > =C2=A0 * If other processes are mapping this folio, we couldn't > discard > =C2=A0 * the folio unless they all do MADV_FREE so let's skip the > folio. > =C2=A0 */ > - if (folio_estimated_sharers(folio) !=3D 1) > + if (folio_likely_mapped_shared(folio)) > =C2=A0 goto out; > =C2=A0 > =C2=A0 if (!folio_trylock(folio)) > diff --git a/mm/madvise.c b/mm/madvise.c > index 44a498c94158c..32a534d200219 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -366,7 +366,7 @@ static int > madvise_cold_or_pageout_pte_range(pmd_t *pmd, > =C2=A0 folio =3D pfn_folio(pmd_pfn(orig_pmd)); > =C2=A0 > =C2=A0 /* Do not interfere with other mappings of this > folio */ > - if (folio_estimated_sharers(folio) !=3D 1) > + if (folio_likely_mapped_shared(folio)) > =C2=A0 goto huge_unlock; > =C2=A0 > =C2=A0 if (pageout_anon_only_filter && > !folio_test_anon(folio)) > @@ -453,7 +453,7 @@ static int > madvise_cold_or_pageout_pte_range(pmd_t *pmd, > =C2=A0 if (folio_test_large(folio)) { > =C2=A0 int err; > =C2=A0 > - if (folio_estimated_sharers(folio) > 1) > + if (folio_likely_mapped_shared(folio)) > =C2=A0 break; > =C2=A0 if (pageout_anon_only_filter && > !folio_test_anon(folio)) > =C2=A0 break; > @@ -677,7 +677,7 @@ static int madvise_free_pte_range(pmd_t *pmd, > unsigned long addr, > =C2=A0 if (folio_test_large(folio)) { > =C2=A0 int err; > =C2=A0 > - if (folio_estimated_sharers(folio) !=3D 1) > + if (folio_likely_mapped_shared(folio)) > =C2=A0 break; > =C2=A0 if (!folio_trylock(folio)) > =C2=A0 break; > diff --git a/mm/memory.c b/mm/memory.c > index 1c45b6a42a1b9..8394a9843ca06 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -5173,7 +5173,7 @@ static vm_fault_t do_numa_page(struct vm_fault > *vmf) > =C2=A0 * Flag if the folio is shared between multiple address > spaces. This > =C2=A0 * is later used when determining whether to group tasks > together > =C2=A0 */ > - if (folio_estimated_sharers(folio) > 1 && (vma->vm_flags & > VM_SHARED)) > + if (folio_likely_mapped_shared(folio) && (vma->vm_flags & > VM_SHARED)) > =C2=A0 flags |=3D TNF_SHARED; > =C2=A0 > =C2=A0 nid =3D folio_nid(folio); > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index f60b4c99f1302..0b92fde395182 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -642,12 +642,11 @@ static int queue_folios_hugetlb(pte_t *pte, > unsigned long hmask, > =C2=A0 * Unless MPOL_MF_MOVE_ALL, we try to avoid migrating a > shared folio. > =C2=A0 * Choosing not to migrate a shared folio is not counted as > a failure. > =C2=A0 * > - * To check if the folio is shared, ideally we want to make > sure > - * every page is mapped to the same process. Doing that is > very > - * expensive, so check the estimated sharers of the folio > instead. > + * See folio_likely_mapped_shared() on possible imprecision > when we > + * cannot easily detect if a folio is shared. > =C2=A0 */ > =C2=A0 if ((flags & MPOL_MF_MOVE_ALL) || > - =C2=A0=C2=A0=C2=A0 (folio_estimated_sharers(folio) =3D=3D 1 && > !hugetlb_pmd_shared(pte))) > + =C2=A0=C2=A0=C2=A0 (!folio_likely_mapped_shared(folio) && > !hugetlb_pmd_shared(pte))) > =C2=A0 if (!isolate_hugetlb(folio, qp->pagelist)) > =C2=A0 qp->nr_failed++; > =C2=A0unlock: > @@ -1032,11 +1031,10 @@ static bool migrate_folio_add(struct folio > *folio, struct list_head *foliolist, > =C2=A0 * Unless MPOL_MF_MOVE_ALL, we try to avoid migrating a > shared folio. > =C2=A0 * Choosing not to migrate a shared folio is not counted as > a failure. > =C2=A0 * > - * To check if the folio is shared, ideally we want to make > sure > - * every page is mapped to the same process. Doing that is > very > - * expensive, so check the estimated sharers of the folio > instead. > + * See folio_likely_mapped_shared() on possible imprecision > when we > + * cannot easily detect if a folio is shared. > =C2=A0 */ > - if ((flags & MPOL_MF_MOVE_ALL) || > folio_estimated_sharers(folio) =3D=3D 1) { > + if ((flags & MPOL_MF_MOVE_ALL) || > !folio_likely_mapped_shared(folio)) { > =C2=A0 if (folio_isolate_lru(folio)) { > =C2=A0 list_add_tail(&folio->lru, foliolist); > =C2=A0 node_stat_mod_folio(folio, > diff --git a/mm/migrate.c b/mm/migrate.c > index 73a052a382f13..35d376969f8b9 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -2568,11 +2568,11 @@ int migrate_misplaced_folio(struct folio > *folio, struct vm_area_struct *vma, > =C2=A0 /* > =C2=A0 * Don't migrate file folios that are mapped in multiple > processes > =C2=A0 * with execute permissions as they are probably shared > libraries. > - * To check if the folio is shared, ideally we want to make > sure > - * every page is mapped to the same process. Doing that is > very > - * expensive, so check the estimated mapcount of the folio > instead. > + * > + * See folio_likely_mapped_shared() on possible imprecision > when we > + * cannot easily detect if a folio is shared. > =C2=A0 */ > - if (folio_estimated_sharers(folio) !=3D 1 && > folio_is_file_lru(folio) && > + if (folio_likely_mapped_shared(folio) && > folio_is_file_lru(folio) && > =C2=A0 =C2=A0=C2=A0=C2=A0 (vma->vm_flags & VM_EXEC)) > =C2=A0 goto out; > =C2=A0