]> git.baikalelectronics.ru Git - kernel.git/commit
iommu/ioasid: Add custom allocators
authorJacob Pan <jacob.jun.pan@linux.intel.com>
Wed, 2 Oct 2019 19:42:42 +0000 (12:42 -0700)
committerJoerg Roedel <jroedel@suse.de>
Tue, 15 Oct 2019 11:34:25 +0000 (13:34 +0200)
commit41ff8c3d1636bc1f2e3e73c2b6400c60ced4d1eb
treec0f51148699d7ecbc1ca652ca6281debe7980eae
parent9900f92bee070d2bea834395fd766daaba976dc7
iommu/ioasid: Add custom allocators

IOASID allocation may rely on platform specific methods. One use case is
that when running in the guest, in order to obtain system wide global
IOASIDs, emulated allocation interface is needed to communicate with the
host. Here we call these platform specific allocators custom allocators.

Custom IOASID allocators can be registered at runtime and take precedence
over the default XArray allocator. They have these attributes:

- provides platform specific alloc()/free() functions with private data.
- allocation results lookup are not provided by the allocator, lookup
  request must be done by the IOASID framework by its own XArray.
- allocators can be unregistered at runtime, either fallback to the next
  custom allocator or to the default allocator.
- custom allocators can share the same set of alloc()/free() helpers, in
  this case they also share the same IOASID space, thus the same XArray.
- switching between allocators requires all outstanding IOASIDs to be
  freed unless the two allocators share the same alloc()/free() helpers.

Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.com>
Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
Link: https://lkml.org/lkml/2019/4/26/462
Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/ioasid.c
include/linux/ioasid.h