From nobody Wed Apr 29 04:35:30 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 AB8EAC433EF for ; Tue, 24 May 2022 17:06:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239839AbiEXRGc (ORCPT ); Tue, 24 May 2022 13:06:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239822AbiEXRG2 (ORCPT ); Tue, 24 May 2022 13:06:28 -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 D9FA472E37 for ; Tue, 24 May 2022 10:06:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653411987; 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=ihvn9/HAsksJ3QOxXBSoYK2PfQsZUt+ul1FWA7+hxFOoVFx57jpB0T2abAf3FbM2sw+0Y8 RBHXBWfFN+jFBopxB8gX/rv+XZVAYt9skuQDQJe9YmMxwvJ+WX0qFQsWbR5C0KjyvDw6KE BDHTzKPtrGQt1KVIRROP6PHl7MPa6bk= 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-140-16yW63O5N3qchf5XfyAvpg-1; Tue, 24 May 2022 13:06:23 -0400 X-MC-Unique: 16yW63O5N3qchf5XfyAvpg-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4E8A83C1E328; Tue, 24 May 2022 17:06:22 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.195.73]) by smtp.corp.redhat.com (Postfix) with ESMTP id C19F22026D64; Tue, 24 May 2022 17:06:17 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang , "Michael S. Tsirkin" , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Parav Pandit , Zhang Min , hanand@xilinx.com, Zhu Lingshan , tanuj.kamde@amd.com, gautam.dawar@amd.com, Christophe JAILLET , Xie Yongji , dinang@xilinx.com, habetsm.xilinx@gmail.com, Eli Cohen , pabloc@xilinx.com, lvivier@redhat.com, Dan Carpenter , lulu@redhat.com, Wu Zongyong , eperezma@redhat.com, ecree.xilinx@gmail.com, Piotr.Uminski@intel.com, martinpo@xilinx.com, Stefano Garzarella , Si-Wei Liu , Longpeng , martinh@xilinx.com Subject: [PATCH v2 1/4] vdpa: Add stop operation Date: Tue, 24 May 2022 19:06:07 +0200 Message-Id: <20220524170610.2255608-2-eperezma@redhat.com> In-Reply-To: <20220524170610.2255608-1-eperezma@redhat.com> References: <20220524170610.2255608-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.78 on 10.11.54.4 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 04:35:30 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 AA3BFC433EF for ; Tue, 24 May 2022 17:06:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239836AbiEXRGp (ORCPT ); Tue, 24 May 2022 13:06:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237636AbiEXRGg (ORCPT ); Tue, 24 May 2022 13:06:36 -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 CFBFE7E1FD for ; Tue, 24 May 2022 10:06:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653411993; 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=VEdcC4zNghKVe5NrRJllLsq45Pt1eOBL8uN1M7+EbK46iDQ47e6x+G+AL8QMnCRpA/MjT7 X+aC0OggGk1ThOVh/YM67hUbtqfQuGYQ3jUyOgdXlwSBUCtFZNtG5eNHF1kV1E6/MvLehX QDDeyIyngO68rDHyLaMb3Yh9sdXES0s= 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-595-4c-QiSYPMp6N3M1c3Boy5g-1; Tue, 24 May 2022 13:06:28 -0400 X-MC-Unique: 4c-QiSYPMp6N3M1c3Boy5g-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 18366299E776; Tue, 24 May 2022 17:06:27 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.195.73]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9204A2026D64; Tue, 24 May 2022 17:06:22 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang , "Michael S. Tsirkin" , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Parav Pandit , Zhang Min , hanand@xilinx.com, Zhu Lingshan , tanuj.kamde@amd.com, gautam.dawar@amd.com, Christophe JAILLET , Xie Yongji , dinang@xilinx.com, habetsm.xilinx@gmail.com, Eli Cohen , pabloc@xilinx.com, lvivier@redhat.com, Dan Carpenter , lulu@redhat.com, Wu Zongyong , eperezma@redhat.com, ecree.xilinx@gmail.com, Piotr.Uminski@intel.com, martinpo@xilinx.com, Stefano Garzarella , Si-Wei Liu , Longpeng , martinh@xilinx.com Subject: [PATCH v2 2/4] vhost-vdpa: introduce STOP backend feature bit Date: Tue, 24 May 2022 19:06:08 +0200 Message-Id: <20220524170610.2255608-3-eperezma@redhat.com> In-Reply-To: <20220524170610.2255608-1-eperezma@redhat.com> References: <20220524170610.2255608-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.78 on 10.11.54.4 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 04:35:30 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 8F623C433EF for ; Tue, 24 May 2022 17:07:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239888AbiEXRH5 (ORCPT ); Tue, 24 May 2022 13:07:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239356AbiEXRHx (ORCPT ); Tue, 24 May 2022 13:07:53 -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 17F28814AA for ; Tue, 24 May 2022 10:07:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653412071; 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=CzDQq+5tNIDPG5pjMCRbvChUv+yaE78gz7PsLUNC710=; b=TsuMNAz2+c0jRw06EQ3wirirQ7GY8VAKm5LUiL9l9Yr6kFyXbsX/cXzUd1qbaJ65/LshDx Q3VtWozJrXO8tzGOmDcRDos1HGbv91Eo31BUuHtAvpuj/R2hi01kWaH/JcFUcBeU7pXXtl mOvyi163hrPcJSZ8GiPIc+Jk/R4XfvU= 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-591-vFnskUC7OHytc2AmGWfdtw-1; Tue, 24 May 2022 13:06:33 -0400 X-MC-Unique: vFnskUC7OHytc2AmGWfdtw-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C5F3F100BAB3; Tue, 24 May 2022 17:06:31 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.195.73]) by smtp.corp.redhat.com (Postfix) with ESMTP id 58EAF2026D64; Tue, 24 May 2022 17:06:27 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang , "Michael S. Tsirkin" , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Parav Pandit , Zhang Min , hanand@xilinx.com, Zhu Lingshan , tanuj.kamde@amd.com, gautam.dawar@amd.com, Christophe JAILLET , Xie Yongji , dinang@xilinx.com, habetsm.xilinx@gmail.com, Eli Cohen , pabloc@xilinx.com, lvivier@redhat.com, Dan Carpenter , lulu@redhat.com, Wu Zongyong , eperezma@redhat.com, ecree.xilinx@gmail.com, Piotr.Uminski@intel.com, martinpo@xilinx.com, Stefano Garzarella , Si-Wei Liu , Longpeng , martinh@xilinx.com Subject: [PATCH v2 3/4] vhost-vdpa: uAPI to stop the device Date: Tue, 24 May 2022 19:06:09 +0200 Message-Id: <20220524170610.2255608-4-eperezma@redhat.com> In-Reply-To: <20220524170610.2255608-1-eperezma@redhat.com> References: <20220524170610.2255608-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.78 on 10.11.54.4 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 --- drivers/vhost/vdpa.c | 18 ++++++++++++++++++ include/uapi/linux/vhost.h | 3 +++ 2 files changed, 21 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..e7526968ab0c 100644 --- a/include/uapi/linux/vhost.h +++ b/include/uapi/linux/vhost.h @@ -171,4 +171,7 @@ #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 */ +#define VHOST_STOP _IOW(VHOST_VIRTIO, 0x7D, int) + #endif --=20 2.27.0 From nobody Wed Apr 29 04:35:30 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 41BDEC433FE for ; Tue, 24 May 2022 17:07:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239858AbiEXRG6 (ORCPT ); Tue, 24 May 2022 13:06:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239883AbiEXRGy (ORCPT ); Tue, 24 May 2022 13:06:54 -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 A2E8A8199B for ; Tue, 24 May 2022 10:06:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653412006; 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=NRVyuXQ2anZsMTN0V2Kp61WOvAM/LWYlpRTqMTKf390=; b=iOg2BOjLLNPpZOFMYo7dFoUNRnTOsun9EvJ7OyFhBc5rr+1lDPvUl/tdw7U9A/XInJzS5Q bh1PjnIQa1NNKopJUyjDrbAHS/RlYGNBIbKg3z41+EzY0YEtDi//faksPsf/lnnP/rg/PP 9RQM6LimSKWCZHPiDLMDZKG0zPW9WfY= 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-590-hHqKpHFUOOKaGi6FSPlasQ-1; Tue, 24 May 2022 13:06:42 -0400 X-MC-Unique: hHqKpHFUOOKaGi6FSPlasQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7F5121C08973; Tue, 24 May 2022 17:06:36 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.195.73]) by smtp.corp.redhat.com (Postfix) with ESMTP id 12CC92026D64; Tue, 24 May 2022 17:06:31 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, Jason Wang , "Michael S. Tsirkin" , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Parav Pandit , Zhang Min , hanand@xilinx.com, Zhu Lingshan , tanuj.kamde@amd.com, gautam.dawar@amd.com, Christophe JAILLET , Xie Yongji , dinang@xilinx.com, habetsm.xilinx@gmail.com, Eli Cohen , pabloc@xilinx.com, lvivier@redhat.com, Dan Carpenter , lulu@redhat.com, Wu Zongyong , eperezma@redhat.com, ecree.xilinx@gmail.com, Piotr.Uminski@intel.com, martinpo@xilinx.com, Stefano Garzarella , Si-Wei Liu , Longpeng , martinh@xilinx.com Subject: [PATCH v2 4/4] vdpa_sim: Implement stop vdpa op Date: Tue, 24 May 2022 19:06:10 +0200 Message-Id: <20220524170610.2255608-5-eperezma@redhat.com> In-Reply-To: <20220524170610.2255608-1-eperezma@redhat.com> References: <20220524170610.2255608-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.78 on 10.11.54.4 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). 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). In the future, we will provide features similar to VHOST_USER_GET_INFLIGHT_FD so the device can save pending operations. 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