From nobody Wed Dec 17 21:52:17 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1572317046; cv=none; d=zoho.com; s=zohoarc; b=jEr1DxfCTUBmWpc/WjngwdofN7QqKv42p1OC7RKz/UoxhBy/3EYy/dlwcjzpQDKPiHwiYknnrXapoWo4+TzrRrQnCjydwBY0/XxyU276CU0/jjGaumy/uF/LRWX/CxR14+G0glFblcekpd/W3z2RcrOADoZRJRtjMCazHPHLnMc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572317046; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=Fuw48XRF32YYLQXUaTJftLwF7yl/U7ecUZNqNcY/RpI=; b=DIARiwBf7Y0dHs8pQmgEKXWlSzJT2Ld/w+rX7efMnFCCuHsrT6ZHv/1MwvM9kOBDA3Zgqh/Tth7jL2dkhdIIordO98/j0s4yhP9aSSwRx1ea+ZipLDE0VVdly+2DibUmFOidtBseArb9xe59DwXzGGKlIsw2HdQL4KIlma1iJ0c= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572317046558311.53685200573113; Mon, 28 Oct 2019 19:44:06 -0700 (PDT) Received: from localhost ([::1]:48922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iPHUK-0002j3-BL for importer@patchew.org; Mon, 28 Oct 2019 22:44:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54396) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iPHPV-0004jN-1E for qemu-devel@nongnu.org; Mon, 28 Oct 2019 22:39:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iPHOR-0002b5-OX for qemu-devel@nongnu.org; Mon, 28 Oct 2019 22:38:00 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:20105 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iPHOR-0002aj-Ky for qemu-devel@nongnu.org; Mon, 28 Oct 2019 22:37:59 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-174-rYpRP4R3M--UerTbk9ECYg-1; Mon, 28 Oct 2019 22:37:55 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4AB158017CC; Tue, 29 Oct 2019 02:37:54 +0000 (UTC) Received: from jason-ThinkPad-T430s.redhat.com (ovpn-12-230.pek2.redhat.com [10.72.12.230]) by smtp.corp.redhat.com (Postfix) with ESMTP id E852A19C77; Tue, 29 Oct 2019 02:37:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572316679; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Fuw48XRF32YYLQXUaTJftLwF7yl/U7ecUZNqNcY/RpI=; b=Q/z4+kRRfICUiTNeQchvQE+EUokr2x3oeU/KBOT4skuHFPG7PMwuvVTuDQR2zPm6/ToZjk qKPwElkyjKBjpwCFZMK4mgcncwFaGzIj0YREbL1JZ0ZE8/gLMjmAX8ew8/dIg/h1pUOMrn 6DciE29y5mCLg2wDnVbjc+f+REHG9rA= From: Jason Wang To: qemu-devel@nongnu.org, peter.maydell@linaro.org Subject: [PULL V2 2/4] virtio: new post_load hook Date: Tue, 29 Oct 2019 10:37:39 +0800 Message-Id: <1572316661-20043-3-git-send-email-jasowang@redhat.com> In-Reply-To: <1572316661-20043-1-git-send-email-jasowang@redhat.com> References: <1572316661-20043-1-git-send-email-jasowang@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: rYpRP4R3M--UerTbk9ECYg-1 X-Mimecast-Spam-Score: 0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 205.139.110.120 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Wang , Mikhail Sennikovsky , qemu-stable@nongnu.org, "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Michael S. Tsirkin" Post load hook in virtio vmsd is called early while device is processed, and when VirtIODevice core isn't fully initialized. Most device specific code isn't ready to deal with a device in such state, and behaves weirdly. Add a new post_load hook in a device class instead. Devices should use this unless they specifically want to verify the migration stream as it's processed, e.g. for bounds checking. Cc: qemu-stable@nongnu.org Suggested-by: "Dr. David Alan Gilbert" Cc: Mikhail Sennikovsky Signed-off-by: Michael S. Tsirkin Signed-off-by: Jason Wang --- hw/virtio/virtio.c | 7 +++++++ include/hw/virtio/virtio.h | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 527df03..54a46e2 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2291,6 +2291,13 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int= version_id) } rcu_read_unlock(); =20 + if (vdc->post_load) { + ret =3D vdc->post_load(vdev); + if (ret) { + return ret; + } + } + return 0; } =20 diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 48e8d04..ca4f9c0 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -158,6 +158,12 @@ typedef struct VirtioDeviceClass { */ void (*save)(VirtIODevice *vdev, QEMUFile *f); int (*load)(VirtIODevice *vdev, QEMUFile *f, int version_id); + /* Post load hook in vmsd is called early while device is processed, a= nd + * when VirtIODevice isn't fully initialized. Devices should use this= instead, + * unless they specifically want to verify the migration stream as it's + * processed, e.g. for bounds checking. + */ + int (*post_load)(VirtIODevice *vdev); const VMStateDescription *vmsd; } VirtioDeviceClass; =20 --=20 2.5.0