[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z3gDuPe5C1Uj7y4m@google.com>
Date: Fri, 3 Jan 2025 15:35:20 +0000
From: Mostafa Saleh <smostafa@...gle.com>
To: Jason Gunthorpe <jgg@...pe.ca>
Cc: Robin Murphy <robin.murphy@....com>, iommu@...ts.linux.dev,
kvmarm@...ts.linux.dev, linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, catalin.marinas@....com,
will@...nel.org, maz@...nel.org, oliver.upton@...ux.dev,
joey.gouly@....com, suzuki.poulose@....com, yuzenghui@...wei.com,
robdclark@...il.com, joro@...tes.org, jean-philippe@...aro.org,
nicolinc@...dia.com, vdonnefort@...gle.com, qperret@...gle.com,
tabba@...gle.com, danielmentz@...gle.com, tzukui@...gle.com
Subject: Re: [RFC PATCH v2 55/58] drivers/iommu: Add deferred map_sg
operations
On Thu, Jan 02, 2025 at 04:18:31PM -0400, Jason Gunthorpe wrote:
> On Thu, Dec 19, 2024 at 02:24:05PM +0000, Mostafa Saleh wrote:
> > I had a quick look now at s390, and it seems a bit different as they only
> > notify the hypervisor about the iova range being changed, and don’t need
> > to provide iova->paddr mapping which pKVM does.
>
> Can you explain this statement some more. It seems strange to me, why
> would the pkvm side, which has it's own page table, need to be be told
> about the iova->paddr during range unmapping requests - and why would
> the host/guest side have to unnecessarily store this information?
No, it doesn’t need to be told about the paddr on unmapping.
The problem is as follows;
- With the current IOMMU API, an iommu_map_sg() function ends up looping on
iommu_map() which is very slow as map is a hypercall and there is a lot of
context switching.
- So, we add a map_sg hypercall, instead of consuming the kernel scatterlist
which duplicates logic and can be complicated to do. A new iommu operation is
added add_deferred_map_sg(), where at iommu_map_sg() instead of calling
iommu_map() it calls add_deferred_map_sg() to add mapping, and 2 other new ops
also added to create and consume a sg request which comes from a single iommu_map_sg().
The drawback of this approach is that it adds 3 new iommu_ops with a bit of niche
semantics, which for now only used by this driver.
An alternative approach as Robin suggested, is to treat all iommu_map as sg map,
and when the driver gets the iotlb_sync_map() call it can just issue the hypercall,
however this call only provides the IOVA range, which requires extra work or locking
as mentioned in the thread, and as Robin mentioned s390 doing something similar,
I was highlighting that in their driver, this call only notifies the hypervisor
about an IOVA and not an actual pv map as pKVM, so it much simpler in their case.
Thanks,
Mostafa
>
> Jason
Powered by blists - more mailing lists