From patchwork Tue Dec 5 05:35:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kasireddy, Vivek" X-Patchwork-Id: 13479375 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 86F97C4167B for ; Tue, 5 Dec 2023 05:58:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E0D796B0074; Tue, 5 Dec 2023 00:58:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DBDD16B0075; Tue, 5 Dec 2023 00:58:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C85696B0078; Tue, 5 Dec 2023 00:58:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B988F6B0074 for ; Tue, 5 Dec 2023 00:58:55 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 859F414016D for ; Tue, 5 Dec 2023 05:58:55 +0000 (UTC) X-FDA: 81531711030.03.094B2DA Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) by imf29.hostedemail.com (Postfix) with ESMTP id 8ECB812000A for ; Tue, 5 Dec 2023 05:58:52 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=e7BTwwmh; spf=pass (imf29.hostedemail.com: domain of vivek.kasireddy@intel.com designates 198.175.65.12 as permitted sender) smtp.mailfrom=vivek.kasireddy@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1701755933; 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:references:dkim-signature; bh=GyNMBsaLIgLunGBmX7vHKeoebAx3MHMPwQVA33xexDI=; b=EMNNM2VZMAN/UtgcgliWS7O0UtlAjPORtAO3mhrw6Q49PwShkR/3dfGPHATRxX32XZrULx f1baMoFHEDABd8l4jFRcl28T4PxIwyh5c7dc1m+woch5pQVsYl9paIW/tvc7uNL1PHAZtg JxQAsJ4asjZh2IcKogecMtNjDaIyc7A= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1701755933; a=rsa-sha256; cv=none; b=7MgdKkIRFh68M3a8Kwl1+YH9I+lZeE2oOktBckOUMwL1aG9mobx+6XEKqHbifvQnVFgBBa ZyYXEvBsl50XQoDf4jnSgQGUaVDzYTWdHznwCnEN3ySLK2E7SG0NnW9EZD4rwHRN9fhvuC CqoG+R1IU/RtqUIJ2bEdqEg7qCCBtFo= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=e7BTwwmh; spf=pass (imf29.hostedemail.com: domain of vivek.kasireddy@intel.com designates 198.175.65.12 as permitted sender) smtp.mailfrom=vivek.kasireddy@intel.com; dmarc=pass (policy=none) header.from=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701755933; x=1733291933; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=8RyCyh0TzNzqu1yToc8PYYuNJHO34bkJ9Z97qx7ch0o=; b=e7BTwwmhmTEJc7ztvRmXxocE/M2tlzPXGHOoMeA4OLWIZLpUiEqxCfGA arP73uYUl3OXnZzmJT9igzOwRQfOGCuGVhHWG3r7nUaJLKj5EFi1GsMCv TnBZaOD5AoZxO0lxIIUADAakNKqrSgbb1DJHizUB7UBmhWyR3sVWxa1Ew HcE7AUq/fNXA2mosZbQQ0QT1ebdttPrOyzApb/1WvaR1rfsFugbI9sbY6 irnDB565xpd6pb5NEwhCjmehVxWIF2li4nLfd5pIOIN9mmwrzIjo72vO5 +GaUDIhEo4oqYGgsAUNIJyvvHRprrTyfQPMoHCX8nm+EHAevX8fS3f7vz A==; X-IronPort-AV: E=McAfee;i="6600,9927,10914"; a="906296" X-IronPort-AV: E=Sophos;i="6.04,251,1695711600"; d="scan'208";a="906296" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2023 21:58:51 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10914"; a="888807721" X-IronPort-AV: E=Sophos;i="6.04,251,1695711600"; d="scan'208";a="888807721" Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2023 21:58:50 -0800 From: Vivek Kasireddy To: dri-devel@lists.freedesktop.org, linux-mm@kvack.org Cc: Vivek Kasireddy , David Hildenbrand , Christoph Hellwig , Daniel Vetter , Mike Kravetz , Hugh Dickins , Peter Xu , Jason Gunthorpe , Gerd Hoffmann , Dongwon Kim , Junxiao Chang Subject: [PATCH v6 0/5] mm/gup: Introduce memfd_pin_user_pages() for pinning memfd pages (v6) Date: Mon, 4 Dec 2023 21:35:04 -0800 Message-Id: <20231205053509.2342169-1-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Rspamd-Queue-Id: 8ECB812000A X-Rspam-User: X-Stat-Signature: yg667iyhzh1dmm3mrwxteouui8cq1czm X-Rspamd-Server: rspam03 X-HE-Tag: 1701755932-267388 X-HE-Meta: U2FsdGVkX1/QcMmXJK17TC5DoVogqL6kj3PmoSbwe82nl03zaR79GKghBfTJ97A7UKIk0xq2jJtQYRt9AXTsLTxxtYunnnl1ETr2jXMOtjBRBncJwyB1/eMjRV5W/AFqoTvDzQxWG1Q5Q+FrlU2OXe4arD1fOCAlLa0o32UwvHMGjfm23gyssnuoTfJrpoBDRgK0IskNEwAAR/QKgZM6GnNAZB9H6gXKY0SwyGsTRnAt5f3wxWbPhPd+iVkIY5bkuKSwKyD7eqVM6ktrxtbPG4QyAiTHjLjV6h2QtdLIP0/yPtTDWOSZICU8/uO8gaPzFcGx5r+C0qcF+0DTcLrvUIi6C7EML+GiXPirQDDlRiu5oW87UpGJ3HOvp4H0pKYk7wLZ+TJN4CE9XDEZIBJ9/YL+dPbzMNjvjRW2o8nC3Jo5vT3g9a0dohjrttj1ejULuXYo/uD8JetPqfocqLZDetHsaNPP8kgYx9QpqQBjI5hulZk6d92D1nhzXI6TSsAMXh/qnvdm/6m1rlSbgeM0NGBQ2ONZsS0F0gF0oDuybh3lJAHeom7nHRzWqTYYqBNhmT/I/W3O/4kmVuKiW3HRyb21vCA+xZ/OghpL0AcP/DjHRqMLuZZSPwLfbFFwdwQjvcbuZ0vh1I3voNchSUw2e35m1+i2vYBDAl1TIFx31tC+KqRV0YN0BLje1i05XF2XtKfHck25hVCtYt1B7z57G3S/tiaBG2jZTwPgibB+CMxk1wRiqG2wCRkPo3+mtGFIw5L1ct84DgSS4P6mOGCDMshkn84/Obs36w3C/28yZQJ5z4Othdmiw7Fs5OQTyaF2NvZP7/6l4a5TwOenZZOEq7vogSriTj5spOUlOhfE6I00VIFOIWta4Olm3TgwFDD8J/a4rh8VWo3jSIdtOnJIZIlzNdP1uIyevQThvilrmNeb03YfQKaiyIg2hNNUfGLHaBk/jus7X3bqLtnYcvW L4EM0HHp ams6vwJf+wLoKpts7UMW7h1wm+z8Oohv/aIOtnldzDUrODLbp6dyqO+rkxTXLQDAvPErQ/L23fTGpKHwqxxQXJmMm/BwmLat793GyAdrz1wcCfiS126L/HVb+dQD+FNHaH+lTv5rrnkl+kK12jd+IDS/U7JkodSBfn8RVJzRnkeQrQsxEANydUdYQ/+WE/CNmm/vpiynXHX0AYRdR6POPb5e85KJC6mmeUg1NbDjkrOJbv7YI/+2DQDbMCbqijSTrY8mwwMIdLVRiTCv3suHYNcwKatXt26S2a0ZcljNnvJSAJzHF+s66ILW42HqvgGcs5ATJDrUNJmwIeoIjrYm6ECatXhfS7UStVSTegscUDeP3yM0= 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: The first two patches were previously reviewed but not yet merged. These ones need to be merged first as the fourth patch depends on the changes introduced in them and they also fix bugs seen in very specific scenarios (running Qemu with hugetlb=on, blob=true and rebooting guest VM). The third patch introduces memfd_pin_user_pages() API and the fourth patch shows how the udmabuf driver can make use of it to longterm-pin the the pages. The last patch adds two new udmabuf selftests to verify data coherency after potential page migration. v2: - Updated the first patch to include review feedback from David and Jason. The main change in this series is the allocation of page in the case of hugetlbfs if it is not found in the page cache. v3: - Made changes to include review feedback from David to improve the comments and readability of code - Enclosed the hugepage alloc code with #ifdef CONFIG_HUGETLB_PAGE v4: - Augmented the commit message of the udmabuf patch that uses pin_user_pages_fd() - Added previously reviewed but unmerged udmabuf patches to this series v5: - Updated the patch that adds pin_user_pages_fd() to include feedback from David to handle simultaneous users trying to add a huge page to the mapping - Replaced find_get_page_flags() with __filemap_get_folio() in the second and third patches to ensure that we only obtain head pages from the mapping v6: (Christoph) - Renamed the new API to memfd_pin_user_pages() - Improved the page cache lookup efficiency by using filemap_get_folios_contig() which uses batches This series is tested using following methods: - Run the subtests added in the fifth patch - Run Qemu (master) with the following options and a few additional patches to Spice: qemu-system-x86_64 -m 4096m.... -device virtio-gpu-pci,max_outputs=1,blob=true,xres=1920,yres=1080 -spice port=3001,gl=on,disable-ticketing=on,preferred-codec=gstreamer:h264 -object memory-backend-memfd,hugetlb=on,id=mem1,size=4096M -machine memory-backend=mem1 Cc: David Hildenbrand Cc: Christoph Hellwig Cc: Daniel Vetter Cc: Mike Kravetz Cc: Hugh Dickins Cc: Peter Xu Cc: Jason Gunthorpe Cc: Gerd Hoffmann Cc: Dongwon Kim Cc: Junxiao Chang Vivek Kasireddy (5): udmabuf: Use vmf_insert_pfn and VM_PFNMAP for handling mmap udmabuf: Add back support for mapping hugetlb pages (v5) mm/gup: Introduce memfd_pin_user_pages() for pinning memfd pages (v6) udmabuf: Pin the pages using memfd_pin_user_pages() API (v4) selftests/dma-buf/udmabuf: Add tests to verify data after page migration drivers/dma-buf/udmabuf.c | 98 +++++++++--- include/linux/memfd.h | 5 + include/linux/mm.h | 2 + mm/gup.c | 102 ++++++++++++ mm/memfd.c | 34 ++++ .../selftests/drivers/dma-buf/udmabuf.c | 151 +++++++++++++++++- 6 files changed, 363 insertions(+), 29 deletions(-)