From: Robin Murphy <robin.murphy@arm.com>
To: Jean-Philippe Brucker <jean-philippe@linaro.org>,
Niklas Schnelle <schnelle@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, Joerg Roedel <joro@8bytes.org>,
Will Deacon <will@kernel.org>,
iommu@lists.linux.dev, virtualization@lists.linux-foundation.org
Subject: Re: [PATCH 2/2] iommu/virtio: Add ops->flush_iotlb_all and enable deferred flush
Date: Mon, 4 Sep 2023 17:33:46 +0100 [thread overview]
Message-ID: <f1259993-2419-9c9e-30d3-0631ef938679@arm.com> (raw)
In-Reply-To: <20230904153403.GB815284@myrica>
On 2023-09-04 16:34, Jean-Philippe Brucker wrote:
> On Fri, Aug 25, 2023 at 05:21:26PM +0200, Niklas Schnelle wrote:
>> Add ops->flush_iotlb_all operation to enable virtio-iommu for the
>> dma-iommu deferred flush scheme. This results inn a significant increase
>
> in
>
>> in performance in exchange for a window in which devices can still
>> access previously IOMMU mapped memory. To get back to the prior behavior
>> iommu.strict=1 may be set on the kernel command line.
>
> Maybe add that it depends on CONFIG_IOMMU_DEFAULT_DMA_{LAZY,STRICT} as
> well, because I've seen kernel configs that enable either.
Indeed, I'd be inclined phrase it in terms of the driver now actually
being able to honour lazy mode when requested (which happens to be the
default on x86), rather than as if it might be some
potentially-unexpected change in behaviour.
Thanks,
Robin.
>> Link: https://lore.kernel.org/lkml/20230802123612.GA6142@myrica/
>> Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
>> ---
>> drivers/iommu/virtio-iommu.c | 12 ++++++++++++
>> 1 file changed, 12 insertions(+)
>>
>> diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
>> index fb73dec5b953..1b7526494490 100644
>> --- a/drivers/iommu/virtio-iommu.c
>> +++ b/drivers/iommu/virtio-iommu.c
>> @@ -924,6 +924,15 @@ static int viommu_iotlb_sync_map(struct iommu_domain *domain,
>> return viommu_sync_req(vdomain->viommu);
>> }
>>
>> +static void viommu_flush_iotlb_all(struct iommu_domain *domain)
>> +{
>> + struct viommu_domain *vdomain = to_viommu_domain(domain);
>> +
>> + if (!vdomain->nr_endpoints)
>> + return;
>
> As for patch 1, a NULL check in viommu_sync_req() would allow dropping
> this one
>
> Thanks,
> Jean
>
>> + viommu_sync_req(vdomain->viommu);
>> +}
>> +
>> static void viommu_get_resv_regions(struct device *dev, struct list_head *head)
>> {
>> struct iommu_resv_region *entry, *new_entry, *msi = NULL;
>> @@ -1049,6 +1058,8 @@ static bool viommu_capable(struct device *dev, enum iommu_cap cap)
>> switch (cap) {
>> case IOMMU_CAP_CACHE_COHERENCY:
>> return true;
>> + case IOMMU_CAP_DEFERRED_FLUSH:
>> + return true;
>> default:
>> return false;
>> }
>> @@ -1069,6 +1080,7 @@ static struct iommu_ops viommu_ops = {
>> .map_pages = viommu_map_pages,
>> .unmap_pages = viommu_unmap_pages,
>> .iova_to_phys = viommu_iova_to_phys,
>> + .flush_iotlb_all = viommu_flush_iotlb_all,
>> .iotlb_sync = viommu_iotlb_sync,
>> .iotlb_sync_map = viommu_iotlb_sync_map,
>> .free = viommu_domain_free,
>>
>> --
>> 2.39.2
>>
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2023-09-04 16:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20230825-viommu-sync-map-v1-0-56bdcfaa29ec@linux.ibm.com>
[not found] ` <20230825-viommu-sync-map-v1-1-56bdcfaa29ec@linux.ibm.com>
2023-09-04 15:26 ` [PATCH 1/2] iommu/virtio: Make use of ops->iotlb_sync_map Jean-Philippe Brucker
[not found] ` <20230825-viommu-sync-map-v1-2-56bdcfaa29ec@linux.ibm.com>
2023-09-04 15:34 ` [PATCH 2/2] iommu/virtio: Add ops->flush_iotlb_all and enable deferred flush Jean-Philippe Brucker
2023-09-04 16:33 ` Robin Murphy [this message]
[not found] ` <ba38b6d90e1f24f249ed8a18e65c403be6ff90e9.camel@linux.ibm.com>
2023-09-06 13:20 ` Jean-Philippe Brucker
2023-09-07 14:21 ` Eric Auger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f1259993-2419-9c9e-30d3-0631ef938679@arm.com \
--to=robin.murphy@arm.com \
--cc=iommu@lists.linux.dev \
--cc=jean-philippe@linaro.org \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=schnelle@linux.ibm.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox