From: Jacob Pan <jacob.jun.pan@linux.intel.com> To: iommu@lists.linux-foundation.org, LKML <linux-kernel@vger.kernel.org>, Joerg Roedel <joro@8bytes.org>, David Woodhouse <dwmw2@infradead.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Alex Williamson <alex.williamson@redhat.com>, Jean-Philippe Brucker <jean-philippe.brucker@arm.com> Cc: Rafael Wysocki <rafael.j.wysocki@intel.com>, "Liu, Yi L" <yi.l.liu@intel.com>, "Tian, Kevin" <kevin.tian@intel.com>, Raj Ashok <ashok.raj@intel.com>, Jean Delvare <khali@linux-fr.org>, "Christoph Hellwig" <hch@infradead.org>, "Lu Baolu" <baolu.lu@linux.intel.com>, Jacob Pan <jacob.jun.pan@linux.intel.com> Subject: [PATCH v5 00/23] IOMMU and VT-d driver support for Shared Virtual Address (SVA) Date: Fri, 11 May 2018 13:53:52 -0700 [thread overview] Message-ID: <1526072055-86990-1-git-send-email-jacob.jun.pan@linux.intel.com> (raw) Shared virtual address (SVA), a.k.a, Shared virtual memory (SVM) on Intel platforms allow address space sharing between device DMA and applications. SVA can reduce programming complexity and enhance security. To enable SVA in the guest, i.e. shared guest application address space and physical device DMA address, IOMMU driver must provide some new functionalities. This patchset is a follow-up on the discussions held at LPC 2017 VFIO/IOMMU/PCI track. Slides and notes can be found here: https://linuxplumbersconf.org/2017/ocw/events/LPC2017/tracks/636 The complete guest SVA support also involves changes in QEMU and VFIO, which has been posted earlier. https://www.spinics.net/lists/kvm/msg148798.html This is the IOMMU portion follow up of the more complete series of the kernel changes to support vSVA. Please refer to the link below for more details. https://www.spinics.net/lists/kvm/msg148819.html Generic APIs are introduced in addition to Intel VT-d specific changes, the goal is to have common interfaces across IOMMU and device types for both VFIO and other in-kernel users. At the top level, new IOMMU interfaces are introduced as follows: - bind guest PASID table - passdown invalidations of translation caches - IOMMU device fault reporting including page request/response and non-recoverable faults. For IOMMU detected device fault reporting, struct device is extended to provide callback and tracking at device level. The original proposal was discussed here "Error handling for I/O memory management units" (https://lwn.net/Articles/608914/). I have experimented two alternative solutions: 1. use a shared group notifier, this does not scale well also causes unwanted notification traffic when group sibling device is reported with faults. 2. place fault callback at device IOMMU arch data, e.g. device_domain_info in Intel/FSL IOMMU driver. This will cause code duplication, since per device fault reporting is generic. The additional patches are Intel VT-d specific, which either implements or replaces existing private interfaces with the generic ones. This patchset is based on the work and ideas from many people, especially: Ashok Raj <ashok.raj@intel.com> Liu, Yi L <yi.l.liu@linux.intel.com> Jean-Philippe Brucker <jean-philippe.brucker@arm.com> Thanks, Jacob V5 - Removed device context cache and non-pasid TLB invalidation type - Simplified and sorted granularities for the remaining TLB invalidation types, per discussion and review by Jean-Philippe Brucker. - Added a setup parameter for page response timeout - Added version and size checking in bind PASID and invalidation APIs - Fixed locking and error handling in device fault reporting API based on Jean's review V4 - Futher integrate feedback for iommu_param and iommu_fault_param from Jean and others. - Handle fault reporting error and race conditions. Keep tracking per device pending page requests such that page group response can be sanitized. - Added a timer to handle irresponsive guest who does not send page response on time. - Use a workqueue for VT-d non-recorverable IRQ fault handling. - Added trace events for invalidation and fault reporting. V3 - Consolidated fault reporting data format based on discussions on v2, including input from ARM and AMD. - Renamed invalidation APIs from svm to sva based on discussions on v2 - Use a parent pointer under struct device for all iommu per device data - Simplified device fault callback, allow driver private data to be registered. This might make it easy to replace domain fault handler. V2 - Replaced hybrid interface data model (generic data + vendor specific data) with all generic data. This will have the security benefit where data passed from user space can be sanitized by all software layers if needed. - Addressed review comments from V1 - Use per device fault report data - Support page request/response communications between host IOMMU and guest or other in-kernel users. - Added unrecoverable fault reporting to DMAR - Use threaded IRQ function for DMAR fault interrupt and fault reporting Jacob Pan (22): iommu: introduce bind_pasid_table API function iommu/vt-d: move device_domain_info to header iommu/vt-d: add a flag for pasid table bound status iommu/vt-d: add bind_pasid_table function iommu/vt-d: add definitions for PFSID iommu/vt-d: fix dev iotlb pfsid use iommu/vt-d: support flushing more translation cache types iommu/vt-d: add svm/sva invalidate function iommu: introduce device fault data driver core: add per device iommu param iommu: add a timeout parameter for prq response iommu: introduce device fault report API iommu: introduce page response function iommu: handle page response timeout iommu/config: add build dependency for dmar iommu/vt-d: report non-recoverable faults to device iommu/intel-svm: report device page request iommu/intel-svm: replace dev ops with fault report API iommu/intel-svm: do not flush iotlb for viommu iommu/vt-d: add intel iommu page response function trace/iommu: add sva trace events iommu: use sva invalidate and device fault trace event Liu, Yi L (1): iommu: introduce iommu invalidate API function Documentation/admin-guide/kernel-parameters.txt | 8 + drivers/iommu/Kconfig | 1 + drivers/iommu/dmar.c | 209 ++++++++++++++- drivers/iommu/intel-iommu.c | 338 ++++++++++++++++++++++-- drivers/iommu/intel-svm.c | 84 ++++-- drivers/iommu/iommu.c | 311 +++++++++++++++++++++- include/linux/device.h | 3 + include/linux/dma_remapping.h | 1 + include/linux/dmar.h | 2 +- include/linux/intel-iommu.h | 52 +++- include/linux/intel-svm.h | 20 +- include/linux/iommu.h | 216 ++++++++++++++- include/trace/events/iommu.h | 112 ++++++++ include/uapi/linux/iommu.h | 124 +++++++++ 14 files changed, 1409 insertions(+), 72 deletions(-) create mode 100644 include/uapi/linux/iommu.h -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Jacob Pan <jacob.jun.pan-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>, David Woodhouse <dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, Greg Kroah-Hartman <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>, Alex Williamson <alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, Jean-Philippe Brucker <jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org> Cc: Raj Ashok <ashok.raj-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>, Rafael Wysocki <rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>, Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org> Subject: [PATCH v5 00/23] IOMMU and VT-d driver support for Shared Virtual Address (SVA) Date: Fri, 11 May 2018 13:53:52 -0700 [thread overview] Message-ID: <1526072055-86990-1-git-send-email-jacob.jun.pan@linux.intel.com> (raw) Shared virtual address (SVA), a.k.a, Shared virtual memory (SVM) on Intel platforms allow address space sharing between device DMA and applications. SVA can reduce programming complexity and enhance security. To enable SVA in the guest, i.e. shared guest application address space and physical device DMA address, IOMMU driver must provide some new functionalities. This patchset is a follow-up on the discussions held at LPC 2017 VFIO/IOMMU/PCI track. Slides and notes can be found here: https://linuxplumbersconf.org/2017/ocw/events/LPC2017/tracks/636 The complete guest SVA support also involves changes in QEMU and VFIO, which has been posted earlier. https://www.spinics.net/lists/kvm/msg148798.html This is the IOMMU portion follow up of the more complete series of the kernel changes to support vSVA. Please refer to the link below for more details. https://www.spinics.net/lists/kvm/msg148819.html Generic APIs are introduced in addition to Intel VT-d specific changes, the goal is to have common interfaces across IOMMU and device types for both VFIO and other in-kernel users. At the top level, new IOMMU interfaces are introduced as follows: - bind guest PASID table - passdown invalidations of translation caches - IOMMU device fault reporting including page request/response and non-recoverable faults. For IOMMU detected device fault reporting, struct device is extended to provide callback and tracking at device level. The original proposal was discussed here "Error handling for I/O memory management units" (https://lwn.net/Articles/608914/). I have experimented two alternative solutions: 1. use a shared group notifier, this does not scale well also causes unwanted notification traffic when group sibling device is reported with faults. 2. place fault callback at device IOMMU arch data, e.g. device_domain_info in Intel/FSL IOMMU driver. This will cause code duplication, since per device fault reporting is generic. The additional patches are Intel VT-d specific, which either implements or replaces existing private interfaces with the generic ones. This patchset is based on the work and ideas from many people, especially: Ashok Raj <ashok.raj-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> Liu, Yi L <yi.l.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org> Jean-Philippe Brucker <jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org> Thanks, Jacob V5 - Removed device context cache and non-pasid TLB invalidation type - Simplified and sorted granularities for the remaining TLB invalidation types, per discussion and review by Jean-Philippe Brucker. - Added a setup parameter for page response timeout - Added version and size checking in bind PASID and invalidation APIs - Fixed locking and error handling in device fault reporting API based on Jean's review V4 - Futher integrate feedback for iommu_param and iommu_fault_param from Jean and others. - Handle fault reporting error and race conditions. Keep tracking per device pending page requests such that page group response can be sanitized. - Added a timer to handle irresponsive guest who does not send page response on time. - Use a workqueue for VT-d non-recorverable IRQ fault handling. - Added trace events for invalidation and fault reporting. V3 - Consolidated fault reporting data format based on discussions on v2, including input from ARM and AMD. - Renamed invalidation APIs from svm to sva based on discussions on v2 - Use a parent pointer under struct device for all iommu per device data - Simplified device fault callback, allow driver private data to be registered. This might make it easy to replace domain fault handler. V2 - Replaced hybrid interface data model (generic data + vendor specific data) with all generic data. This will have the security benefit where data passed from user space can be sanitized by all software layers if needed. - Addressed review comments from V1 - Use per device fault report data - Support page request/response communications between host IOMMU and guest or other in-kernel users. - Added unrecoverable fault reporting to DMAR - Use threaded IRQ function for DMAR fault interrupt and fault reporting Jacob Pan (22): iommu: introduce bind_pasid_table API function iommu/vt-d: move device_domain_info to header iommu/vt-d: add a flag for pasid table bound status iommu/vt-d: add bind_pasid_table function iommu/vt-d: add definitions for PFSID iommu/vt-d: fix dev iotlb pfsid use iommu/vt-d: support flushing more translation cache types iommu/vt-d: add svm/sva invalidate function iommu: introduce device fault data driver core: add per device iommu param iommu: add a timeout parameter for prq response iommu: introduce device fault report API iommu: introduce page response function iommu: handle page response timeout iommu/config: add build dependency for dmar iommu/vt-d: report non-recoverable faults to device iommu/intel-svm: report device page request iommu/intel-svm: replace dev ops with fault report API iommu/intel-svm: do not flush iotlb for viommu iommu/vt-d: add intel iommu page response function trace/iommu: add sva trace events iommu: use sva invalidate and device fault trace event Liu, Yi L (1): iommu: introduce iommu invalidate API function Documentation/admin-guide/kernel-parameters.txt | 8 + drivers/iommu/Kconfig | 1 + drivers/iommu/dmar.c | 209 ++++++++++++++- drivers/iommu/intel-iommu.c | 338 ++++++++++++++++++++++-- drivers/iommu/intel-svm.c | 84 ++++-- drivers/iommu/iommu.c | 311 +++++++++++++++++++++- include/linux/device.h | 3 + include/linux/dma_remapping.h | 1 + include/linux/dmar.h | 2 +- include/linux/intel-iommu.h | 52 +++- include/linux/intel-svm.h | 20 +- include/linux/iommu.h | 216 ++++++++++++++- include/trace/events/iommu.h | 112 ++++++++ include/uapi/linux/iommu.h | 124 +++++++++ 14 files changed, 1409 insertions(+), 72 deletions(-) create mode 100644 include/uapi/linux/iommu.h -- 2.7.4
next reply other threads:[~2018-05-11 20:53 UTC|newest] Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-11 20:53 Jacob Pan [this message] 2018-05-11 20:53 ` [PATCH v5 00/23] IOMMU and VT-d driver support for Shared Virtual Address (SVA) Jacob Pan 2018-05-11 20:53 ` [PATCH v5 01/23] iommu: introduce bind_pasid_table API function Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-08-23 16:34 ` Auger Eric 2018-08-24 12:47 ` Liu, Yi L 2018-08-24 12:47 ` Liu, Yi L 2018-08-24 13:20 ` Auger Eric 2018-08-28 17:04 ` Jacob Pan 2018-08-24 15:00 ` Auger Eric 2018-08-28 5:14 ` Jacob Pan 2018-08-28 8:34 ` Auger Eric 2018-08-28 8:34 ` Auger Eric 2018-08-28 16:36 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 02/23] iommu/vt-d: move device_domain_info to header Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 03/23] iommu/vt-d: add a flag for pasid table bound status Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-13 7:33 ` Lu Baolu 2018-05-13 7:33 ` Lu Baolu 2018-05-14 18:51 ` Jacob Pan 2018-05-14 18:51 ` Jacob Pan 2018-05-13 8:01 ` Lu Baolu 2018-05-13 8:01 ` Lu Baolu 2018-05-14 18:52 ` Jacob Pan 2018-05-14 18:52 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 04/23] iommu/vt-d: add bind_pasid_table function Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-13 9:29 ` Lu Baolu 2018-05-13 9:29 ` Lu Baolu 2018-05-14 20:22 ` Jacob Pan 2018-05-14 20:22 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 05/23] iommu: introduce iommu invalidate API function Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 06/23] iommu/vt-d: add definitions for PFSID Jacob Pan 2018-05-11 20:53 ` Jacob Pan 2018-05-14 1:36 ` Lu Baolu 2018-05-14 1:36 ` Lu Baolu 2018-05-14 20:30 ` Jacob Pan 2018-05-14 20:30 ` Jacob Pan 2018-05-11 20:53 ` [PATCH v5 07/23] iommu/vt-d: fix dev iotlb pfsid use Jacob Pan 2018-05-14 1:52 ` Lu Baolu 2018-05-14 1:52 ` Lu Baolu 2018-05-14 20:38 ` Jacob Pan 2018-05-14 20:38 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 08/23] iommu/vt-d: support flushing more translation cache types Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 2:18 ` Lu Baolu 2018-05-14 2:18 ` Lu Baolu 2018-05-14 20:46 ` Jacob Pan 2018-05-14 20:46 ` Jacob Pan 2018-05-17 8:44 ` kbuild test robot 2018-05-17 8:44 ` kbuild test robot 2018-05-11 20:54 ` [PATCH v5 09/23] iommu/vt-d: add svm/sva invalidate function Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 3:35 ` Lu Baolu 2018-05-14 3:35 ` Lu Baolu 2018-05-14 20:49 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 10/23] iommu: introduce device fault data Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-09-21 10:07 ` Auger Eric 2018-09-21 17:05 ` Jacob Pan 2018-09-26 10:20 ` Auger Eric 2018-05-11 20:54 ` [PATCH v5 11/23] driver core: add per device iommu param Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 5:27 ` Lu Baolu 2018-05-14 5:27 ` Lu Baolu 2018-05-14 20:52 ` Jacob Pan 2018-05-14 20:52 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 12/23] iommu: add a timeout parameter for prq response Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 13/23] iommu: introduce device fault report API Jacob Pan 2018-05-14 6:01 ` Lu Baolu 2018-05-14 6:01 ` Lu Baolu 2018-05-14 20:55 ` Jacob Pan 2018-05-14 20:55 ` Jacob Pan 2018-05-15 6:52 ` Lu Baolu 2018-05-15 6:52 ` Lu Baolu 2018-05-17 11:41 ` Liu, Yi L 2018-05-17 11:41 ` Liu, Yi L 2018-05-17 15:59 ` Jacob Pan 2018-05-17 15:59 ` Jacob Pan 2018-05-17 23:22 ` Liu, Yi L 2018-05-21 23:03 ` Jacob Pan 2018-09-06 9:25 ` Auger Eric 2018-09-06 12:42 ` Jean-Philippe Brucker 2018-09-06 13:14 ` Auger Eric 2018-09-06 17:06 ` Jean-Philippe Brucker 2018-09-06 17:06 ` Jean-Philippe Brucker 2018-09-07 7:11 ` Auger Eric 2018-09-07 11:23 ` Jean-Philippe Brucker 2018-09-07 11:23 ` Jean-Philippe Brucker 2018-09-14 13:24 ` Auger Eric 2018-09-17 16:57 ` Jacob Pan 2018-09-25 14:58 ` Jean-Philippe Brucker 2018-09-25 14:58 ` Jean-Philippe Brucker 2018-09-25 22:17 ` Jacob Pan 2018-09-26 10:14 ` Jean-Philippe Brucker 2018-05-11 20:54 ` [PATCH v5 14/23] iommu: introduce page response function Jacob Pan 2018-05-14 6:39 ` Lu Baolu 2018-05-14 6:39 ` Lu Baolu 2018-05-29 16:13 ` Jacob Pan 2018-05-29 16:13 ` Jacob Pan 2018-09-10 14:52 ` Auger Eric 2018-09-10 17:50 ` Jacob Pan 2018-09-10 19:06 ` Auger Eric 2018-09-10 19:06 ` Auger Eric 2018-05-11 20:54 ` [PATCH v5 15/23] iommu: handle page response timeout Jacob Pan 2018-05-14 7:43 ` Lu Baolu 2018-05-14 7:43 ` Lu Baolu 2018-05-29 16:20 ` Jacob Pan 2018-05-30 7:46 ` Lu Baolu 2018-05-11 20:54 ` [PATCH v5 16/23] iommu/config: add build dependency for dmar Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 17/23] iommu/vt-d: report non-recoverable faults to device Jacob Pan 2018-05-11 20:54 ` Jacob Pan 2018-05-14 8:17 ` Lu Baolu 2018-05-14 8:17 ` Lu Baolu 2018-05-29 17:33 ` Jacob Pan 2018-05-29 17:33 ` Jacob Pan 2018-05-11 20:54 ` [PATCH v5 18/23] iommu/intel-svm: report device page request Jacob Pan 2018-05-11 20:54 ` [PATCH v5 19/23] iommu/intel-svm: replace dev ops with fault report API Jacob Pan 2018-05-11 20:54 ` [PATCH v5 20/23] iommu/intel-svm: do not flush iotlb for viommu Jacob Pan 2018-05-11 20:54 ` [PATCH v5 21/23] iommu/vt-d: add intel iommu page response function Jacob Pan 2018-05-11 20:54 ` [PATCH v5 22/23] trace/iommu: add sva trace events Jacob Pan 2018-05-11 20:54 ` [PATCH v5 23/23] iommu: use sva invalidate and device fault trace event Jacob Pan 2018-05-29 15:54 ` [PATCH v5 00/23] IOMMU and VT-d driver support for Shared Virtual Address (SVA) Jacob Pan 2018-05-29 15:54 ` Jacob Pan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1526072055-86990-1-git-send-email-jacob.jun.pan@linux.intel.com \ --to=jacob.jun.pan@linux.intel.com \ --cc=alex.williamson@redhat.com \ --cc=ashok.raj@intel.com \ --cc=baolu.lu@linux.intel.com \ --cc=dwmw2@infradead.org \ --cc=gregkh@linuxfoundation.org \ --cc=hch@infradead.org \ --cc=iommu@lists.linux-foundation.org \ --cc=jean-philippe.brucker@arm.com \ --cc=joro@8bytes.org \ --cc=kevin.tian@intel.com \ --cc=khali@linux-fr.org \ --cc=linux-kernel@vger.kernel.org \ --cc=rafael.j.wysocki@intel.com \ --cc=yi.l.liu@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.