From patchwork Tue May 24 17:06:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eugenio Perez Martin X-Patchwork-Id: 12860381 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 EB2C5C433F5 for ; Tue, 24 May 2022 17:06:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239841AbiEXRGc (ORCPT ); Tue, 24 May 2022 13:06:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239827AbiEXRGa (ORCPT ); Tue, 24 May 2022 13:06:30 -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 D34A36EC52 for ; Tue, 24 May 2022 10:06:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653411989; 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=R+BaXGgSRtdRGuAmV+JpDdZM/OfC/ZEYgDiKk4DEf9LHOcplnVaFQ7eSDEENzYg56+MuH5 630IdP2q/FvCTSV8YI0jdCvdK4Fm6A/bekiqckSYVEmKDhtPI9yVRNAHQd/eaiKlOhGzJE vqqsT01uG1ImvufP57CvKcXOnmw6DZE= 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_P=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 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This operation is optional: It it's not implemented, backend feature bit will not be exposed. Signed-off-by: Eugenio Pérez --- 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); From patchwork Tue May 24 17:06:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eugenio Perez Martin X-Patchwork-Id: 12860386 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 3A6FAC433F5 for ; Tue, 24 May 2022 17:07:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239896AbiEXRH4 (ORCPT ); Tue, 24 May 2022 13:07:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239910AbiEXRHv (ORCPT ); Tue, 24 May 2022 13:07:51 -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 010F185EDF for ; Tue, 24 May 2022 10:07:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653412067; 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=fHlnocUFoLF0SB1Lqv1uJSebO6+lu1MP75XMTVoM/zAMizU9Ovb6GMS06njIIVWoQdovWN kBlc5HMNFmlGjqE7CBh6Ubos01Wi26JzIcs+AEs983Y63W+ByFv8cD51hd3/RlO3oqGoC7 Bttqk4c+flAysytpNUMZORJVSz32vJQ= 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_P=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 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Precedence: bulk List-ID: X-Mailing-List: kvm@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érez --- 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; } +static bool vhost_vdpa_can_stop(const struct vhost_vdpa *v) +{ + struct vdpa_device *vdpa = v->vdpa; + const struct vdpa_config_ops *ops = vdpa->config; + + return ops->stop; +} + static long vhost_vdpa_get_features(struct vhost_vdpa *v, u64 __user *featurep) { struct vdpa_device *vdpa = v->vdpa; @@ -575,7 +583,11 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep, if (cmd == 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 *filep, break; case VHOST_GET_BACKEND_FEATURES: features = VHOST_VDPA_BACKEND_FEATURES; + if (vhost_vdpa_can_stop(v)) + features |= BIT_ULL(VHOST_BACKEND_F_STOP); if (copy_to_user(featurep, &features, sizeof(features))) r = -EFAULT; break; diff --git a/include/uapi/linux/vhost_types.h b/include/uapi/linux/vhost_types.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 #endif From patchwork Tue May 24 17:06:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eugenio Perez Martin X-Patchwork-Id: 12860382 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 42E66C433EF for ; Tue, 24 May 2022 17:06:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237636AbiEXRGz (ORCPT ); Tue, 24 May 2022 13:06:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239858AbiEXRGx (ORCPT ); Tue, 24 May 2022 13:06: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 783E57E1EC for ; Tue, 24 May 2022 10:06:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653412000; 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=L2ZMmOtdy/XaZYxgOKvkBCAqEqqfB/ZlOWrebvIgfiWAQP4EpJTPpHVmsgKgEtSby5baeX KBA7QkLLwldLdSnmPSpoYq3x9eSwQokueE2GWMpdtGvIsOL6eVqVYL6ZG3wNi3QhdkmPsJ E+haHjaaYYbVETOPlXnnQXkQHXnWOzU= 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_P=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 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org The ioctl adds support for stop the device from userspace. Signed-off-by: Eugenio Pérez --- 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; } +static long vhost_vdpa_stop(struct vhost_vdpa *v, u32 __user *argp) +{ + struct vdpa_device *vdpa = v->vdpa; + const struct vdpa_config_ops *ops = 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 *filep, case VHOST_VDPA_GET_VQS_COUNT: r = vhost_vdpa_get_vqs_count(v, argp); break; + case VHOST_STOP: + r = vhost_vdpa_stop(v, argp); + break; default: r = vhost_dev_ioctl(&v->vdev, cmd, argp); if (r == -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) +/* Stop or resume a device so it does not process virtqueue requests anymore */ +#define VHOST_STOP _IOW(VHOST_VIRTIO, 0x7D, int) + #endif From patchwork Tue May 24 17:06:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Eugenio Perez Martin X-Patchwork-Id: 12860383 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 7336DC433F5 for ; Tue, 24 May 2022 17:06:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239851AbiEXRG5 (ORCPT ); Tue, 24 May 2022 13:06:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239867AbiEXRGx (ORCPT ); Tue, 24 May 2022 13:06:53 -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 E973E7E1E1 for ; Tue, 24 May 2022 10:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1653412004; 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=JAhTgB3hpZQKVK/vnEzpkQ3ghki1140lRsHNNv9D50twP34Vq+P9/ljksLDKuuY25UGU2l 20dnXKmaFpj9nqVDmhfhYcke9AUtpihTzNsNc16WV7+kazt3POE7Ni5KAfEueu1xRybWOY GGrEFVkfnrGOGc2tBNCtO6tfMYBlpHI= 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_P=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 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 Precedence: bulk List-ID: X-Mailing-List: kvm@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 != 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 == 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érez --- 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 = 0; i < vdpasim->dev_attr.nas; i++) vhost_iotlb_reset(&vdpasim->iommu[i]); + vdpasim->running = true; spin_unlock(&vdpasim->iommu_lock); vdpasim->features = 0; @@ -505,6 +506,24 @@ static int vdpasim_reset(struct vdpa_device *vdpa) return 0; } +static int vdpasim_stop(struct vdpa_device *vdpa, bool stop) +{ + struct vdpasim *vdpasim = vdpa_to_sim(vdpa); + int i; + + spin_lock(&vdpasim->lock); + vdpasim->running = !stop; + if (vdpasim->running) { + /* Check for missed buffers */ + for (i = 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 = vdpa_to_sim(vdpa); @@ -694,6 +713,7 @@ static const struct vdpa_config_ops vdpasim_config_ops = { .get_status = vdpasim_get_status, .set_status = vdpasim_set_status, .reset = vdpasim_reset, + .stop = vdpasim_stop, .get_config_size = vdpasim_get_config_size, .get_config = vdpasim_get_config, .set_config = vdpasim_set_config, @@ -726,6 +746,7 @@ static const struct vdpa_config_ops vdpasim_batch_config_ops = { .get_status = vdpasim_get_status, .set_status = vdpasim_set_status, .reset = vdpasim_reset, + .stop = vdpasim_stop, .get_config_size = vdpasim_get_config_size, .get_config = vdpasim_get_config, .set_config = 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/vdpa_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; + if (!vdpasim->running) + goto out; + for (i = 0; i < VDPASIM_BLK_VQ_NUM; i++) { struct vdpasim_virtqueue *vq = &vdpasim->vqs[i]; diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c b/drivers/vdpa/vdpa_sim/vdpa_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) spin_lock(&vdpasim->lock); + if (!vdpasim->running) + goto out; + if (!(vdpasim->status & VIRTIO_CONFIG_S_DRIVER_OK)) goto out;