All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/9] IOASID extensions for guest SVA
@ 2020-08-22  4:35 ` Jacob Pan
  0 siblings, 0 replies; 112+ messages in thread
From: Jacob Pan @ 2020-08-22  4:35 UTC (permalink / raw)
  To: iommu, LKML, Jean-Philippe Brucker, Lu Baolu, Joerg Roedel,
	David Woodhouse
  Cc: Yi Liu, Tian, Kevin, Raj Ashok, Eric Auger, Wu Hao

IOASID was introduced in v5.5 as a generic kernel allocator service for
both PCIe Process Address Space ID (PASID) and ARM SMMU's Sub Stream
ID. In addition to basic ID allocation, ioasid_set was defined as a
token that is shared by a group of IOASIDs. This set token can be used
for permission checking, but lack of some features to address the
following needs by guest Shared Virtual Address (SVA).
- Manage IOASIDs by group, group ownership, quota, etc.
- State synchronization among IOASID users
- Non-identity guest-host IOASID mapping
- Lifecycle management across many users

This patchset introduces the following extensions as solutions to the
problems above.
- Redefine and extend IOASID set such that IOASIDs can be managed by groups.
- Add notifications for IOASID state synchronization
- Add reference counting for life cycle alignment among users
- Support ioasid_set private IDs, which can be used as guest IOASIDs
Please refer to Documentation/ioasid.rst in enclosed patch 1/9 for more
details.

This patchset only included VT-d driver as users of some of the new APIs.
VFIO and KVM patches are coming up to fully utilize the APIs introduced
here.

You can find this series at:
https://github.com/jacobpan/linux.git ioasid_ext_v2
(VFIO and KVM patches will be available at this branch when published.)

This work is a result of collaboration with many people:
Liu, Yi L <yi.l.liu@intel.com>
Wu Hao <hao.wu@intel.com>
Ashok Raj <ashok.raj@intel.com>
Kevin Tian <kevin.tian@intel.com>

Thanks,

Jacob

Changelog

V2:
- Redesigned ioasid_set APIs, removed set ID
- Added set private ID (SPID) for guest PASID usage.
- Add per ioasid_set notification and priority support.
- Back to use spinlocks and atomic notifications.
- Added async work in VT-d driver to perform teardown outside atomic context

Jacob Pan (9):
  docs: Document IO Address Space ID (IOASID) APIs
  iommu/ioasid: Rename ioasid_set_data()
  iommu/ioasid: Introduce ioasid_set APIs
  iommu/ioasid: Add reference couting functions
  iommu/ioasid: Introduce ioasid_set private ID
  iommu/ioasid: Introduce notification APIs
  iommu/vt-d: Listen to IOASID notifications
  iommu/vt-d: Send IOASID bind/unbind notifications
  iommu/vt-d: Store guest PASID during bind

 Documentation/ioasid.rst    | 618 ++++++++++++++++++++++++++++++++
 drivers/iommu/intel/iommu.c |  27 +-
 drivers/iommu/intel/pasid.h |   1 +
 drivers/iommu/intel/svm.c   |  97 ++++-
 drivers/iommu/ioasid.c      | 835 ++++++++++++++++++++++++++++++++++++++++++--
 include/linux/intel-iommu.h |   2 +
 include/linux/ioasid.h      | 166 ++++++++-
 7 files changed, 1699 insertions(+), 47 deletions(-)
 create mode 100644 Documentation/ioasid.rst

-- 
2.7.4


^ permalink raw reply	[flat|nested] 112+ messages in thread
* Re: [PATCH v2 3/9] iommu/ioasid: Introduce ioasid_set APIs
@ 2020-08-22 13:37 kernel test robot
  0 siblings, 0 replies; 112+ messages in thread
From: kernel test robot @ 2020-08-22 13:37 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 7724 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <1598070918-21321-4-git-send-email-jacob.jun.pan@linux.intel.com>
References: <1598070918-21321-4-git-send-email-jacob.jun.pan@linux.intel.com>
TO: Jacob Pan <jacob.pan.linux@gmail.com>
TO: iommu(a)lists.linux-foundation.org
TO: LKML <linux-kernel@vger.kernel.org>
TO: "Jean-Philippe Brucker" <jean-philippe@linaro.com>
TO: Lu Baolu <baolu.lu@linux.intel.com>
TO: Joerg Roedel <joro@8bytes.org>
TO: David Woodhouse <dwmw2@infradead.org>
CC: Yi Liu <yi.l.liu@intel.com>
CC: "Tian, Kevin" <kevin.tian@intel.com>
CC: Raj Ashok <ashok.raj@intel.com>
CC: Eric Auger <eric.auger@redhat.com>

Hi Jacob,

I love your patch! Perhaps something to improve:

[auto build test WARNING on iommu/next]
[also build test WARNING on linux/master linus/master v5.9-rc1 next-20200821]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Jacob-Pan/IOASID-extensions-for-guest-SVA/20200822-123111
base:   https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git next
:::::: branch date: 9 hours ago
:::::: commit date: 9 hours ago
config: x86_64-randconfig-m001-20200820 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/iommu/intel/iommu.c:3302 init_dmars() warn: passing zero to 'PTR_ERR'

Old smatch warnings:
drivers/iommu/intel/iommu.c:840 device_to_iommu() error: we previously assumed 'pdev' could be null (see line 813)
drivers/iommu/intel/iommu.c:1269 iommu_flush_write_buffer() warn: this loop depends on readl() succeeding
drivers/iommu/intel/iommu.c:1269 iommu_flush_write_buffer() warn: this loop depends on readl() succeeding
drivers/iommu/intel/iommu.c:1614 iommu_disable_protect_mem_regions() warn: this loop depends on readl() succeeding
drivers/iommu/intel/iommu.c:1614 iommu_disable_protect_mem_regions() warn: this loop depends on readl() succeeding
drivers/iommu/intel/iommu.c:1650 iommu_disable_translation() warn: this loop depends on readl() succeeding
drivers/iommu/intel/iommu.c:1650 iommu_disable_translation() warn: this loop depends on readl() succeeding
drivers/iommu/intel/iommu.c:2276 __domain_mapping() error: we previously assumed 'sg' could be null (see line 2267)
drivers/iommu/intel/iommu.c:4388 intel_iommu_add() warn: should '(1 << sp)' be a 64 bit type?

# https://github.com/0day-ci/linux/commit/59b6f319b27588b2a8a0268a4f4f09f7be458861
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Jacob-Pan/IOASID-extensions-for-guest-SVA/20200822-123111
git checkout 59b6f319b27588b2a8a0268a4f4f09f7be458861
vim +/PTR_ERR +3302 drivers/iommu/intel/iommu.c

e0fc7e0b4b5e69 drivers/pci/intel-iommu.c   David Woodhouse       2009-09-30  3285  
5daab58043ee2b drivers/iommu/intel-iommu.c Lu Baolu              2019-05-02  3286  	if (!dmar_map_gfx)
5daab58043ee2b drivers/iommu/intel-iommu.c Lu Baolu              2019-05-02  3287  		iommu_identity_mapping |= IDENTMAP_GFX;
5daab58043ee2b drivers/iommu/intel-iommu.c Lu Baolu              2019-05-02  3288  
21e722c4c8377b drivers/iommu/intel-iommu.c Ashok Raj             2017-01-30  3289  	check_tylersburg_isoch();
21e722c4c8377b drivers/iommu/intel-iommu.c Ashok Raj             2017-01-30  3290  
86080ccc223aab drivers/iommu/intel-iommu.c Joerg Roedel          2015-06-12  3291  	ret = si_domain_init(hw_pass_through);
86080ccc223aab drivers/iommu/intel-iommu.c Joerg Roedel          2015-06-12  3292  	if (ret)
86080ccc223aab drivers/iommu/intel-iommu.c Joerg Roedel          2015-06-12  3293  		goto free_iommu;
86080ccc223aab drivers/iommu/intel-iommu.c Joerg Roedel          2015-06-12  3294  
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3295  	/* PASID is needed for scalable mode irrespective to SVM */
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3296  	if (intel_iommu_sm) {
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3297  		ioasid_install_capacity(intel_pasid_max_id);
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3298  		/* We should not run out of IOASIDs@boot */
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3299  		host_pasid_set = ioasid_alloc_set(NULL, PID_MAX_DEFAULT,
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3300  						IOASID_SET_TYPE_NULL);
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3301  		if (IS_ERR_OR_NULL(host_pasid_set)) {
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21 @3302  			pr_err("Failed to enable host PASID allocator %lu\n",
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3303  				PTR_ERR(host_pasid_set));
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3304  			intel_iommu_sm = 0;
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3305  		}
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3306  	}
59b6f319b27588 drivers/iommu/intel/iommu.c Jacob Pan             2020-08-21  3307  
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3308  	/*
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3309  	 * for each drhd
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3310  	 *   enable fault log
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3311  	 *   global invalidate context cache
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3312  	 *   global invalidate iotlb
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3313  	 *   enable translation
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3314  	 */
7c9197791a0cbb drivers/iommu/intel-iommu.c Jiang Liu             2014-01-06  3315  	for_each_iommu(iommu, drhd) {
51a63e67da6056 drivers/pci/intel-iommu.c   Joseph Cihula         2011-03-21  3316  		if (drhd->ignored) {
51a63e67da6056 drivers/pci/intel-iommu.c   Joseph Cihula         2011-03-21  3317  			/*
51a63e67da6056 drivers/pci/intel-iommu.c   Joseph Cihula         2011-03-21  3318  			 * we always have to disable PMRs or DMA may fail on
51a63e67da6056 drivers/pci/intel-iommu.c   Joseph Cihula         2011-03-21  3319  			 * this device
51a63e67da6056 drivers/pci/intel-iommu.c   Joseph Cihula         2011-03-21  3320  			 */
51a63e67da6056 drivers/pci/intel-iommu.c   Joseph Cihula         2011-03-21  3321  			if (force_on)
7c9197791a0cbb drivers/iommu/intel-iommu.c Jiang Liu             2014-01-06  3322  				iommu_disable_protect_mem_regions(iommu);
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3323  			continue;
51a63e67da6056 drivers/pci/intel-iommu.c   Joseph Cihula         2011-03-21  3324  		}
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3325  
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3326  		iommu_flush_write_buffer(iommu);
ba39592764ed20 drivers/pci/intel-iommu.c   Keshavamurthy, Anil S 2007-10-21  3327  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36016 bytes --]

^ permalink raw reply	[flat|nested] 112+ messages in thread

end of thread, other threads:[~2020-09-24 18:29 UTC | newest]

Thread overview: 112+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-22  4:35 [PATCH v2 0/9] IOASID extensions for guest SVA Jacob Pan
2020-08-22  4:35 ` Jacob Pan
2020-08-22  4:35 ` [PATCH v2 1/9] docs: Document IO Address Space ID (IOASID) APIs Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-08-23  7:05   ` Lu Baolu
2020-08-23  7:05     ` Lu Baolu
2020-08-28 17:01     ` Jacob Pan
2020-08-28 17:01       ` Jacob Pan
2020-08-24 10:32   ` Jean-Philippe Brucker
2020-08-24 10:32     ` Jean-Philippe Brucker
2020-08-27 16:21     ` Auger Eric
2020-08-27 16:21       ` Auger Eric
2020-09-01 16:56       ` Jacob Pan
2020-09-01 16:56         ` Jacob Pan
2020-09-07  8:03         ` Auger Eric
2020-09-07  8:03           ` Auger Eric
2020-09-08 17:29           ` Jacob Pan
2020-08-28 22:24     ` Jacob Pan
2020-08-28 22:24       ` Jacob Pan
2020-08-22  4:35 ` [PATCH v2 2/9] iommu/ioasid: Rename ioasid_set_data() Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-08-24 18:29   ` Jean-Philippe Brucker
2020-08-24 18:29     ` Jean-Philippe Brucker
2020-09-01 11:51   ` Auger Eric
2020-09-01 11:51     ` Auger Eric
2020-08-22  4:35 ` [PATCH v2 3/9] iommu/ioasid: Introduce ioasid_set APIs Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-08-22 12:53   ` kernel test robot
2020-08-22 12:53     ` kernel test robot
2020-08-22 12:53     ` kernel test robot
2020-08-24  2:24   ` Lu Baolu
2020-08-24  2:24     ` Lu Baolu
2020-09-01 21:28     ` Jacob Pan
2020-09-01 21:28       ` Jacob Pan
2020-09-02  2:39       ` Lu Baolu
2020-09-02  2:39         ` Lu Baolu
2020-08-24 18:28   ` Jean-Philippe Brucker
2020-08-24 18:28     ` Jean-Philippe Brucker
2020-08-24 18:30     ` Randy Dunlap
2020-08-24 18:30       ` Randy Dunlap
2020-09-02 21:46       ` Jacob Pan
2020-09-02 21:46         ` Jacob Pan
2020-08-24 18:34     ` Randy Dunlap
2020-08-24 18:34       ` Randy Dunlap
2020-09-02 21:47       ` Jacob Pan
2020-09-02 21:47         ` Jacob Pan
2020-09-02 21:44     ` Jacob Pan
2020-09-02 21:44       ` Jacob Pan
2020-09-01 11:51   ` Auger Eric
2020-09-01 11:51     ` Auger Eric
2020-09-03 21:07     ` Jacob Pan
2020-09-03 21:07       ` Jacob Pan
2020-09-07  8:04       ` Auger Eric
2020-09-07  8:04         ` Auger Eric
2020-08-22  4:35 ` [PATCH v2 4/9] iommu/ioasid: Add reference couting functions Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-08-24  2:26   ` Lu Baolu
2020-08-24  2:26     ` Lu Baolu
2020-08-25 10:20     ` Jean-Philippe Brucker
2020-08-25 10:20       ` Jean-Philippe Brucker
2020-08-25 10:19   ` Jean-Philippe Brucker
2020-08-25 10:19     ` Jean-Philippe Brucker
2020-09-08 20:30     ` Jacob Pan
2020-09-01 12:13   ` Auger Eric
2020-09-01 12:13     ` Auger Eric
2020-09-08 20:49     ` Jacob Pan
2020-09-24 18:29   ` Shameerali Kolothum Thodi
2020-09-24 18:29     ` Shameerali Kolothum Thodi
2020-08-22  4:35 ` [PATCH v2 5/9] iommu/ioasid: Introduce ioasid_set private ID Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-08-22  8:36   ` kernel test robot
2020-08-22  8:36     ` kernel test robot
2020-08-22  8:36     ` kernel test robot
2020-08-22  9:03   ` kernel test robot
2020-08-22  9:03     ` kernel test robot
2020-08-22  9:03     ` kernel test robot
2020-08-25 10:22   ` Jean-Philippe Brucker
2020-08-25 10:22     ` Jean-Philippe Brucker
2020-09-08 22:19     ` Jacob Pan
2020-09-08 22:19       ` Jacob Pan
2020-09-01 15:38   ` Auger Eric
2020-09-01 15:38     ` Auger Eric
2020-09-08 22:40     ` Jacob Pan
2020-09-08 22:40       ` Jacob Pan
2020-09-10  9:18       ` Auger Eric
2020-09-10  9:18         ` Auger Eric
2020-08-22  4:35 ` [PATCH v2 6/9] iommu/ioasid: Introduce notification APIs Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-08-25 10:26   ` Jean-Philippe Brucker
2020-08-25 10:26     ` Jean-Philippe Brucker
2020-09-09 20:37     ` Jacob Pan
2020-09-09 20:37       ` Jacob Pan
2020-09-01 16:49   ` Auger Eric
2020-09-01 16:49     ` Auger Eric
2020-09-09 22:58     ` Jacob Pan
2020-09-09 22:58       ` Jacob Pan
2020-09-10  8:59       ` Auger Eric
2020-09-10  8:59         ` Auger Eric
2020-08-22  4:35 ` [PATCH v2 7/9] iommu/vt-d: Listen to IOASID notifications Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-09-01 17:03   ` Auger Eric
2020-09-01 17:03     ` Auger Eric
2020-09-10  4:54     ` Jacob Pan
2020-08-22  4:35 ` [PATCH v2 8/9] iommu/vt-d: Send IOASID bind/unbind notifications Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-08-22  4:35 ` [PATCH v2 9/9] iommu/vt-d: Store guest PASID during bind Jacob Pan
2020-08-22  4:35   ` Jacob Pan
2020-09-01 17:08   ` Auger Eric
2020-09-01 17:08     ` Auger Eric
2020-09-10 17:12     ` Jacob Pan
2020-09-10 17:12       ` Jacob Pan
2020-08-22 13:37 [PATCH v2 3/9] iommu/ioasid: Introduce ioasid_set APIs kernel test robot

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.