On Fri, Sep 12, 2025 at 02:52:27PM +0100, Will Deacon wrote:
> On Tue, Aug 19, 2025 at 09:51:42PM +0000, Mostafa Saleh wrote:
> > Add a file only compiled for KVM mode.
> >
> > At the moment it registers the driver with KVM, and add the hook
> > needed for memory allocation.
> >
> > Next, it will create the array with available SMMUs and their
> > description.
> >
> > Signed-off-by: Mostafa Saleh <smostafa@google.com>
> > ---
> > arch/arm64/include/asm/kvm_host.h | 4 +++
> > arch/arm64/kvm/iommu.c | 10 ++++--
> > drivers/iommu/arm/arm-smmu-v3/Makefile | 1 +
> > .../iommu/arm/arm-smmu-v3/arm-smmu-v3-kvm.c | 36 +++++++++++++++++++
> > 4 files changed, 49 insertions(+), 2 deletions(-)
> > create mode 100644 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-kvm.c
> >
> > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> > index fcb4b26072f7..52212c0f2e9c 100644
> > --- a/arch/arm64/include/asm/kvm_host.h
> > +++ b/arch/arm64/include/asm/kvm_host.h
> > @@ -1678,4 +1678,8 @@ struct kvm_iommu_ops;
> > int kvm_iommu_register_driver(struct kvm_iommu_ops *hyp_ops);
> > size_t kvm_iommu_pages(void);
> >
> > +#ifdef CONFIG_ARM_SMMU_V3_PKVM
> > +size_t smmu_hyp_pgt_pages(void);
> > +#endif
> > +
> > #endif /* __ARM64_KVM_HOST_H__ */
> > diff --git a/arch/arm64/kvm/iommu.c b/arch/arm64/kvm/iommu.c
> > index 5460b1bd44a6..0475f7c95c6c 100644
> > --- a/arch/arm64/kvm/iommu.c
> > +++ b/arch/arm64/kvm/iommu.c
> > @@ -17,10 +17,16 @@ int kvm_iommu_register_driver(struct kvm_iommu_ops *hyp_ops)
> >
> > size_t kvm_iommu_pages(void)
> > {
> > + size_t nr_pages = 0;
> > +
> > /*
> > * This is called very early during setup_arch() where no initcalls,
> > * so this has to call specific functions per each KVM driver.
> > */
> > - kvm_nvhe_sym(hyp_kvm_iommu_pages) = 0;
> > - return 0;
> > +#ifdef CONFIG_ARM_SMMU_V3_PKVM
> > + nr_pages = smmu_hyp_pgt_pages();
> > +#endif
>
> Rather than hard-code this here, I wonder whether it would be better to
> have a default size for the IOMMU carveout and have the driver tells us
> how much it needs later on when it probes. Then we could either free
> any unused portion back to the host or return an error to the driver if
> it wants more than we have.
I can do that, we can set the default from a config or cmdline (or
both).
Thanks,
Mostafa
>
> Will
>