From patchwork Fri Aug 19 17:00:36 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: 1668257 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=dDtbURtX; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4M8SxH5fv4z1ygl for ; Sat, 20 Aug 2022 03:12:35 +1000 (AEST) Received: from localhost ([::1]:43618 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oP5Xt-0006W1-Ka for incoming@patchwork.ozlabs.org; Fri, 19 Aug 2022 13:12:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51444) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oP5Mm-0007zO-Up for qemu-devel@nongnu.org; Fri, 19 Aug 2022 13:01:04 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:60402) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oP5Mj-0001t6-B3 for qemu-devel@nongnu.org; Fri, 19 Aug 2022 13:01:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1660928460; 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=X7YbTEtTHWKc/9fTMWab1zakq2acdNG3dR4G+0Ydpco=; b=dDtbURtXDPXKaJjGNXLiDhXLYYC7uP8IJvgP/DT/YXTartDNp8lYKjYRPAwqITIRc1ZRR7 AJcqqtfrqjm8NRBQryajVK1958tZpQm3NjB341o3y43npug4c7JDRM3oT0RW/al62Gw7/d 0ENfh5JLv5oG0v+ylw+qbNE8cjHEHw4= 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-280-IuSMhEoUOoyGm7BkG7AqtQ-1; Fri, 19 Aug 2022 13:00:57 -0400 X-MC-Unique: IuSMhEoUOoyGm7BkG7AqtQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id DD6558039A8; Fri, 19 Aug 2022 17:00:56 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.194.7]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8303740D282E; Fri, 19 Aug 2022 17:00:50 +0000 (UTC) From: =?utf-8?q?Eugenio_P=C3=A9rez?= To: qemu-devel@nongnu.org Cc: Harpreet Singh Anand , Laurent Vivier , Cornelia Huck , Jason Wang , "Michael S. Tsirkin" , Markus Armbruster , Gautam Dawar , Stefan Hajnoczi , "Gonglei (Arei)" , Eli Cohen , Zhu Lingshan , Stefano Garzarella , Eric Blake , Liuxiangdong , Cindy Lu , Parav Pandit , Paolo Bonzini Subject: [PATCH v9 00/12] NIC vhost-vdpa state restore via Shadow CVQ Date: Fri, 19 Aug 2022 19:00:36 +0200 Message-Id: <20220819170048.3593487-1-eperezma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 Received-SPF: pass client-ip=170.10.133.124; envelope-from=eperezma@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 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_NONE=-0.0001, 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" CVQ of net vhost-vdpa devices can be intercepted since the addition of x-svq. 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. Depending on the device, this series may need fixes with message id [1] to achieve full live migration. [1] <20220819165357.3591965-1-eperezma@redhat.com> v9: - Use guest acked features instead of device's. - Minors: fix typos and patch messages, constify vhost_vdpa and VirtIONet vars, delete unneeded increment of cursor. v8: - Rename NetClientInfo load to start, so is symmetrical with stop() - Delete copy of device's in buffer at vhost_vdpa_net_load 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 start 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 | 15 -- net/vhost-vdpa.c | 224 ++++++++++++++++++----------- 6 files changed, 177 insertions(+), 113 deletions(-)