From nobody Mon Sep 28 20:13:18 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 3E05A377000 for ; Tue, 18 Aug 2026 04:26:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787027205; cv=none; b=m2BjjOgSWi9iZXm4jbTKtx2sfdnYvI52mCQIIx6m25yiDpssp1myKQDiCuF/UN8gpsE9PL9QR855PUbNCL8cE8I16K1inDhZMulxDTjKPRtwfrFivKCb5Vldskk3gFp4rZ4rGmHuddye+MxtFHxOKOktwwcGvUI17WWDifjs02E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787027205; c=relaxed/simple; bh=i5lJDuKpaj451ORek1RkuNKvrVPA7j5ESmxEVRGGCBY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RUdEmENz4UGS1Wn9/GC0cvUOIA/Rikaou9rfC3VnlHErL/d+Z/b5TtIzz7rkSlbD1miE811OD/EC+ZxW3bYM5Oua18/LL1bw/y4EacgsiTzun6rU8iOeO8Yop6G33zwOf4ZtBVtXDVukVhGml0dnoNnePToi30IpVHb3I2Er5a4= 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=C9L0vp8l; arc=none smtp.client-ip=209.85.210.175 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="C9L0vp8l" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-84a2dcede83so5694016b3a.3 for ; Mon, 17 Aug 2026 21:26:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787027202; x=1787632002; 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=UpRGh7AB0RzVN4Z1bHcSA/fyKDz1HZtg4D8+CDGvt3U=; b=C9L0vp8lUOtTTJ3fjJVkuGgNCTiZUbpBQbqt2vEad8zC9zU5nWTZiEAmXqkiJoKd+z N57AxHvecLsKJqE5p6jJ5WPzlVn9ZafnKl/B4Wv7CGgh+iTv0IAIY21iy6B4QhAk4WT6 PZ1G4Vs8Qi2tX5yo85nl6eRfe/v+guzMfLXnSJH0ct2NRjkso5gGw6UJM+iPlzjCMCKP 5qEFtCpzvooKVF4Q+lkg4PlZD6l3RqYDweJXzr/XXejR8d8aJwdmVFhAIHBb4JSLPTjA pkLquiyP5SJWY3lFFO6iDtkykG6li/3XRFBuOW7Z3dERfVNJieVI1OuyHuuQtm2hpl0A Z4DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787027202; x=1787632002; 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=UpRGh7AB0RzVN4Z1bHcSA/fyKDz1HZtg4D8+CDGvt3U=; b=aLGJSQwFSiaWto2e+ba8zhYsPlUyPokxYJJsOetQlLlBsiV0MmIrgzSXZtmUU/ENqJ QK8rB+DIwiJmFWctEE+YrRfLvLST0S4MuVPthjbhaJyw4/ajh5nlWFVWVUZV/nB+5/UM fXuj/+68TisX1VHDm7MmRzns5DaJLocG+jcPun3ZJkIapgiz70F+aNr2W4AIuMasDYi2 oH4TsNuNKYru3pGDRKk/RTwJ+WpQdWehHfo0NsbR92+xvjGQmaTiyKWSh2YGYrfDP30w P1HXISM91D6rICOsUQvUrwY8jjZDNGMs0JDWIwcjsdfcFMavbYEzvvK3LsKclEEpFFxZ AXcA== X-Forwarded-Encrypted: i=1; AHgh+Rra2GjHyslMK3+giJ+foMP23jBouju91IkWzFT5Z2eBWnbtMER8RgXeBSjyr8Bb0+5ME+01P7iL2ITd46k=@vger.kernel.org X-Gm-Message-State: AOJu0YzrOoOXUCNdYUG/tv22yEN/MBO5uLu3vyQ0dIXFgBw3FbIkSmiw LRn7VT1uIX9bmK+iQ420ENCFKrSSUrEu6cyCbx+d4U0Afch1PVoMVD7P X-Gm-Gg: AR+sD10lUmYNeXyCmKVt8wnNFLOtHIi48Red/s8HWJPMV6/+X8/Hrc7NOs6lL/aEVRh A8iZBCcTAIcmdbvt4imOL/eQIhDbnNZhzaNUDuj63daQJMjvD/1OitFghFjUzdIdVDA5Uk5gM6U QaUtH1czEX198QcPuK4GlbWcET8Xsv8k2TsLjySjP4agtuHRNjgdtZ3V/C6aIKrG5eu3oTzJyq0 QFP1Lsam7mKx92zin2j2YhINe9O9C0jZzctREgFseDN4liUe6TRROq3RGiaCYyoST/5FvL4648F pO8PmwzSoLi8JDiFGuJQKMuwD+GdFEq9aIUTsSXeg/yU1Y2cZHCrqw7VVvObkuRK4xVxVZvbTzO IrrwjRvJ1kZBPkxreUrmWe8x6RffEc7K44If4RMZMkCzc8nmPyoU57oSn/cIAXhXQKqd0FkTlY/ bzDS1CLheBiLedfZc2/qg33kOXQ2KCV09MZzn3MY9EN6DXT3m/BYmaUC2lYTdJNgsN1wfHbw== X-Received: by 2002:a05:6a00:4ac3:b0:82f:50cd:e586 with SMTP id d2e1a72fcca58-84fde001affmr33624373b3a.13.1787027201198; Mon, 17 Aug 2026 21:26:41 -0700 (PDT) Received: from jia ([188.253.126.51]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-851b6fefb3asm1005919b3a.53.2026.08.17.21.26.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 21:26:40 -0700 (PDT) From: Jia Jia To: mst@redhat.com Cc: jasowangio@gmail.com, eperezma@redhat.com, stefanha@redhat.com, sgarzare@redhat.com, weiyj.lk@gmail.com, kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jia Jia Subject: [PATCH v6 1/3] vhost: invalidate vring access on IOTLB transitions Date: Tue, 18 Aug 2026 12:26:11 +0800 Message-Id: <20260818042613.281125-2-physicalmtea@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260818042613.281125-1-physicalmtea@gmail.com> References: <20260818042613.281125-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" When ACCESS_PLATFORM changes, the addresses cached in desc, avail, and used change meaning with the address space. Clear the cached vring access state when the device IOTLB is installed or removed so stale IOVAs cannot be reused as direct userspace addresses. Keep device IOTLB initialization idempotent and apply the mode change even when a virtqueue backend is attached. Drop the device-wide IOTLB first, then clear each VQ state under its own mutex, and keep the old table alive until every VQ has completed the handoff. A successful live mode change leaves the backend attached but invalidates the cached vring addresses. Userspace must configure the vring addresses for the new address mode before data processing can resume. Fixes: 6b1e6cc7855b ("vhost: new device IOTLB API") Signed-off-by: Jia Jia --- drivers/vhost/vhost.c | 53 ++++++++++++++++++++++++++++++++++++++++++- drivers/vhost/vhost.h | 1 + 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index 4c525b3e16ea..9f74537b1c1c 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c @@ -344,6 +344,17 @@ static void __vhost_vq_meta_reset(struct vhost_virtque= ue *vq) vq->meta_iotlb[j] =3D NULL; } =20 +/* Caller must hold the virtqueue mutex. */ +static void vhost_vq_invalidate_access(struct vhost_virtqueue *vq) +{ + vq->desc =3D NULL; + vq->avail =3D NULL; + vq->used =3D NULL; + vq->log_used =3D false; + vq->log_addr =3D -1ull; + __vhost_vq_meta_reset(vq); +} + static void vhost_vq_meta_reset(struct vhost_dev *d) { int i; @@ -1911,6 +1922,9 @@ int vq_meta_prefetch(struct vhost_virtqueue *vq) { unsigned int num =3D vq->num; =20 + if (!vq->desc || !vq->avail || !vq->used) + return 0; + if (!vq->iotlb) return 1; =20 @@ -2270,11 +2284,48 @@ long vhost_vring_ioctl(struct vhost_dev *d, unsigne= d int ioctl, void __user *arg } EXPORT_SYMBOL_GPL(vhost_vring_ioctl); =20 +/* Caller must hold the device mutex. */ +void vhost_clear_device_iotlb(struct vhost_dev *d) +{ + struct vhost_iotlb *iotlb; + int i; + + iotlb =3D d->iotlb; + if (!iotlb) + return; + + /* + * Drop the device-wide view first. Each VQ then drops its + * per-VQ view and its cached ring access under its own mutex. + * Keep the old table alive until every VQ has completed this + * handoff, since a worker may still be using it while waiting + * for its VQ mutex. + */ + d->iotlb =3D NULL; + + for (i =3D 0; i < d->nvqs; ++i) { + struct vhost_virtqueue *vq =3D d->vqs[i]; + + mutex_lock(&vq->mutex); + vq->iotlb =3D NULL; + vhost_vq_invalidate_access(vq); + mutex_unlock(&vq->mutex); + } + + vhost_clear_msg(d); + vhost_iotlb_free(iotlb); + wake_up_interruptible_poll(&d->wait, EPOLLIN | EPOLLRDNORM); +} +EXPORT_SYMBOL_GPL(vhost_clear_device_iotlb); + int vhost_init_device_iotlb(struct vhost_dev *d) { struct vhost_iotlb *niotlb, *oiotlb; int i; =20 + if (d->iotlb) + return 0; + niotlb =3D iotlb_alloc(); if (!niotlb) return -ENOMEM; @@ -2287,7 +2338,7 @@ int vhost_init_device_iotlb(struct vhost_dev *d) =20 mutex_lock(&vq->mutex); vq->iotlb =3D niotlb; - __vhost_vq_meta_reset(vq); + vhost_vq_invalidate_access(vq); mutex_unlock(&vq->mutex); } =20 diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h index 0192ade6e749..3c75e8089373 100644 --- a/drivers/vhost/vhost.h +++ b/drivers/vhost/vhost.h @@ -277,6 +277,7 @@ ssize_t vhost_chr_read_iter(struct vhost_dev *dev, stru= ct iov_iter *to, int noblock); ssize_t vhost_chr_write_iter(struct vhost_dev *dev, struct iov_iter *from); +void vhost_clear_device_iotlb(struct vhost_dev *d); int vhost_init_device_iotlb(struct vhost_dev *d); =20 void vhost_iotlb_map_free(struct vhost_iotlb *iotlb, From nobody Mon Sep 28 20:13:18 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 6984D33B6F4 for ; Tue, 18 Aug 2026 04:26:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787027216; cv=none; b=RmAeVL1cqv1S58Hmb0QmgURz4snELm9HpRWR++Inaa0yVXTfylGly140oAHZIfXoCMnhzzJhzrja0uBXx6wco4Jh06986fj2acNt2QcHv+b7d+Ti9OlI+oePkPbBzpEsyAO2ebnROHMeWAN2nJJsldVN6mFhs3rAw+5QslMUB+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787027216; c=relaxed/simple; bh=ieK2+IysJqjtboJuOsV9J7sxXGFN4Dr4N7HwSPkkMxc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qCd8Vq0OO6b2QhJP1LmKxJLf51ZLvWXvcOfC5h1hgOsf2J1gvcCxsZVU0hz7oEsW4x2aCdvgyWuclSNwsrmW8Dn3Zu9mAE6cdRKg5/LGBHidr6LGoEwZQSBme5Wr4C+aRMWJTB39fvpj2lriVbcvpkA8JasXvOQTHRL83iR5flc= 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=sd1mEljQ; arc=none smtp.client-ip=209.85.214.171 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="sd1mEljQ" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2ce98cb8165so5969975ad.1 for ; Mon, 17 Aug 2026 21:26:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787027213; x=1787632013; 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=6hk0+goG2CVie+owgSwZFn8ixOAcSPlM11kHKU9J/60=; b=sd1mEljQpcosrbQ2FIUI5kM8h69O+t4PQEUDGOPXAVvv8g6G26sltEX+cv9c3GetyL fppJWZmrqPru36/PopNNztvl+M/CG5pNMwqNx/0o0+7ixRg0tRxw9WGwlnQTOu5eM2GQ xPP14GMGWE0xwh9uAg/7Y2QFXbpifEef9e2fHGLf3nKTQs45aV6HR5azM7axFydh64Wj zpDuJnRqeUhspYOxfRwOEksvkaKC7hIXz2SVLHYB3EWWFe6aGkxQM5IvlxCYjczVi4m2 4BTsrsYMNFoB79CxWK2RraYHycNemOgCbqvxa+h9MucJzec8FCb3CMpS9LMj3vmll5ll 3j/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787027213; x=1787632013; 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=6hk0+goG2CVie+owgSwZFn8ixOAcSPlM11kHKU9J/60=; b=LGY54RUA+pmHBkAEq0NgH79iTE0hLP5UdMFgyYfs6yuchi7YQ5SJ0kiY8hQG2Mfcp5 A6k4X3kI2a0z1Vnq8F+sMilj5jb3VGCF65dn7G6Bwb/vXfuuEa8B2IMF45rOCGCFzR+6 Nc3iMrZzMUhHr75HDaqkMHng8SNpwWBZAYHttLA9XpSHAHysfMcq7OQUWFBmaUa7Ufxi x8LzHwkAHyvecQo45d/pX1E9TfGj8VwP9YuE/HUEWMJODa2EI2gSjGh1wvVDjF0yDNHk ROcXKspFwJeErM6K99Y0BJdTp5FO5gwiraL8kwwonxml6UC5e/vOt2tbI50gqVo0IDlf a1sQ== X-Forwarded-Encrypted: i=1; AHgh+Rp9rq43kr5Ha3b99IibQOPhejGrJrobHLYf0gPSD5n8/O9vJy08E2x14wmTrtMiR3I/J1fN+uODBQ0F6ss=@vger.kernel.org X-Gm-Message-State: AOJu0YwgHo06zjeS94LNTXfzLrDFwR0kXpkYTcINlYYBCKxNyS0HDZ8v 3K1Jnmg+jygdfQVM5QZkg/317f3IRM5RL47F5tnXnIWAwKkcmrWkumis X-Gm-Gg: AR+sD10kaDMFsvg+akCPNAb6ydJ8J2QTnfe7/1vf2koudtXmlJ2kczEBPiEqeiDWj74 msUWgpIyKziiQVrwWOtD+spTd2cEXsjygztkOFB843oZEs4Nh8Et6FkpnmgaRSqeO7n0DoGyE8j pRzKwlW54emiE5ueXr+1OstOjVKcn8hc+xvMFNoNf8OcD2b83qJNDRTlPqfxz20VAZoOWEpXhdQ BogFPqWFXxpR7G2Tr6FNOzDrx+j1LCi+nTfLCnR+9GUmrpYEHnQVAovw65Lmvebl/m0lLnHSHTJ ka9yzalXFkzguA6Xt3W6NmJoGuFl2NzTxT4SdAmXCuzpBrBKulpQGDLYTkkR8d/yqhqa9YZcAhO ViWu3v/oUiqlI5gBp+I17hEKEMk2/LVMdQTzkZZ5J1CQ1tEJr/gtRi2RjCwCFrJOE6AHzUPJbu5 9fVDv5WU7vXekvDHcNLSsK73BVFJUaM6MYNA5+IvRsqT00F36CRcg5gasfYH+D8M1b X-Received: by 2002:a17:902:e78e:b0:2c7:f5c6:c4a6 with SMTP id d9443c01a7336-2d5d149bafamr27492395ad.7.1787027212376; Mon, 17 Aug 2026 21:26:52 -0700 (PDT) Received: from jia ([188.253.126.51]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d5bb499e81sm12349535ad.1.2026.08.17.21.26.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 21:26:52 -0700 (PDT) From: Jia Jia To: mst@redhat.com Cc: jasowangio@gmail.com, eperezma@redhat.com, stefanha@redhat.com, sgarzare@redhat.com, weiyj.lk@gmail.com, kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jia Jia Subject: [PATCH v6 2/3] vhost/vsock: discard IOTLB when ACCESS_PLATFORM is cleared Date: Tue, 18 Aug 2026 12:26:12 +0800 Message-Id: <20260818042613.281125-3-physicalmtea@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260818042613.281125-1-physicalmtea@gmail.com> References: <20260818042613.281125-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" Clear the device IOTLB when userspace clears VIRTIO_F_ACCESS_PLATFORM. Otherwise descriptor translation can continue to use mappings installed before the feature change. The common helper invalidates cached vring access and applies the transition even while a backend is attached. The backend remains attached, but userspace must configure the vring addresses for the new address mode after a successful live transition. Fixes: e13a6915a03f ("vhost/vsock: add IOTLB API support") Suggested-by: Michael S. Tsirkin Signed-off-by: Jia Jia --- drivers/vhost/vsock.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 9aaab6bb8061..77a5a6775c86 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -854,6 +854,7 @@ static int vhost_vsock_set_cid(struct vhost_vsock *vsoc= k, u64 guest_cid) static int vhost_vsock_set_features(struct vhost_vsock *vsock, u64 feature= s) { struct vhost_virtqueue *vq; + int ret =3D -EFAULT; int i; =20 if (features & ~VHOST_VSOCK_FEATURES) @@ -865,9 +866,12 @@ static int vhost_vsock_set_features(struct vhost_vsock= *vsock, u64 features) goto err; } =20 - if ((features & (1ULL << VIRTIO_F_ACCESS_PLATFORM))) { - if (vhost_init_device_iotlb(&vsock->dev)) + if (features & (1ULL << VIRTIO_F_ACCESS_PLATFORM)) { + ret =3D vhost_init_device_iotlb(&vsock->dev); + if (ret) goto err; + } else { + vhost_clear_device_iotlb(&vsock->dev); } =20 vsock->seqpacket_allow =3D features & (1ULL << VIRTIO_VSOCK_F_SEQPACKET); @@ -883,7 +887,7 @@ static int vhost_vsock_set_features(struct vhost_vsock = *vsock, u64 features) =20 err: mutex_unlock(&vsock->dev.mutex); - return -EFAULT; + return ret; } =20 static long vhost_vsock_dev_ioctl(struct file *f, unsigned int ioctl, From nobody Mon Sep 28 20:13:18 2026 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 0504F3783C6 for ; Tue, 18 Aug 2026 04:27:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787027227; cv=none; b=kmz0X4S5tlOMM4ZmwiNm0oF22beSEYfuUOytrS5c9hxe0CptjvslaHkPMoeLrCh0l5OfejA4ZFCoj3/LXsGlaxzdpjqHEk6hDWjaz4AOnAOmjoP8gh6CRuV25yTMDGavgn1PHFBC6b9enaaE2J8ATYFF/kkdm5aoqgsDjloT/r8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787027227; c=relaxed/simple; bh=6mXttWXqP7hKPvKeC1m83ALHTC+qzKExe01Jfr/zd+g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=k46nkcUJWUds48unfM1uAXlXr5wu65xoFcfYM5Ml/xQqRoUDjyq9QsVQqAlSH06s2dTSb1DgcDNG1IatkDOwOJuV5AyfEIHvD3StUiQDD3jHhNniDGgWJ6NjyCwgkZ54qM8Gzh2PQF7p1FzWgVe0PrNrFi78QDxTAibGZ13Ovo0= 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=YdYbhCLg; arc=none smtp.client-ip=209.85.216.50 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="YdYbhCLg" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-38e42560ebcso3424136a91.1 for ; Mon, 17 Aug 2026 21:27:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787027225; x=1787632025; 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=/Z6WowRuMM5BuwpectVAQheGXdLd2OFjAur/zQyOeH0=; b=YdYbhCLg09rumWe2qGjk9B4rpUgDUMsMwxzsg45rOBEnRJQAKlUQ5RZl99qzLhVpE3 2cl4cjTpduG52hM7sqSCmWK8Ie7wjYl9eE2P/guDhzgyRvRf63qLq1SrFBWooAmfoUll p2ND1eqmwZ7Y+RWjAnUzZd1yceChp09OtfyfvLt0r7NZ793WWvEPmkHnYWmaZ9zBfVkL KHNYOXGKOjQ9n9zPBhIjGkTsuhKqfsnkpXJLNiXljknOayYUlBMGYCizprU3NGQ4i5v/ uAg4f+ER43sOEav/0B4NCaA3k9S6RCm7h9FsO2ZhXTgBy9HBSFrX4NRF+p9TJyCfO1C4 qkKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787027225; x=1787632025; 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=/Z6WowRuMM5BuwpectVAQheGXdLd2OFjAur/zQyOeH0=; b=lGZzMBNomFVRO/zn7GgudumPxuz0gjCxqqkbElEKGFv+U3x5YrC52q3j+WRrP6N917 M5D6sBZqgbmUlw9kwC6esionXxJN4yQ9e1b+lLMVbQxpq6Z515RaWqK7VAquGAOJ5wYg N2gRGmdu32HyyukRRESpH6CgHLANcM2z4XBxdn6UC0qPTOP5CTasqMU7RFiSDysP1n9d 17AYXfHN9Lh7jV8aRobgplI0R6tlWBOvlmJFQ3RHhbg7/0BF9q/9buHChB+q7g0KiQv3 J0bXxFe2pnDAsaJjy4IMVmrp+Gk0q1nYfE4RmnLIKKdw8LXo3lPUYHaFDIYki9h6Gg51 pwtA== X-Forwarded-Encrypted: i=1; AHgh+Rp/A7FmGPcTD0vCudbLc3Ow569UuhbfgaoEg1QnKGdZ91FHX2YLqoCDtqP40dyEulr3lkdEmcyQz2yXw9c=@vger.kernel.org X-Gm-Message-State: AOJu0YxDf5mWkDBEzMQ2wCwgYIxtHEGZSCAzaNjJHcw1zST47BcNWaPW HXUJMoZQkg//9+yzOk5l9tKuE8jE8hAGwqJM73SAp3d0NxQ4O2Agh2IH X-Gm-Gg: AR+sD13Np9BWnN86N7UrIYdOCKn8ed2dAsCUpaJhfuN6RnM4dUonWj4v2EcCc0lugTk 0JVYsLDtsJa+fVm8fohtnyeqY1tI2QH88HkQ9NMz3C96eknnqJZ5KM99S5MS+MPiaLj1UCP9IVS RJDItqUMtMbx3nnpo559D0sQfdYCG2zGTVFjr2x8q4DxSzW3kmvPLCMdIqzJtu2BcWnlw9mIQGh j76iKWPstN26rZNMSXbnCPc7iPOAOWYUjhL6OZYqklpM4Kvkhl0DqXcAjyf85TI/hqpKFcaFv/w +WvsMdshpDmoajLvJJSFrk8ftG8HR9Mjw9eZXYJFCil3InsARD8RNt569HTUJHsTXLdHMzJnG02 9giqipH9vTDYJJW7cRk8ouge4K/3cLTbmD50KV/PFWdrWWeAdvDLn1+Bi6NuXBc9ipVC5ckN/UK iK4lOzu7LI3GGm2NrExIvPfJvc2lkOvkCpq9sPrS1emj1SbSk9hon4YA== X-Received: by 2002:a17:90b:3d45:b0:37f:fd1f:d30f with SMTP id 98e67ed59e1d1-3933b9157eemr32102204a91.12.1787027224856; Mon, 17 Aug 2026 21:27:04 -0700 (PDT) Received: from jia ([188.253.126.51]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39531fbb41esm7011643a91.10.2026.08.17.21.26.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Aug 2026 21:27:04 -0700 (PDT) From: Jia Jia To: mst@redhat.com Cc: jasowangio@gmail.com, eperezma@redhat.com, stefanha@redhat.com, sgarzare@redhat.com, weiyj.lk@gmail.com, kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Jia Jia Subject: [PATCH v6 3/3] vhost/net: discard IOTLB when ACCESS_PLATFORM is cleared Date: Tue, 18 Aug 2026 12:26:13 +0800 Message-Id: <20260818042613.281125-4-physicalmtea@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260818042613.281125-1-physicalmtea@gmail.com> References: <20260818042613.281125-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" Apply the common device IOTLB teardown when userspace clears VIRTIO_F_ACCESS_PLATFORM. This drops stale translations and avoids rebuilding an existing IOTLB during feature updates that keep ACCESS_PLATFORM enabled. The transition invalidates cached vring access even with an attached backend. The backend remains attached, but userspace must configure the vring addresses for the new address mode after a successful live transition. Fixes: 6b1e6cc7855b ("vhost: new device IOTLB API") Link: https://lore.kernel.org/all/20260726141158.1652386-1-physicalmtea@gma= il.com/ Signed-off-by: Jia Jia --- drivers/vhost/net.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 77b59f49bddb..64671cf77a35 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -1673,6 +1673,7 @@ static long vhost_net_reset_owner(struct vhost_net *n) static int vhost_net_set_features(struct vhost_net *n, const u64 *features) { size_t vhost_hlen, sock_hlen, hdr_len; + int ret =3D -EFAULT; int i; =20 hdr_len =3D virtio_features_test_bit(features, VIRTIO_NET_F_MRG_RXBUF) || @@ -1701,8 +1702,11 @@ static int vhost_net_set_features(struct vhost_net *= n, const u64 *features) goto out_unlock; =20 if (virtio_features_test_bit(features, VIRTIO_F_ACCESS_PLATFORM)) { - if (vhost_init_device_iotlb(&n->dev)) + ret =3D vhost_init_device_iotlb(&n->dev); + if (ret) goto out_unlock; + } else { + vhost_clear_device_iotlb(&n->dev); } =20 for (i =3D 0; i < VHOST_NET_VQ_MAX; ++i) { @@ -1718,7 +1722,7 @@ static int vhost_net_set_features(struct vhost_net *n= , const u64 *features) =20 out_unlock: mutex_unlock(&n->dev.mutex); - return -EFAULT; + return ret; } =20 static long vhost_net_set_owner(struct vhost_net *n)