From: sashiko-bot@kernel.org
To: "Anlai Lu" <agicy@qq.com>
Cc: virtualization@lists.linux.dev,
"Michael S. Tsirkin" <mst@redhat.com>,
"Eugenio Perez" <eperezma@redhat.com>
Subject: Re: [PATCH 6/6] iommu/virtio: batch the mapping replay on domain attach
Date: Sun, 04 Oct 2026 12:10:48 +0000 [thread overview]
Message-ID: <20261004121049.590941F0089A@smtp.kernel.org> (raw)
In-Reply-To: <tencent_ED730B6C7A1FCF7E8C5BA1E836D75257620A@qq.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] iommu/virtio: memory leak of queued requests on device removal
--
commit db185ffd41ba01e7309f7ee2d8c108a5d39c6450
Author: Anlai Lu <agicy@qq.com>
iommu/virtio: batch the mapping replay on domain attach
This commit optimizes the domain attach process by queueing all mapping
requests and waiting for them once, rather than sending them synchronously
one by one. This significantly reduces the IRQ-off window and attach time
when dealing with a large number of mappings.
> diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
> index 4e578d4255f6b..7b883f59221f5 100644
> --- a/drivers/iommu/virtio-iommu.c
> +++ b/drivers/iommu/virtio-iommu.c
[ ... ]
> @@ -656,23 +698,57 @@ static int viommu_domain_map_identity(struct viommu_endpoint *vdev,
> }
>
> /*
> - * viommu_replay_mappings - re-send MAP requests
> + * viommu_replay_mappings - send every mapping of the domain again
[ ... ]
> + while (!done) {
> + struct viommu_mapping *mapping;
> + struct virtio_iommu_req_map map;
[ ... ]
> + ret = viommu_add_req(vdomain->viommu, &map, sizeof(map), &status);
>
> - ret = viommu_send_req_sync(vdomain->viommu, &map, sizeof(map));
> - if (ret) {
[ ... ]
> + if (mapping->iova.last == ULONG_MAX)
> + done = true;
> + else
> + next_iova = mapping->iova.last + 1;
> + spin_unlock_irqrestore(&vdomain->mappings_lock, flags);
>
> - node = interval_tree_iter_next(node, 0, -1UL);
> + if (ret)
> + break;
> }
> - spin_unlock_irqrestore(&vdomain->mappings_lock, flags);
>
> - return ret;
> + /* Wait for all of them outside the lock: this is the batched drain */
> + viommu_sync_req(vdomain->viommu);
[Severity: Medium]
If the virtio-iommu device is removed (e.g., via hot-unplug or driver unbind)
while we are queuing these batched requests, could this leak the dynamically
allocated struct viommu_request objects?
Looking at viommu_sync_req(), it short-circuits when the device is removed
without draining the list:
drivers/iommu/virtio-iommu.c:viommu_sync_req() {
...
if (!viommu_device_live(viommu)) {
spin_unlock_irqrestore(&viommu->request_lock, flags);
return 0;
}
...
}
Any queued requests would remain in viommu->requests. Since viommu_remove()
tears down the virtqueues and sets viommu->removed = true, but does not
iterate over the viommu->requests list to free the pending elements, it
appears these requests would permanently leak.
--
Sashiko AI review · https://sashiko.dev/#/patchset/tencent_85AC6E749F6A912B7BB9FF360F8ECB3F5C09@qq.com?part=6
next prev parent reply other threads:[~2026-10-04 12:10 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-04 11:55 [PATCH 0/6] iommu/virtio: batch the mapping replay Anlai Lu
2026-10-04 11:57 ` [PATCH 1/6] iommu/virtio: publish the endpoint before replaying it Anlai Lu
2026-10-04 12:08 ` sashiko-bot
2026-10-04 13:02 ` Anlai Lu
2026-10-04 11:57 ` [PATCH 2/6] iommu/virtio: queue an UNMAP for every removed mapping Anlai Lu
2026-10-04 12:04 ` sashiko-bot
2026-10-04 11:57 ` [PATCH 3/6] iommu/virtio: allocate the UNMAP request with the mapping Anlai Lu
2026-10-04 12:06 ` sashiko-bot
2026-10-04 11:57 ` [PATCH 4/6] iommu/virtio: stop queueing and draining once the device is removed Anlai Lu
2026-10-04 12:09 ` sashiko-bot
2026-10-04 13:04 ` Anlai Lu
2026-10-04 11:57 ` [PATCH 5/6] iommu/virtio: read the endpoint count under the lock in the iotlb paths Anlai Lu
2026-10-04 12:04 ` sashiko-bot
2026-10-04 11:57 ` [PATCH 6/6] iommu/virtio: batch the mapping replay on domain attach Anlai Lu
2026-10-04 12:10 ` sashiko-bot [this message]
2026-10-04 13:04 ` Anlai Lu
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=20261004121049.590941F0089A@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=agicy@qq.com \
--cc=eperezma@redhat.com \
--cc=mst@redhat.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=virtualization@lists.linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.