From nobody Wed Apr 29 02:00:12 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D57ACC433FE for ; Wed, 25 May 2022 11:00:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241949AbiEYLAI (ORCPT ); Wed, 25 May 2022 07:00:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241788AbiEYLAB (ORCPT ); Wed, 25 May 2022 07:00:01 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id BB57B60BAF for ; Wed, 25 May 2022 04:00:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653476399; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ese622/PjwlbZK8BGVrfy4abZ5tLs60liyPxNETnN7U=; b=JRPrUCo3/Ia7YPUdQ4HGYd7ZXbbWhF7EUrnPeRT+32du3IdhC4+VurEJvnO3TB336KKYyl pHygcgOBAWyQcYsRbfM4Sp4fvUaXOpVWFxrXoD9SDy9a3iwT+8tpvy+s5Q3w7pu4hel004 L9Qk7MIo3qv/4lzXTRvx/MkPLPay9Hk= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-54-mAvFaTlVPUyrJ8isaMy3yQ-1; Wed, 25 May 2022 06:59:49 -0400 X-MC-Unique: mAvFaTlVPUyrJ8isaMy3yQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D9C601C0CE63; Wed, 25 May 2022 10:59:47 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.192.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id 57D9D7AD8; Wed, 25 May 2022 10:59:41 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: "Michael S. Tsirkin" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang Cc: Zhu Lingshan , martinh@xilinx.com, Stefano Garzarella , ecree.xilinx@gmail.com, Eli Cohen , Dan Carpenter , Parav Pandit , Wu Zongyong , dinang@xilinx.com, Christophe JAILLET , Xie Yongji , gautam.dawar@amd.com, lulu@redhat.com, martinpo@xilinx.com, pabloc@xilinx.com, Longpeng , Piotr.Uminski@intel.com, tanuj.kamde@amd.com, Si-Wei Liu , habetsm.xilinx@gmail.com, lvivier@redhat.com, Zhang Min , hanand@xilinx.com Subject: [PATCH v3 1/4] vdpa: Add stop operation Date: Wed, 25 May 2022 12:59:19 +0200 Message-Id: <20220525105922.2413991-2-eperezma@redhat.com> In-Reply-To: <20220525105922.2413991-1-eperezma@redhat.com> References: <20220525105922.2413991-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This operation is optional: It it's not implemented, backend feature bit will not be exposed. Signed-off-by: Eugenio P=C3=A9rez --- include/linux/vdpa.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h index 15af802d41c4..ddfebc4e1e01 100644 --- a/include/linux/vdpa.h +++ b/include/linux/vdpa.h @@ -215,6 +215,11 @@ struct vdpa_map_file { * @reset: Reset device * @vdev: vdpa device * Returns integer: success (0) or error (< 0) + * @stop: Stop or resume the device (optional, but it must + * be implemented if require device stop) + * @vdev: vdpa device + * @stop: stop (true), not stop (false) + * Returns integer: success (0) or error (< 0) * @get_config_size: Get the size of the configuration space includes * fields that are conditional on feature bits. * @vdev: vdpa device @@ -316,6 +321,7 @@ struct vdpa_config_ops { u8 (*get_status)(struct vdpa_device *vdev); void (*set_status)(struct vdpa_device *vdev, u8 status); int (*reset)(struct vdpa_device *vdev); + int (*stop)(struct vdpa_device *vdev, bool stop); size_t (*get_config_size)(struct vdpa_device *vdev); void (*get_config)(struct vdpa_device *vdev, unsigned int offset, void *buf, unsigned int len); --=20 2.27.0 From nobody Wed Apr 29 02:00:12 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9E6E9C433F5 for ; Wed, 25 May 2022 11:00:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241788AbiEYLAe (ORCPT ); Wed, 25 May 2022 07:00:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242480AbiEYLAE (ORCPT ); Wed, 25 May 2022 07:00:04 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 729AD5F8C9 for ; Wed, 25 May 2022 04:00:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653476402; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iHJ6PFjviDqPYy85yFDxjKt/WK/68mxqW6ae6Xic7iM=; b=h6VS+u5yDq0udPtoRRsKgUks1Btu7/67sWLB3scA4jdXzOo0/QwAbGV9WJ5qOb4l/l8akA XcSvxQ9hD0x5yZ1UWD8dGLBfsKa3w6hozJVLvj7hSXQMQITuEEke+R/QXXcw46qr58X1EG OKxRs8AeCen1LaBmKWWBAfjqHL3zsRU= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-392-QLLjc54rMoiQyA9K3FxXnA-1; Wed, 25 May 2022 06:59:57 -0400 X-MC-Unique: QLLjc54rMoiQyA9K3FxXnA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 603CE85A5BC; Wed, 25 May 2022 10:59:56 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.192.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id 73FBE7AD8; Wed, 25 May 2022 10:59:48 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: "Michael S. Tsirkin" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang Cc: Zhu Lingshan , martinh@xilinx.com, Stefano Garzarella , ecree.xilinx@gmail.com, Eli Cohen , Dan Carpenter , Parav Pandit , Wu Zongyong , dinang@xilinx.com, Christophe JAILLET , Xie Yongji , gautam.dawar@amd.com, lulu@redhat.com, martinpo@xilinx.com, pabloc@xilinx.com, Longpeng , Piotr.Uminski@intel.com, tanuj.kamde@amd.com, Si-Wei Liu , habetsm.xilinx@gmail.com, lvivier@redhat.com, Zhang Min , hanand@xilinx.com Subject: [PATCH v3 2/4] vhost-vdpa: introduce STOP backend feature bit Date: Wed, 25 May 2022 12:59:20 +0200 Message-Id: <20220525105922.2413991-3-eperezma@redhat.com> In-Reply-To: <20220525105922.2413991-1-eperezma@redhat.com> References: <20220525105922.2413991-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Userland knows if it can stop the device or not by checking this feature bit. It's only offered if the vdpa driver backend implements the stop() operation callback, and try to set it if the backend does not offer that callback is an error. Signed-off-by: Eugenio P=C3=A9rez --- drivers/vhost/vdpa.c | 16 +++++++++++++++- include/uapi/linux/vhost_types.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index 1f1d1c425573..32713db5831d 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -347,6 +347,14 @@ static long vhost_vdpa_set_config(struct vhost_vdpa *v, return 0; } =20 +static bool vhost_vdpa_can_stop(const struct vhost_vdpa *v) +{ + struct vdpa_device *vdpa =3D v->vdpa; + const struct vdpa_config_ops *ops =3D vdpa->config; + + return ops->stop; +} + static long vhost_vdpa_get_features(struct vhost_vdpa *v, u64 __user *feat= urep) { struct vdpa_device *vdpa =3D v->vdpa; @@ -575,7 +583,11 @@ static long vhost_vdpa_unlocked_ioctl(struct file *fil= ep, if (cmd =3D=3D VHOST_SET_BACKEND_FEATURES) { if (copy_from_user(&features, featurep, sizeof(features))) return -EFAULT; - if (features & ~VHOST_VDPA_BACKEND_FEATURES) + if (features & ~(VHOST_VDPA_BACKEND_FEATURES | + BIT_ULL(VHOST_BACKEND_F_STOP))) + return -EOPNOTSUPP; + if ((features & BIT_ULL(VHOST_BACKEND_F_STOP)) && + !vhost_vdpa_can_stop(v)) return -EOPNOTSUPP; vhost_set_backend_features(&v->vdev, features); return 0; @@ -624,6 +636,8 @@ static long vhost_vdpa_unlocked_ioctl(struct file *file= p, break; case VHOST_GET_BACKEND_FEATURES: features =3D VHOST_VDPA_BACKEND_FEATURES; + if (vhost_vdpa_can_stop(v)) + features |=3D BIT_ULL(VHOST_BACKEND_F_STOP); if (copy_to_user(featurep, &features, sizeof(features))) r =3D -EFAULT; break; diff --git a/include/uapi/linux/vhost_types.h b/include/uapi/linux/vhost_ty= pes.h index 634cee485abb..2758e665791b 100644 --- a/include/uapi/linux/vhost_types.h +++ b/include/uapi/linux/vhost_types.h @@ -161,5 +161,7 @@ struct vhost_vdpa_iova_range { * message */ #define VHOST_BACKEND_F_IOTLB_ASID 0x3 +/* Stop device from processing virtqueue buffers */ +#define VHOST_BACKEND_F_STOP 0x4 =20 #endif --=20 2.27.0 From nobody Wed Apr 29 02:00:12 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3F0F5C433F5 for ; Wed, 25 May 2022 11:00:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233834AbiEYLAU (ORCPT ); Wed, 25 May 2022 07:00:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241788AbiEYLAL (ORCPT ); Wed, 25 May 2022 07:00:11 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2F9E37037E for ; Wed, 25 May 2022 04:00:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653476408; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NlxBW7wk8695Knmv4EkJy0sRMvfqe1PLsU+Qmw4ofPU=; b=L5z1iWSZ3+Ji1rkGh1407i6DwMdusVMbdSTibVWn0GnPUG0LMl8g6jQs5OyiDGU5k7gnwl e88iCdV26YkBL+WLSCpKRw8BZsxVRVRhoybq9ki2Xlrz5wrHxMUlrw6swIYv99hMNKQDcE s5qn6+8xB3XPZ3xjU2UMg/FVSBhJSLo= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-8-k3rwf3ytO6ebUOz1zbXP5Q-1; Wed, 25 May 2022 07:00:06 -0400 X-MC-Unique: k3rwf3ytO6ebUOz1zbXP5Q-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C59EC29AB3EB; Wed, 25 May 2022 11:00:04 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.192.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id BE2A17AD8; Wed, 25 May 2022 10:59:56 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: "Michael S. Tsirkin" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang Cc: Zhu Lingshan , martinh@xilinx.com, Stefano Garzarella , ecree.xilinx@gmail.com, Eli Cohen , Dan Carpenter , Parav Pandit , Wu Zongyong , dinang@xilinx.com, Christophe JAILLET , Xie Yongji , gautam.dawar@amd.com, lulu@redhat.com, martinpo@xilinx.com, pabloc@xilinx.com, Longpeng , Piotr.Uminski@intel.com, tanuj.kamde@amd.com, Si-Wei Liu , habetsm.xilinx@gmail.com, lvivier@redhat.com, Zhang Min , hanand@xilinx.com Subject: [PATCH v3 3/4] vhost-vdpa: uAPI to stop the device Date: Wed, 25 May 2022 12:59:21 +0200 Message-Id: <20220525105922.2413991-4-eperezma@redhat.com> In-Reply-To: <20220525105922.2413991-1-eperezma@redhat.com> References: <20220525105922.2413991-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The ioctl adds support for stop the device from userspace. Signed-off-by: Eugenio P=C3=A9rez Reported-by: kernel test robot --- drivers/vhost/vdpa.c | 18 ++++++++++++++++++ include/uapi/linux/vhost.h | 14 ++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index 32713db5831d..a5d33bad92f9 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -478,6 +478,21 @@ static long vhost_vdpa_get_vqs_count(struct vhost_vdpa= *v, u32 __user *argp) return 0; } =20 +static long vhost_vdpa_stop(struct vhost_vdpa *v, u32 __user *argp) +{ + struct vdpa_device *vdpa =3D v->vdpa; + const struct vdpa_config_ops *ops =3D vdpa->config; + int stop; + + if (!ops->stop) + return -EOPNOTSUPP; + + if (copy_from_user(&stop, argp, sizeof(stop))) + return -EFAULT; + + return ops->stop(vdpa, stop); +} + static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd, void __user *argp) { @@ -650,6 +665,9 @@ static long vhost_vdpa_unlocked_ioctl(struct file *file= p, case VHOST_VDPA_GET_VQS_COUNT: r =3D vhost_vdpa_get_vqs_count(v, argp); break; + case VHOST_STOP: + r =3D vhost_vdpa_stop(v, argp); + break; default: r =3D vhost_dev_ioctl(&v->vdev, cmd, argp); if (r =3D=3D -ENOIOCTLCMD) diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h index cab645d4a645..c7e47b29bf61 100644 --- a/include/uapi/linux/vhost.h +++ b/include/uapi/linux/vhost.h @@ -171,4 +171,18 @@ #define VHOST_VDPA_SET_GROUP_ASID _IOW(VHOST_VIRTIO, 0x7C, \ struct vhost_vring_state) =20 +/* Stop or resume a device so it does not process virtqueue requests anymo= re + * + * After the return of ioctl with stop !=3D 0, the device must finish any + * pending operations like in flight requests. It must also preserve all + * the necessary state (the virtqueue vring base plus the possible device + * specific states) that is required for restoring in the future. The + * device must not change its configuration after that point. + * + * After the return of ioctl with stop =3D=3D 0, the device can continue + * processing buffers as long as typical conditions are met (vq is enabled, + * DRIVER_OK status bit is enabled, etc). + */ +#define VHOST_VDPA_STOP _IOW(VHOST_VIRTIO, 0x7D, int) + #endif --=20 2.27.0 From nobody Wed Apr 29 02:00:12 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13763C433EF for ; Wed, 25 May 2022 11:00:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237079AbiEYLAj (ORCPT ); Wed, 25 May 2022 07:00:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242633AbiEYLAc (ORCPT ); Wed, 25 May 2022 07:00:32 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2C9B875221 for ; Wed, 25 May 2022 04:00:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653476421; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ovY2VffbNgFSVd4EdA9lKw3OU/gUQCdeGqQ5LnkLao8=; b=G8Uz2pzVQ7WLjQYjdOZUrfw5Kt1bR8EcZE9URxeciCqk8L12Bs1YPw5Rkt4ys5MNDoxBTV I004hYZ/eOHvbj792H9YyXuoBVF0AcXnU7isiGhyzJcejqXnGIlnaCC8Mb2l0qabcps9zs 0qheGu1aXQeKz0yo2vi/++0QSCRuk9Q= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-225-vIufvyjGMG2OnI2MXWAsig-1; Wed, 25 May 2022 07:00:12 -0400 X-MC-Unique: vIufvyjGMG2OnI2MXWAsig-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5DD04100F84A; Wed, 25 May 2022 11:00:11 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.192.180]) by smtp.corp.redhat.com (Postfix) with ESMTP id E820E1730C; Wed, 25 May 2022 11:00:04 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: "Michael S. Tsirkin" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang Cc: Zhu Lingshan , martinh@xilinx.com, Stefano Garzarella , ecree.xilinx@gmail.com, Eli Cohen , Dan Carpenter , Parav Pandit , Wu Zongyong , dinang@xilinx.com, Christophe JAILLET , Xie Yongji , gautam.dawar@amd.com, lulu@redhat.com, martinpo@xilinx.com, pabloc@xilinx.com, Longpeng , Piotr.Uminski@intel.com, tanuj.kamde@amd.com, Si-Wei Liu , habetsm.xilinx@gmail.com, lvivier@redhat.com, Zhang Min , hanand@xilinx.com Subject: [PATCH v3 4/4] vdpa_sim: Implement stop vdpa op Date: Wed, 25 May 2022 12:59:22 +0200 Message-Id: <20220525105922.2413991-5-eperezma@redhat.com> In-Reply-To: <20220525105922.2413991-1-eperezma@redhat.com> References: <20220525105922.2413991-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Implement stop operation for vdpa_sim devices, so vhost-vdpa will offer that backend feature and userspace can effectively stop the device. This is a must before get virtqueue indexes (base) for live migration, since the device could modify them after userland gets them. There are individual ways to perform that action for some devices (VHOST_NET_SET_BACKEND, VHOST_VSOCK_SET_RUNNING, ...) but there was no way to perform it for any vhost device (and, in particular, vhost-vdpa). Signed-off-by: Eugenio P=C3=A9rez --- drivers/vdpa/vdpa_sim/vdpa_sim.c | 21 +++++++++++++++++++++ drivers/vdpa/vdpa_sim/vdpa_sim.h | 1 + drivers/vdpa/vdpa_sim/vdpa_sim_blk.c | 3 +++ drivers/vdpa/vdpa_sim/vdpa_sim_net.c | 3 +++ 4 files changed, 28 insertions(+) diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_= sim.c index 50d721072beb..0515cf314bed 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -107,6 +107,7 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim) for (i =3D 0; i < vdpasim->dev_attr.nas; i++) vhost_iotlb_reset(&vdpasim->iommu[i]); =20 + vdpasim->running =3D true; spin_unlock(&vdpasim->iommu_lock); =20 vdpasim->features =3D 0; @@ -505,6 +506,24 @@ static int vdpasim_reset(struct vdpa_device *vdpa) return 0; } =20 +static int vdpasim_stop(struct vdpa_device *vdpa, bool stop) +{ + struct vdpasim *vdpasim =3D vdpa_to_sim(vdpa); + int i; + + spin_lock(&vdpasim->lock); + vdpasim->running =3D !stop; + if (vdpasim->running) { + /* Check for missed buffers */ + for (i =3D 0; i < vdpasim->dev_attr.nvqs; ++i) + vdpasim_kick_vq(vdpa, i); + + } + spin_unlock(&vdpasim->lock); + + return 0; +} + static size_t vdpasim_get_config_size(struct vdpa_device *vdpa) { struct vdpasim *vdpasim =3D vdpa_to_sim(vdpa); @@ -694,6 +713,7 @@ static const struct vdpa_config_ops vdpasim_config_ops = =3D { .get_status =3D vdpasim_get_status, .set_status =3D vdpasim_set_status, .reset =3D vdpasim_reset, + .stop =3D vdpasim_stop, .get_config_size =3D vdpasim_get_config_size, .get_config =3D vdpasim_get_config, .set_config =3D vdpasim_set_config, @@ -726,6 +746,7 @@ static const struct vdpa_config_ops vdpasim_batch_confi= g_ops =3D { .get_status =3D vdpasim_get_status, .set_status =3D vdpasim_set_status, .reset =3D vdpasim_reset, + .stop =3D vdpasim_stop, .get_config_size =3D vdpasim_get_config_size, .get_config =3D vdpasim_get_config, .set_config =3D vdpasim_set_config, diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.h b/drivers/vdpa/vdpa_sim/vdpa_= sim.h index 622782e92239..061986f30911 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.h +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.h @@ -66,6 +66,7 @@ struct vdpasim { u32 generation; u64 features; u32 groups; + bool running; /* spinlock to synchronize iommu table */ spinlock_t iommu_lock; }; diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c b/drivers/vdpa/vdpa_sim/v= dpa_sim_blk.c index 42d401d43911..bcdb1982c378 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c @@ -204,6 +204,9 @@ static void vdpasim_blk_work(struct work_struct *work) if (!(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK)) goto out; =20 + if (!vdpasim->running) + goto out; + for (i =3D 0; i < VDPASIM_BLK_VQ_NUM; i++) { struct vdpasim_virtqueue *vq =3D &vdpasim->vqs[i]; =20 diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c b/drivers/vdpa/vdpa_sim/v= dpa_sim_net.c index 5125976a4df8..886449e88502 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c @@ -154,6 +154,9 @@ static void vdpasim_net_work(struct work_struct *work) =20 spin_lock(&vdpasim->lock); =20 + if (!vdpasim->running) + goto out; + if (!(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK)) goto out; =20 --=20 2.27.0