From patchwork Thu Aug 4 18:28:40 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: 12936598 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 lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 87F48C19F2A for ; Thu, 4 Aug 2022 18:52:42 +0000 (UTC) Received: from localhost ([::1]:59036 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oJfxZ-0003q4-KM for qemu-devel@archiver.kernel.org; Thu, 04 Aug 2022 14:52:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34848) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oJfal-00080m-Ks for qemu-devel@nongnu.org; Thu, 04 Aug 2022 14:29:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:33850) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oJfai-00033W-8N for qemu-devel@nongnu.org; Thu, 04 Aug 2022 14:29:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1659637742; 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; bh=uOeXxISgPRj4/OilNqpSUjFUTSzTls5SivQ7X70m2as=; b=eM2Op+/Ql5CV4n6Gu7DkGrBDcnYJSkuY9aDNFYnAIPSMtuDJnmkUKVCdVAQo5Y5dzoJA7y hicVlvSb0I1/SETy2mXh2tJFxj2pA+1AMmv0MVvHQcxQyI+I9ZOj29pqrCsVZjhMlXZ3sH yheW0RAWF26W6hNeiJmNASOgC5uUjTQ= 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-421-0QiCefebN3Op17e3hh825Q-1; Thu, 04 Aug 2022 14:28:59 -0400 X-MC-Unique: 0QiCefebN3Op17e3hh825Q-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8B4CE3C35F07; Thu, 4 Aug 2022 18:28:58 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.192.132]) by smtp.corp.redhat.com (Postfix) with ESMTP id D119F492C3B; Thu, 4 Aug 2022 18:28:54 +0000 (UTC) From: =?utf-8?q?Eugenio_P=C3=A9rez?= To: qemu-devel@nongnu.org Cc: Cindy Lu , Harpreet Singh Anand , "Gonglei (Arei)" , Stefano Garzarella , Parav Pandit , Eric Blake , Gautam Dawar , Markus Armbruster , Paolo Bonzini , Laurent Vivier , "Michael S. Tsirkin" , Jason Wang , Stefan Hajnoczi , Liuxiangdong , Eli Cohen , Cornelia Huck , Zhu Lingshan Subject: [PATCH v7 00/12] NIC vhost-vdpa state restore via Shadow CVQ Date: Thu, 4 Aug 2022 20:28:40 +0200 Message-Id: <20220804182852.703398-1-eperezma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 Received-SPF: pass client-ip=170.10.129.124; envelope-from=eperezma@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" CVQ of net vhost-vdpa devices can be intercepted since the work of [1]. The virtio-net device model is updated. The migration was blocked because although the state can be megrated between VMM it was not possible to restore on the destination NIC. This series add support for SVQ to inject external messages without the guest's knowledge, so before the guest is resumed all the guest visible state is restored. It is done using standard CVQ messages, so the vhost-vdpa device does not need to learn how to restore it: As long as they have the feature, they know how to handle it. This series needs fix [1] to be applied to achieve full live migration. Thanks! [1] https://lists.nongnu.org/archive/html/qemu-devel/2022-08/msg00325.html v7: - Remove accidental double free. v6: - Move map and unmap of the buffers to the start and stop of the device. This implies more callbacks on NetClientInfo, but simplifies the SVQ CVQ code. - Not assume that in buffer is sizeof(virtio_net_ctrl_ack) in vhost_vdpa_net_cvq_add - Reduce the number of changes from previous versions - Delete unused memory barrier v5: - Rename s/start/load/ - Use independent NetClientInfo to only add load callback on cvq. - Accept out sg instead of dev_buffers[] at vhost_vdpa_net_cvq_map_elem - Use only out size instead of iovec dev_buffers to know if the descriptor is effectively available, allowing to delete artificial !NULL VirtQueueElement on vhost_svq_add call. v4: - Actually use NetClientInfo callback. v3: - Route vhost-vdpa start code through NetClientInfo callback. - Delete extra vhost_net_stop_one() call. v2: - Fix SIGSEGV dereferencing SVQ when not in svq mode v1 from RFC: - Do not reorder DRIVER_OK & enable patches. - Delete leftovers Eugenio PĂ©rez (12): vhost: stop transfer elem ownership in vhost_handle_guest_kick vhost: use SVQ element ndescs instead of opaque data for desc validation vhost: Delete useless read memory barrier vhost: Do not depend on !NULL VirtQueueElement on vhost_svq_flush vhost_net: Add NetClientInfo prepare callback vhost_net: Add NetClientInfo stop callback vdpa: add net_vhost_vdpa_cvq_info NetClientInfo vdpa: Move command buffers map to start of net device vdpa: Extract vhost_vdpa_net_cvq_add from vhost_vdpa_net_handle_ctrl_avail vhost_net: add NetClientState->load() callback vdpa: Add virtio-net mac address via CVQ at start vdpa: Delete CVQ migration blocker include/hw/virtio/vhost-vdpa.h | 1 - include/net/net.h | 6 + hw/net/vhost_net.c | 17 +++ hw/virtio/vhost-shadow-virtqueue.c | 27 ++-- hw/virtio/vhost-vdpa.c | 14 -- net/vhost-vdpa.c | 227 ++++++++++++++++++----------- 6 files changed, 180 insertions(+), 112 deletions(-)