Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp141759rdh; Wed, 25 Oct 2023 19:54:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFRadOUU/hVSGNEUK6MlBjMwtDouXHdgT/fzUv0CuLVJ9L+Xn5UjUgytDF4ep7CqiJJfOAP X-Received: by 2002:a0d:d408:0:b0:5a7:dda6:cbaf with SMTP id w8-20020a0dd408000000b005a7dda6cbafmr15645201ywd.19.1698288854853; Wed, 25 Oct 2023 19:54:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698288854; cv=none; d=google.com; s=arc-20160816; b=bNa6AMPWWzHMUpfFanN6egZXyja2GrmRvQuQaFuXIs84Mi2zTMBvWHsALHJXQQ4DNw L2P7701T6YreJenOCRXq1kY6IEHTbj7MgwnlWkipgQLhCow/q0JgBhDG4egiAqo1YxSS BUxSasDcr/qSSzH/g8ut1P3j4HKlKXYyJqtLStEb65u+ucP2bpA7nXJ2lDE8FmfbAzyW mpmhqd1S03ld2X9q4b8GG541WUlyzHThFvzzpUujShMzaPsX7eLBBxW/Ko6vf8mjBBlo JJuT6zeE8dM8MNKwxAUJ8Rlj/7btK42PVvVPobgOgtL1UMAkgAm8IhZwTHCriGtUEGUf Jtcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=AN1CZwxCkpf7wY6P9TwMdNtGgJQl1hJiJYO8OGJG23Q=; fh=6/CvhEMXy459ByfFdUERwF43WFRGrwvwfaBeFRnf1YE=; b=iQvHiJBO68cH7J8WZuFifzTLh6HkkqkJ59Z8UNwsiSWqL9HyhcWawrVpQXKM7OxGjk 6yey+hVBc83o/rHXZJpwWcrMosSuRtMng5JQbTrsoN3rYKP765Aa6KmC2Dx7dRf0iVMl sUCqJ7YB/G/uUCbvFySza8WJY8HnGV52+5NyW8/DsjjzP+RF5GKBBAa5JVMuR5wLMdWj nzgVZJDIq6w2WS0TTr8dZKDoJGJG8DlBeUL1xeCzC0SrT8M0KwxkfkYnU77TrHd/j0fy XmD2Bpvwn+ct8kCz3/vpvCIxSdRUrrcM9+xANgzrDE3JqY1ViCMnIqonHPVdrIHLgrsC qSzA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hkvV6JRE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id l2-20020a81d542000000b0057734b3d4f9si12703231ywj.207.2023.10.25.19.54.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Oct 2023 19:54:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hkvV6JRE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 07013802850F; Wed, 25 Oct 2023 19:54:04 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230100AbjJZCxh (ORCPT + 99 others); Wed, 25 Oct 2023 22:53:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41630 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229554AbjJZCxg (ORCPT ); Wed, 25 Oct 2023 22:53:36 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C219C185; Wed, 25 Oct 2023 19:53:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698288814; x=1729824814; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=jnt3qquZ9palXNYk+43Q9HkECVOlSF4Vhez9GOgrGng=; b=hkvV6JREYsN13pyVq6W2505LYxdZpxQnjDbgzW4T/Mdaz7Qni+Jczgtw FhNAnrRNGnfiHadFZJ9ykLrOOulVm2JpHK0vgx+bd5RRSwowt9Li5iDxP dDHazXwJG+MmFcvb0hFiUCE92yuwTCvStGX6fxTceDa+MjwoWZLIfnmOD 3BbiO8zQ5xboNl3X4Y/Q8XDTFlrLE3sioJek4eAPpkgNMb/oLFj1jR6+N MqfqnlGiENGe+Q/qq5iCizpyYTEATRJgipEXCt/JBwyd+TKhRZN4Eljn/ anYZmjiLKjq36GTwCtY26bsVIqVn76wn0Sz54S/URBdyjbyZOUYRHZPmH g==; X-IronPort-AV: E=McAfee;i="6600,9927,10874"; a="391316138" X-IronPort-AV: E=Sophos;i="6.03,252,1694761200"; d="scan'208";a="391316138" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2023 19:53:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10874"; a="735604476" X-IronPort-AV: E=Sophos;i="6.03,252,1694761200"; d="scan'208";a="735604476" Received: from allen-box.sh.intel.com ([10.239.159.127]) by orsmga006.jf.intel.com with ESMTP; 25 Oct 2023 19:53:30 -0700 From: Lu Baolu To: Jason Gunthorpe , Kevin Tian , Joerg Roedel , Will Deacon , Robin Murphy , Jean-Philippe Brucker , Nicolin Chen , Yi Liu , Jacob Pan Cc: iommu@lists.linux.dev, linux-kselftest@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Lu Baolu Subject: [PATCH v2 0/6] IOMMUFD: Deliver IO page faults to user space Date: Thu, 26 Oct 2023 10:49:24 +0800 Message-Id: <20231026024930.382898-1-baolu.lu@linux.intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 25 Oct 2023 19:54:04 -0700 (PDT) Hi folks, This series implements the functionality of delivering IO page faults to user space through the IOMMUFD framework for nested translation. Nested translation is a hardware feature that supports two-stage translation tables for IOMMU. The second-stage translation table is managed by the host VMM, while the first-stage translation table is owned by user space. This allows user space to control the IOMMU mappings for its devices. When an IO page fault occurs on the first-stage translation table, the IOMMU hardware can deliver the page fault to user space through the IOMMUFD framework. User space can then handle the page fault and respond to the device top-down through the IOMMUFD. This allows user space to implement its own IO page fault handling policies. User space indicates its capability of handling IO page faults by setting the IOMMU_HWPT_ALLOC_IOPF_CAPABLE flag when allocating a hardware page table (HWPT). IOMMUFD will then set up its infrastructure for page fault delivery. On a successful return of HWPT allocation, the user can retrieve and respond to page faults by reading and writing to the file descriptor (FD) returned in out_fault_fd. The iommu selftest framework has been updated to test the IO page fault delivery and response functionality. This series is based on the latest implementation of nested translation under discussion [1] and the page fault handling framework refactoring in the IOMMU core [2]. The series and related patches are available on GitHub: [3] [1] https://lore.kernel.org/linux-iommu/20230921075138.124099-1-yi.l.liu@intel.com/ [2] https://lore.kernel.org/linux-iommu/20230928042734.16134-1-baolu.lu@linux.intel.com/ [3] https://github.com/LuBaolu/intel-iommu/commits/iommufd-io-pgfault-delivery-v2 Best regards, baolu Change log: v2: - Move all iommu refactoring patches into a sparated series and discuss it in a different thread. The latest patch series [v6] is available at https://lore.kernel.org/linux-iommu/20230928042734.16134-1-baolu.lu@linux.intel.com/ - We discussed the timeout of the pending page fault messages. We agreed that we shouldn't apply any timeout policy for the page fault handling in user space. https://lore.kernel.org/linux-iommu/20230616113232.GA84678@myrica/ - Jason suggested that we adopt a simple file descriptor interface for reading and responding to I/O page requests, so that user space applications can improve performance using io_uring. https://lore.kernel.org/linux-iommu/ZJWjD1ajeem6pK3I@ziepe.ca/ v1: https://lore.kernel.org/linux-iommu/20230530053724.232765-1-baolu.lu@linux.intel.com/ Lu Baolu (6): iommu: Add iommu page fault cookie helpers iommufd: Add iommu page fault uapi data iommufd: Initializing and releasing IO page fault data iommufd: Deliver fault messages to user space iommufd/selftest: Add IOMMU_TEST_OP_TRIGGER_IOPF test support iommufd/selftest: Add coverage for IOMMU_TEST_OP_TRIGGER_IOPF include/linux/iommu.h | 9 + drivers/iommu/iommu-priv.h | 15 + drivers/iommu/iommufd/iommufd_private.h | 12 + drivers/iommu/iommufd/iommufd_test.h | 8 + include/uapi/linux/iommufd.h | 65 +++++ tools/testing/selftests/iommu/iommufd_utils.h | 66 ++++- drivers/iommu/io-pgfault.c | 50 ++++ drivers/iommu/iommufd/device.c | 69 ++++- drivers/iommu/iommufd/hw_pagetable.c | 260 +++++++++++++++++- drivers/iommu/iommufd/selftest.c | 56 ++++ tools/testing/selftests/iommu/iommufd.c | 24 +- .../selftests/iommu/iommufd_fail_nth.c | 2 +- 12 files changed, 620 insertions(+), 16 deletions(-) -- 2.34.1