From: Jia Jia <physicalmtea@gmail.com>
To: mst@redhat.com
Cc: stefanha@redhat.com, kvm@vger.kernel.org,
virtualization@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/2] vhost/vsock: discard IOTLB when ACCESS_PLATFORM is cleared
Date: Tue, 4 Aug 2026 12:18:50 +0800 [thread overview]
Message-ID: <20260804041850.5922-1-physicalmtea@gmail.com> (raw)
In-Reply-To: <20260803231405-mutt-send-email-mst@kernel.org>
On Mon, Aug 03, 2026 at 11:18:50PM -0400, Michael S. Tsirkin wrote:
> Why lock down all vqs like this? Would this work just as well instead?
>
> iotlb = vsock->dev.iotlb;
> vsock->dev.iotlb = NULL;
>
> for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) {
> mutex_lock(&vsock->vqs[i].mutex);
> vq = &vsock->vqs[i];
> vq->iotlb = NULL;
> memset(vq->meta_iotlb, 0, sizeof(vq->meta_iotlb));
> vq->acked_features = features;
> mutex_unlock(&vsock->vqs[i].mutex);
> }
>
> and if no why not?
Thanks for the review.
My understanding is as follows. The proposed sequence protects the
lifetime of the old IOTLB, but it does not keep the translation state
consistent during the transition.
dev->iotlb is shared by all VQs, while vq->iotlb, meta_iotlb, and
acked_features are per-VQ state. A kick handler only holds its own VQ
mutex. If dev->iotlb is cleared first, a handler that already holds a VQ
mutex can continue using the old vq->iotlb and metadata cache, while
translate_desc() sees dev->iotlb == NULL and falls back to dev->umem. The
same handler could therefore observe both the IOVA/IOTLB and GPA/umem
views.
Locking each VQ in turn before freeing the old IOTLB prevents a lifetime
issue, but it does not remove this mixed-state window. Taking all VQ
mutexes before changing dev->iotlb lets active handlers finish and
prevents new handlers from running until the shared and per-VQ state has
been updated consistently.
If VHOST_SET_FEATURES is guaranteed to run only while all VQs are stopped
or otherwise quiesced, then the shorter sequence should be sufficient.
Since the ioctl itself does not enforce that, I thought this transition
also needed to be safe while a VQ may still be active.
Please correct me if I have misunderstood anything. Thank you very much.
next prev parent reply other threads:[~2026-08-04 4:19 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-30 4:09 [PATCH] vhost/vsock: prevent stale IOTLB after ACCESS_PLATFORM changes Jia Jia
2026-07-30 4:36 ` sashiko-bot
2026-07-30 13:55 ` Stefan Hajnoczi
2026-07-30 14:48 ` Michael S. Tsirkin
2026-07-30 14:51 ` Michael S. Tsirkin
2026-07-31 4:41 ` Jia Jia
2026-07-31 9:38 ` Michael S. Tsirkin
2026-07-31 10:34 ` [PATCH v2 0/2] vhost/vsock: fix device IOTLB feature lifecycle Jia Jia
2026-07-31 10:34 ` [PATCH v2 1/2] vhost/vsock: discard IOTLB when ACCESS_PLATFORM is cleared Jia Jia
2026-07-31 10:56 ` sashiko-bot
2026-08-04 3:18 ` Michael S. Tsirkin
2026-08-04 4:18 ` Jia Jia [this message]
2026-08-04 7:21 ` Jia Jia
2026-07-31 10:34 ` [PATCH v2 2/2] vhost/vsock: keep IOTLB across feature updates Jia Jia
2026-07-31 11:03 ` sashiko-bot
2026-08-04 3:20 ` Michael S. Tsirkin
2026-08-04 4:26 ` Jia Jia
2026-08-04 3:19 ` [PATCH v2 0/2] vhost/vsock: fix device IOTLB feature lifecycle Michael S. Tsirkin
2026-08-04 4:30 ` Jia Jia
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=20260804041850.5922-1-physicalmtea@gmail.com \
--to=physicalmtea@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=stefanha@redhat.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox