From patchwork Tue Apr 25 18:05:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 1773621 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=cIP6yIcF; 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 4Q5VLt0lrDz1yZr for ; Wed, 26 Apr 2023 04:06:46 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1prN36-00030S-Fu; Tue, 25 Apr 2023 14:05:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prN35-00030E-L8 for qemu-devel@nongnu.org; Tue, 25 Apr 2023 14:05:55 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prN33-0005QM-6r for qemu-devel@nongnu.org; Tue, 25 Apr 2023 14:05:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1682445952; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gvKzLqz4F3yaHXWfvdcfuuyAObt3ehw2kidxZA2rkdg=; b=cIP6yIcF2Te38CZR/48fXhHrHYB+z21rOAdSdTTUVE22qf16pmqjgQIR19Omop7K0G5fUN nMlD6c1tqG8fsirL6UPrdNvprgN0ldou6mCnv+lMB7GIAJSlY+YczMr73twFFjGJAvBsa/ 86ExkUugGU945M/ts9XnHxEdrUGWZcA= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-439-pBOCz_nbNCuM9CJpjqBL7g-1; Tue, 25 Apr 2023 14:05:51 -0400 X-MC-Unique: pBOCz_nbNCuM9CJpjqBL7g-1 Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-3ef4f29c9d1so15305371cf.0 for ; Tue, 25 Apr 2023 11:05:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682445949; x=1685037949; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gvKzLqz4F3yaHXWfvdcfuuyAObt3ehw2kidxZA2rkdg=; b=f/FSALvpUM6Bb9tDl6NVk4PkZ8DYTT5bM4hd0geWu4RcsDQcLYisfOr86sSWz9Gjl4 BbouFcaHSiI5+TrdW0o+xa7c3GO6Z3y5gE0CQ/FkeatIQphuarHW4wE9KjiyYfiw7TeL 6x8oCWUwgeWwqHbIzIM2mMoYRZmB0w1jgBFovOHE0JPisYZGn92JMfiDEeWUJN2jYcKP 71EhpM8ObOJC86y0kMHdFVPFP96MDPjrDZUU77qCwbnsOMa3ZHpG9rKfBcYr2X1aEzY8 KUoZ7SQl1Krlug4CT1TTfFUg49XvlxGfSjMFgnFAFXlBgc8YW8SYZSFKill7UBE/T5h+ K7hg== X-Gm-Message-State: AAQBX9fXvB0L0e3hluofzBP6yh8A5LG13oaIAwACBnAPyOXj9NJpva0b hxWZVb/i1qF3Y+KjZ+PQKntsRNL7x5JyfZz8lwGrJ/OvH754FXpz4k44cYJLdDTtxqpYKU973bb NCR9JHA5bm9bfVR5JnMp9kr4qlMPsKAJhYTF7hseUx91rfKa+rhvkezNvwXPpedQU4aJ3Fkgc X-Received: by 2002:a05:622a:86:b0:3e2:be32:cb74 with SMTP id o6-20020a05622a008600b003e2be32cb74mr30314126qtw.3.1682445949129; Tue, 25 Apr 2023 11:05:49 -0700 (PDT) X-Google-Smtp-Source: AKy350aHjfdHmA+VdmF3/DjpWpdYcKAOhQPulrTuR8K/CbIugltcgxMaAUpn+v6DmeqQdVbuWvs8gQ== X-Received: by 2002:a05:622a:86:b0:3e2:be32:cb74 with SMTP id o6-20020a05622a008600b003e2be32cb74mr30314076qtw.3.1682445948667; Tue, 25 Apr 2023 11:05:48 -0700 (PDT) Received: from x1n.redhat.com (bras-base-aurron9127w-grc-40-70-52-229-124.dsl.bell.ca. [70.52.229.124]) by smtp.gmail.com with ESMTPSA id b17-20020a05620a271100b0074e034915d4sm4552297qkp.73.2023.04.25.11.05.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Apr 2023 11:05:47 -0700 (PDT) From: Peter Xu To: qemu-devel@nongnu.org Cc: peterx@redhat.com, Juan Quintela , Leonardo Bras Soares Passos Subject: [PATCH 1/2] migration/vmstate-dump: Dump array size too as "num" Date: Tue, 25 Apr 2023 14:05:43 -0400 Message-Id: <20230425180544.1815888-2-peterx@redhat.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230425180544.1815888-1-peterx@redhat.com> References: <20230425180544.1815888-1-peterx@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.171, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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-bounces+incoming=patchwork.ozlabs.org@nongnu.org For VMS_ARRAY typed vmsd fields, also dump the number of entries in the array in -vmstate-dump. Without such information, vmstate static checker can report false negatives of incompatible vmsd on VMS_ARRAY typed fields, when the src/dst do not have the same type of array defined. It's because in the checker we only check against size of fields within a VMSD field. One example: e1000e used to have a field defined as a boolean array with 5 entries, then removed it and replaced it with UNUSED (in 31e3f318c8b535): - VMSTATE_BOOL_ARRAY(core.eitr_intr_pending, E1000EState, - E1000E_MSIX_VEC_NUM), + VMSTATE_UNUSED(E1000E_MSIX_VEC_NUM), It's a legal replacement but vmstate static checker is not happy with it, because it checks only against the "size" field between the two fields (here one is BOOL_ARRAY, the other is UNUSED): For BOOL_ARRAY: { "field": "core.eitr_intr_pending", "version_id": 0, "field_exists": false, "size": 1 }, For UNUSED: { "field": "unused", "version_id": 0, "field_exists": false, "size": 5 }, It's not the script to blame because there's just not enough information dumped to show the total size of the entry for an array. Add it. Note that this will not break old vmstate checker because the field will just be ignored. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- migration/savevm.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/migration/savevm.c b/migration/savevm.c index 9671211339..550c38f0ef 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -536,6 +536,9 @@ static void dump_vmstate_vmsf(FILE *out_file, const VMStateField *field, field->version_id); fprintf(out_file, "%*s\"field_exists\": %s,\n", indent, "", field->field_exists ? "true" : "false"); + if (field->flags & VMS_ARRAY) { + fprintf(out_file, "%*s\"num\": %d,\n", indent, "", field->num); + } fprintf(out_file, "%*s\"size\": %zu", indent, "", field->size); if (field->vmsd != NULL) { fprintf(out_file, ",\n"); From patchwork Tue Apr 25 18:05:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 1773622 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=dygD8sOP; 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 4Q5VM5130tz1yZr for ; Wed, 26 Apr 2023 04:06:57 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1prN3A-00031H-CU; Tue, 25 Apr 2023 14:06:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prN36-00030T-OY for qemu-devel@nongnu.org; Tue, 25 Apr 2023 14:05:56 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1prN35-0005Qn-9D for qemu-devel@nongnu.org; Tue, 25 Apr 2023 14:05:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1682445954; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kzI3s0+w7AnBCWRapIJORBuHVL45gQrLmySiZRhftEM=; b=dygD8sOPFBeNEJlYhDB30NCcqz7oITyBPAIOM2VjpGwTH78H87cAUqr7X5AA+tfBCwageV BDUstQUq8SaJ14r88iQr3528nuSHusXo3OylqNlYmpGBOgnOTFqtwVs4UXlqLddA3ykQFW Z6FVarr4FTVqioRE+t+WO2MDcb5A5W0= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-265-_zx_RI7XPGa8lZj_D69dfQ-1; Tue, 25 Apr 2023 14:05:52 -0400 X-MC-Unique: _zx_RI7XPGa8lZj_D69dfQ-1 Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-3ef3116d1dcso15673351cf.1 for ; Tue, 25 Apr 2023 11:05:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682445952; x=1685037952; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kzI3s0+w7AnBCWRapIJORBuHVL45gQrLmySiZRhftEM=; b=L/dqi6NLbAQCoYTyk1oE0M4NHIyK12HRdqzinZA22Lx5UCVTKpj+LgTZWRDUbiO/SC Hl84KT4Abb6qvrfPjiYHfkD6q9LATbb80WQLDVn0Y5KhVbEHidsMeQfg3+5fgrvouMzn YkjQtknOByak5HkyUJEnjC769EK8/gQQhyV7D8CP4vDJu4VBKHtwgiIwV3wHCzc90d+7 rjAtJJNF7+viA2lnt9yc/D73WXHI0LRzvCDlOxOelO3uaKvdZYQL+4pIBclJT/4jEFcF Hnge9m76Wk8G/CQIIvJU40sOHXF/tFqdX5wofAUVnDq86ZPIGPRlk15D/JFSFuw/1jd1 zPgg== X-Gm-Message-State: AAQBX9fgvrHx/jWXkDvPJGbFDMjcyNdje6XIEfWd3FFTcaITP7M/4fTP nRR2vB/3rkNkJKTlfx51WqAo8nl87ZbfwfaTw+pJbTtmTzwEFBQBvGb4zECy7zWkguVqBZ/2n9A t0vxJbo6tmlpoTimkQOr4OjrEEZ/rNCn4+BUAsBla4VDyK1cs2Wz26FNqybQG5msto2/BMbGV X-Received: by 2002:ac8:5c49:0:b0:3ef:3912:ab3e with SMTP id j9-20020ac85c49000000b003ef3912ab3emr30965710qtj.2.1682445951768; Tue, 25 Apr 2023 11:05:51 -0700 (PDT) X-Google-Smtp-Source: AKy350asHXxZDKpo9tj0QQsDbtbXVrdzx6Lx3BztIr+k6cpHX/JjfHHBMSQNiERgO+zadPqqG7wK4A== X-Received: by 2002:ac8:5c49:0:b0:3ef:3912:ab3e with SMTP id j9-20020ac85c49000000b003ef3912ab3emr30965662qtj.2.1682445951360; Tue, 25 Apr 2023 11:05:51 -0700 (PDT) Received: from x1n.redhat.com (bras-base-aurron9127w-grc-40-70-52-229-124.dsl.bell.ca. [70.52.229.124]) by smtp.gmail.com with ESMTPSA id b17-20020a05620a271100b0074e034915d4sm4552297qkp.73.2023.04.25.11.05.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Apr 2023 11:05:49 -0700 (PDT) From: Peter Xu To: qemu-devel@nongnu.org Cc: peterx@redhat.com, Juan Quintela , Leonardo Bras Soares Passos Subject: [PATCH 2/2] vmstate-static-checker: Recognize "num" field Date: Tue, 25 Apr 2023 14:05:44 -0400 Message-Id: <20230425180544.1815888-3-peterx@redhat.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230425180544.1815888-1-peterx@redhat.com> References: <20230425180544.1815888-1-peterx@redhat.com> MIME-Version: 1.0 Received-SPF: pass client-ip=170.10.129.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.171, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, 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-bounces+incoming=patchwork.ozlabs.org@nongnu.org Recognize this field for VMS_ARRAY typed vmsd fields, then we can do proper size matching with previous patch. Note that this is compatible with old -dump-vmstate output, because when "num" is not there we'll still use the old "size" only. Signed-off-by: Peter Xu Reviewed-by: Juan Quintela --- scripts/vmstate-static-checker.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/scripts/vmstate-static-checker.py b/scripts/vmstate-static-checker.py index dfeee8231a..9c0e6b81f2 100755 --- a/scripts/vmstate-static-checker.py +++ b/scripts/vmstate-static-checker.py @@ -134,6 +134,11 @@ def exists_in_substruct(fields, item): return check_fields_match(fields["Description"]["name"], substruct_fields[0]["field"], item) +def size_total(entry): + size = entry["size"] + if "num" not in entry: + return size + return size * entry["num"] def check_fields(src_fields, dest_fields, desc, sec): # This function checks for all the fields in a section. If some @@ -249,17 +254,19 @@ def check_fields(src_fields, dest_fields, desc, sec): continue if s_item["field"] == "unused" or d_item["field"] == "unused": - if s_item["size"] == d_item["size"]: + s_size = size_total(s_item) + d_size = size_total(d_item) + if s_size == d_size: continue if d_item["field"] == "unused": advance_dest = False - unused_count = d_item["size"] - s_item["size"] + unused_count = d_size - s_size; continue if s_item["field"] == "unused": advance_src = False - unused_count = s_item["size"] - d_item["size"] + unused_count = s_size - d_size continue print("Section \"" + sec + "\",", end=' ')