From nobody Fri Oct 2 13:03:26 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 909D942122E for ; Fri, 31 Jul 2026 10:34:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785494109; cv=none; b=m3tgDKSmgWyKFY4o69ZnZKr7YxZhdUo4s4MpfID0yP7hI/1jxejQKvxoEkfiyUTaqP0Jhn7mwEC3Bx2NL2ArfYZ2sm4si7Vi+2q+eDcnq2aXreACJAlybE5EEELShsFd/YpDbzb08AvM3/OPXLrkQrdi5B8DSF0NR4f5RXcm+uE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785494109; c=relaxed/simple; bh=8jBFo3leZDgnmqctwiw0V0hqICmlxQdyuA6JJbEn+2A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mxZ6+FYdKV9k9g+/pGzbZUoQlWGB/KfrSWcicYaNWkQDTPCEUf1vEDsn8isIze+OH8SukcV2Rhm6rwz+fIsKlhYNs/jMZit7OfTUn11qP/s7Sj3FQ6lHf5dFnGEf1T77pYWc+f+7YuX2i671CgfffY6W4hmllsgbwDkAJBCp23Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=amMWzn2G; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="amMWzn2G" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-38e7109321dso482986a91.3 for ; Fri, 31 Jul 2026 03:34:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785494073; x=1786098873; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2oD6x90/2ngEh3h/+xTr/e8V2AGqBaiy+5NsZiEXuL8=; b=amMWzn2G7H4DsYjZsU4DW9QPkdO2lYcEdgzK8PDh0yRCiDEPydyTjvUcowdEibAcTS 0Ofk43j8m7xQSKZ9ltuYhs1q4q1b2wKJhZB3KK4U6yuy5UL/MhOJPi6Dy0woVaBE5n/J cjJ9hjDrLxGDMhsFZNEkSDUlHdFq/VQl6YAAaC4IANuizvbZ9Hxb/4dhw7wN4Ffhref2 8UAyGxlWdDVz0zd2vVOAmHnyaYYXDjg7ltBKxSf9dypxGEMrd09OcuqanP0kS6uWZXWg ckUyLME1hVr47Zf1KOHmy5flBSXvH5UPxxjoLrJnYDz+RaG2P7zjaL1j1U+b2HRze3o9 UrwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785494073; x=1786098873; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2oD6x90/2ngEh3h/+xTr/e8V2AGqBaiy+5NsZiEXuL8=; b=K2hEppFvtzxZWmW6+yOFHG8J9qA4r8kC4sIxRQRF/SBzYngt6PlS73ki2+2kgUhU9G W2oHF2rlzA4L7BzaNkI81UIMmbOoP1ZrKeQBuWEiVjZAcXHhIRw/LfYSnZxKST14Q1Te hwWeYxKoSftho/pdeJ8EACuj2oIRkzDWFaIxEU2LMcPCkack0Gv7vwjqIszfYYKr8QIK cz6jA55kTUbyx53bj+D+WEUnSuHA6Ks0NjYnForDS948PQw0Z4olavNmtODN0UeNIrNe WSvsPQP9p1Bu36QNYPJAg6f+qMxu7Ke2Qd9WTWHNKfz1OqOv8PBLPJUJuxUQQaUKVUEM XovA== X-Forwarded-Encrypted: i=1; AHgh+RpjGX6UR9rNCD1wgK85b1G0OsdZqnsUZ0t9neYQ/Kdtqu00ZIBTrG4nwTcxPtlT1T9fL8LwoZpnTpvO3jA=@vger.kernel.org X-Gm-Message-State: AOJu0Yxvj8S4GXxxBUVspfno10eD5d2IWGx5KREN4v1qgiH8FSOeS6Ep W5bljKsTUkBB7mVR0jPmU5IQ/v6oSuzOrdabGazQoRjeTJHiHlDzalOM3AbH+Q/i284= X-Gm-Gg: AR+sD13lw8tG3Bqqf6ZMe1FYY0t67L7aYtz9dk3/iU36WhmbmASlIa7NcAq3T7tgCVH RA2/5MlJmA4cObboSYDFja5HFnbS9iStVSZR1jEIgF7PSNb4M+mafAlndBqc9+dJAHRD3MsN2fI Rbv1uOp/xAa4tN8VWY47USVniGhqYiUYpcyBhKID8KsswqW9xJgSi0uFa3nyyFl8I2W3pqhQkMK 584a0LWF4xfrP9oz8xcTUubcYIdfi0pGSdUCWSM9vASBfzfMsRAbxQm0RiCoBZO111xvpUMkPgv fkfnHcMQf/Se43KOFcrO6ygHoI1b4dqywZ5vrEQRMmVqrS6lQfhOJzSZ0NGs+4TJv/wl4V7ItEt TtfUac/eU9fzyz1tUMAe8aBcHUuo41tbvwTBVEqFUE97GHTtXsXOyv+XyO9IBAfQ28DKVgAW5cf Zw6ZqjQA6zngHIpFArjFx8eF0pCLOBXASiLUtq04hS8VsQPFMgJHIGU6SvJZX8D1I= X-Received: by 2002:a17:90b:4d04:b0:38e:712a:be68 with SMTP id 98e67ed59e1d1-38fb15304fdmr1243750a91.43.1785494072849; Fri, 31 Jul 2026 03:34:32 -0700 (PDT) Received: from [127.0.1.1] ([188.253.12.32]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-13fab25227bsm1934172c88.7.2026.07.31.03.34.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 03:34:32 -0700 (PDT) From: Jia Jia To: mst@redhat.com Cc: stefanha@redhat.com, kvm@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] vhost/vsock: keep IOTLB across feature updates Date: Fri, 31 Jul 2026 18:34:14 +0800 Message-Id: <20260731103414.1746316-3-physicalmtea@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260731103414.1746316-1-physicalmtea@gmail.com> References: <20260730104857-mutt-send-email-mst@kernel.org> <20260731103414.1746316-1-physicalmtea@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" VHOST_SET_FEATURES is also used to update logging while a device is running. When ACCESS_PLATFORM stays enabled, allocating a new empty IOTLB on every call drops valid translations and forces avoidable misses. Initialize the device IOTLB only when one does not already exist. Signed-off-by: Jia Jia --- drivers/vhost/vsock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 562b9e139a76..3703fd219039 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -893,7 +893,8 @@ static int vhost_vsock_set_features(struct vhost_vsock = *vsock, u64 features) goto err; } =20 - if ((features & (1ULL << VIRTIO_F_ACCESS_PLATFORM))) { + if ((features & (1ULL << VIRTIO_F_ACCESS_PLATFORM)) && + !vsock->dev.iotlb) { if (vhost_init_device_iotlb(&vsock->dev)) goto err; } --=20 2.34.1 From nobody Fri Oct 2 13:03:26 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD79C3C8708 for ; Fri, 31 Jul 2026 10:34:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785494076; cv=none; b=IOeT2k1UsNf4JwAG4mKJSH4yMWTa7Gan67+lLWOas4oavkTGv24hybJMqN8GohRZK6o3R+MZvWOelRSAct/KhtJwRNgWizOJYz3tbvTHNoE5wYkAqa0FFnTzO4Yv45gwOc3pQX6bb5IvWVoa0WIMpn0Iz5ME7s6JmJVmGHcSJ+c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785494076; c=relaxed/simple; bh=3wxMKIaYa0TEK/wezstt8blZU4l0k9Wg9VQ5r2HlO0U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XZw+sUsya1CsfYfZBbcQGnvIYMl78NpbSvJTH47DTWWhI+JkkUTrw/wu3ajTiLyYB2cJR+mzB4Iqy4Dj0CJnaQ4jVlW/tsNvA3ebAg+PXJS3MS/mzoau0km3sf0kxHdZS54AVBqjX+KMrtcpbg2TDE1PiQQ+vC+9/dZH03nEvPg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=sfOvbiGg; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sfOvbiGg" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-3811f512167so829646a91.3 for ; Fri, 31 Jul 2026 03:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785494068; x=1786098868; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sSbgQp8eeyj2uwGNe57D0ofyxWkLsHgs5sTW3EdnPUM=; b=sfOvbiGg7t7Ff/w5WFXhBDxelky4WMoAc71pRMu907/SomI6pjzOkTWmfVIA2m4fWp A30fNdvdKa8QPRE1MklaAFXEaL0bYQkSehncm4+70mFFwKSSzsblz0gs6s7RmnWbWUIA SF6DL1wcA5dy5jkmMarVMce2zIqoQF1b1nHHkrYYx8i3s3YclhCH5Re1VGTYi4CY0+gt EH/a6GvOyVboZjNXdJUTJniTzkHlUNBRtrGCaDiush3ykVdP7+tcqzZja0T69YLApu25 1KGjdlreBXDkLf+oxj6wvcAXDdrRuC9oA35sDP+HEOu2p0D4ZN0YST8ZeNJYRbsWnQ4A n3fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785494068; x=1786098868; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=sSbgQp8eeyj2uwGNe57D0ofyxWkLsHgs5sTW3EdnPUM=; b=rOcsfEDrCfoU90TLFvn27y2J74DCqIKAdpMWjf8wEwNcIUCfM/FDnd+e9femH2BFLf dilyAJ+YY3bd79gB7GAIfVxTtFJGTj4OOWI5GL+hW6nHRoyUll+1iBSDal2ZOoUFehT4 kF98dK4LjJkzWnDfEM8OcNyTqswN7+ZdoOvs/8sUHAcTtbI97nL7YFzkvynSCNuZ9/04 thpvFg82HkHFr3yH9oFVtG8NlzudtliieLYPdN5coOZZ4fS5VYt+SqGl7IXwTHNrIu/E Qncsc8L+dSrSRAx1DV2a0T1s9b8K5zoFBq9ZEHco9DsXD6UuczRIz1xdvqSDS+bSKN11 qj/Q== X-Forwarded-Encrypted: i=1; AHgh+RoNdbE6BxWJUL1VHwUvu49p8hAgVM01jElSCzjnm+CBNnWoJU6AyWmYKpfadncmi8IeOhOVZhf9+ToHdq4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+6hKaEguYSG11JYCSk1r+70h6GZbRsc1vF38L94KktUn4WNiX MeJ6suUiCiBszcPD+l6U1SymWJmr/Zh4bPxhtCf2453taOcHXo7vCP9yGJCnyssi54Q= X-Gm-Gg: AR+sD121KvwLBCV1QTaoVTCxX17BBtA9Znq65itVTl1L6wqqX5Cya+BWLa+jECvWg+l 3/hVgvdPmvaGK39ZzVDx5twR/+XKeBuRZ2ja+w+TyzJn41gk3I4yqMwMqvd5RCp1eh769vw8jdp 9BMkJYDFtqPZ1/B3fEFnxqlTTG5m2hW+uhsC/UIInJoX7geN0vQs28oKV++y7/H5fiWoLMnZA0O sMvwc75OOq1XNaSEeY27mFJ/7/Kt/HDoyGstjXEMt6cmmiXV+AS7l3kVuf/mbyjmL2tEzQ+DEhd 0lC+4s7t/zMfmNMH3hkffZSbSvTkWzrCjK+z3UDEOUIYTq/MmwppHn1uuoGOk8r6xTbmG/U00Pn cFkgAvMvxyWgK4urf+59S0npoZVcH9DB1NtEmkzJErPSL3Jn69l2MHtDnvwzbchJ9JEc7dwbUTl GRCMtmVLQbXmQg2pvvoraSUbZtS5PLZwBZQYv6LJNnvl2MLgfqS49mz0KU/07eEzs= X-Received: by 2002:a17:90b:5810:b0:38e:6a30:4bbc with SMTP id 98e67ed59e1d1-38fb13515aemr1518516a91.21.1785494067758; Fri, 31 Jul 2026 03:34:27 -0700 (PDT) Received: from [127.0.1.1] ([188.253.12.32]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3153db2f911sm5434719eec.0.2026.07.31.03.34.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 03:34:27 -0700 (PDT) From: Jia Jia To: mst@redhat.com Cc: stefanha@redhat.com, kvm@vger.kernel.org, virtualization@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] vhost/vsock: discard IOTLB when ACCESS_PLATFORM is cleared Date: Fri, 31 Jul 2026 18:34:13 +0800 Message-Id: <20260731103414.1746316-2-physicalmtea@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260731103414.1746316-1-physicalmtea@gmail.com> References: <20260730104857-mutt-send-email-mst@kernel.org> <20260731103414.1746316-1-physicalmtea@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" vhost_vsock_set_features() leaves the device IOTLB attached when userspace clears VIRTIO_F_ACCESS_PLATFORM. Descriptors can therefore continue to use translations installed before the feature change, including HVAs made stale by a later memory table update. Detach the IOTLB before acknowledging a feature mask without ACCESS_PLATFORM. Hold all virtqueue mutexes in index order while clearing the device and virtqueue IOTLB pointers, resetting metadata caches, and updating the acknowledged features. This prevents a kick handler from observing a mixed translation state. Free the old IOTLB after releasing the virtqueue mutexes. Also drop the old IOTLB miss messages and wake readers now that the device no longer accepts IOTLB updates. Fixes: e13a6915a03f ("vhost/vsock: add IOTLB API support") Signed-off-by: Jia Jia --- drivers/vhost/vsock.c | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 9aaab6bb8061..562b9e139a76 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -851,6 +851,34 @@ static int vhost_vsock_set_cid(struct vhost_vsock *vso= ck, u64 guest_cid) return 0; } =20 +/* Caller must hold the device mutex. */ +static void vhost_vsock_clear_iotlb(struct vhost_vsock *vsock, u64 feature= s) +{ + struct vhost_iotlb *iotlb; + struct vhost_virtqueue *vq; + int i; + + for (i =3D 0; i < ARRAY_SIZE(vsock->vqs); i++) + mutex_lock_nested(&vsock->vqs[i].mutex, i); + + iotlb =3D vsock->dev.iotlb; + vsock->dev.iotlb =3D NULL; + + for (i =3D 0; i < ARRAY_SIZE(vsock->vqs); i++) { + vq =3D &vsock->vqs[i]; + vq->iotlb =3D NULL; + memset(vq->meta_iotlb, 0, sizeof(vq->meta_iotlb)); + vq->acked_features =3D features; + } + + for (i =3D ARRAY_SIZE(vsock->vqs); i-- > 0;) + mutex_unlock(&vsock->vqs[i].mutex); + + vhost_clear_msg(&vsock->dev); + vhost_iotlb_free(iotlb); + wake_up_interruptible_poll(&vsock->dev.wait, EPOLLIN | EPOLLRDNORM); +} + static int vhost_vsock_set_features(struct vhost_vsock *vsock, u64 feature= s) { struct vhost_virtqueue *vq; @@ -872,11 +900,16 @@ static int vhost_vsock_set_features(struct vhost_vsoc= k *vsock, u64 features) =20 vsock->seqpacket_allow =3D features & (1ULL << VIRTIO_VSOCK_F_SEQPACKET); =20 - for (i =3D 0; i < ARRAY_SIZE(vsock->vqs); i++) { - vq =3D &vsock->vqs[i]; - mutex_lock(&vq->mutex); - vq->acked_features =3D features; - mutex_unlock(&vq->mutex); + if (!(features & (1ULL << VIRTIO_F_ACCESS_PLATFORM)) && + vsock->dev.iotlb) { + vhost_vsock_clear_iotlb(vsock, features); + } else { + for (i =3D 0; i < ARRAY_SIZE(vsock->vqs); i++) { + vq =3D &vsock->vqs[i]; + mutex_lock(&vq->mutex); + vq->acked_features =3D features; + mutex_unlock(&vq->mutex); + } } mutex_unlock(&vsock->dev.mutex); return 0; --=20 2.34.1