[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aMl0fJJyV5sJKIKS@google.com>
Date: Tue, 16 Sep 2025 14:30:20 +0000
From: Mostafa Saleh <smostafa@...gle.com>
To: Will Deacon <will@...nel.org>
Cc: linux-kernel@...r.kernel.org, kvmarm@...ts.linux.dev,
linux-arm-kernel@...ts.infradead.org, iommu@...ts.linux.dev,
maz@...nel.org, oliver.upton@...ux.dev, joey.gouly@....com,
suzuki.poulose@....com, yuzenghui@...wei.com,
catalin.marinas@....com, robin.murphy@....com,
jean-philippe@...aro.org, qperret@...gle.com, tabba@...gle.com,
jgg@...pe.ca, mark.rutland@....com, praan@...gle.com
Subject: Re: [PATCH v4 14/28] iommu/arm-smmu-v3: Add KVM mode in the driver
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@...gle.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
>
Powered by blists - more mailing lists