[RFC PATCH 19/45] KVM: arm64: iommu: Add domains
Mostafa Saleh
smostafa at google.com
Tue Feb 7 05:13:40 PST 2023
Hi Jean,
On Wed, Feb 01, 2023 at 12:53:03PM +0000, Jean-Philippe Brucker wrote:
> The IOMMU domain abstraction allows to share the same page tables
> between multiple devices. That may be necessary due to hardware
> constraints, if multiple devices cannot be isolated by the IOMMU
> (conventional PCI bus for example). It may also help with optimizing
> resource or TLB use. For pKVM in particular, it may be useful to reduce
> the amount of memory required for page tables. All devices owned by the
> host kernel could be attached to the same domain (though that requires
> host changes).
>
> Each IOMMU device holds an array of domains, and the host allocates
> domain IDs that index this array. The alloc() operation initializes the
> domain and prepares the page tables. The attach() operation initializes
> the device table that holds the PGD and its configuration.
I was wondering about the need for pre-allocation of the domain array.
An alternative way I see:
- We don’t pre-allocate any domain.
- When the EL1 driver has a request to domain_alloc, it will allocate
both kernel(iommu_domain) and hypervisor domains(kvm_hyp_iommu_domain).
- In __pkvm_host_iommu_alloc_domain, it will take over the hyp struct
from the kernel (via donation).
- In all other hypercalls, the kernel address of kvm_hyp_iommu_domain will
be used as domain ID, which guarantees uniqueness and O(1) access.
- The hypervisor would just need to transform the address(kern_hyp_va)
to get the domain pointer.
I believe that would save some memory as we allocate domains when needed.
Please let me know what you think about this?
Thanks,
Mostafa
More information about the linux-arm-kernel
mailing list