• Jacob Pan's avatar
    iommu/ioasid: Add custom allocators · e5c0bd7f
    Jacob Pan authored
    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: default avatarJean-Philippe Brucker <jean-philippe@linaro.com>
    Signed-off-by: default avatarJacob Pan <jacob.jun.pan@linux.intel.com>
    Link: https://lkml.org/lkml/2019/4/26/462Reviewed-by: default avatarJean-Philippe Brucker <jean-philippe@linaro.org>
    Reviewed-by: default avatarEric Auger <eric.auger@redhat.com>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    e5c0bd7f
ioasid.c 12.4 KB