From mboxrd@z Thu Jan 1 00:00:00 1970 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 6EFCCC27C53 for ; Wed, 12 Jun 2024 18:41:55 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sHSu7-0003ZB-NY; Wed, 12 Jun 2024 14:41:03 -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 1sHSu6-0003Z1-2G for qemu-devel@nongnu.org; Wed, 12 Jun 2024 14:41:02 -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 1sHSu3-0005yi-P2 for qemu-devel@nongnu.org; Wed, 12 Jun 2024 14:41:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718217657; 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; bh=JCVdpu79RdGGoZWMyu1Np3+tnx1dsHJYdlHd8PbSbhc=; b=EMJMChpaQe65PIDlf1a1d/yQx/542R5/R25J5sokczUKAIGQ7sbnZF8MweZ5ZzO7G57017 WcD94SHKJVmHlGDz/GAxw2Ai2pM3GAIbyyZshDSG2pxkkbdIwnO1o0+DO1+LTbei5IupCi uyMO5RkaZ5OkNIAPOCwjl0GVOwqEwEQ= Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-369-L7-5--UXPBKhs2p1srHqvg-1; Wed, 12 Jun 2024 14:40:55 -0400 X-MC-Unique: L7-5--UXPBKhs2p1srHqvg-1 Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-2c4b0f01581so83305a91.2 for ; Wed, 12 Jun 2024 11:40:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718217653; x=1718822453; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=JCVdpu79RdGGoZWMyu1Np3+tnx1dsHJYdlHd8PbSbhc=; b=ItfvF/BrNrdvQmgd2D57gxokxvNDz2M0j4Ye2sbL5NXLOn11jSZpyrV53Zt+SwgmQP HMEgBkukrHVznypZwp0wO8SZ5kQkC9aMdXCC7MpkqJ0OGMqhxXKZmW50CAR+tJ3E/1Mb 7KzzoiANjqdtYKGu0MYtiY6dnt3Fi5yA6+S+5LGmin6ADvIy4Rk0Z8lWZ5HA19exdSpj igqA11S8PCqR80sYqg1XYKP/oS4WNHLx+JPvqzilFekmgElhqu9K9tyiIbuhXroIfDqg LqpYBR5g3GzQ+cD3gTttv8JpPFi3+yO2MhK4s4Mjc+9ZxDnDT/L0cwvWlMiY91hrCb6W tisg== X-Gm-Message-State: AOJu0Yy9Rclm6gY7C30DTpGlUxeIHJKZk8qEDGHNmF6x7XzHShcJu6by I0XZj58z0PM358ncmlsgPoj44tY/T0E8x64aa34dSrMPqSGF8IvPc+q8lUQ4wDyXsS7/sf4Icu3 NwiEud2FacPw8kCsZhqjdAl4sjFm+uUKP38kVjCxUsXzwY8dSr85uFMFssDmoPQwegLMAo5AMWo dSFLdZoIU7j7+VghySnPqRY8SY4d5y0HG9FAykPQ== X-Received: by 2002:a17:90a:ae15:b0:2c3:38f2:d2f1 with SMTP id 98e67ed59e1d1-2c4a761ab23mr2590468a91.2.1718217652745; Wed, 12 Jun 2024 11:40:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHVVMzuHHxQma98XxQpg8Gg/rhAxRXiDwBpWFDW7MQtUQdPnwAHSEHEUvM7adAl66AzI1rp5Ugq9f0PKD/dPNU= X-Received: by 2002:a17:90a:ae15:b0:2c3:38f2:d2f1 with SMTP id 98e67ed59e1d1-2c4a761ab23mr2590447a91.2.1718217652201; Wed, 12 Jun 2024 11:40:52 -0700 (PDT) MIME-Version: 1.0 From: John Snow Date: Wed, 12 Jun 2024 14:40:40 -0400 Message-ID: Subject: Sample 'qapi-schema-diff' output for v9.0.0 vs origin/master To: Markus Armbruster Cc: qemu-devel Content-Type: multipart/alternative; boundary="000000000000ce8322061ab5b863" Received-SPF: pass client-ip=170.10.129.124; envelope-from=jsnow@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.143, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org --000000000000ce8322061ab5b863 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hiya, here's some draft output of a script I'm working on to summarize QMP wire format differences between QEMU versions. This script works in terms of the QMP *wire format*, not the QAPI *specification*. As a consequence, *almost* all type names are stripped from this output and all nested structures are fully inlined - so changes to shared data structures, enums, etc will manifest as many independent changes. Similarly, changes to type names and type factorings that do not change the wire format will not appear in this report at all. This is still a WIP: if conditionals and features may not be fully represented in this summary report. Here's today's diff output, see if you think this format is "intuitive" or makes sense to some extent; or, if you're feeling bored, if you believe it's fully accurate: jsnow@scv ~/s/qemu (master)> qapi-schema-diff qapi-compiled-v9.0.0.json qapi-compiled-v9.0.0-1388-g80e8f060216.json ################################### v9.0.0 =3D=3D> v9.0.0-1388-g80e8f060216 ################################### ******** commands ******** Removed =3D=3D=3D=3D=3D=3D=3D x-query-rdma Modified =3D=3D=3D=3D=3D=3D=3D=3D blockdev-backup (arguments) ++ arguments.discard-source: Optional drive-backup (arguments) ++ arguments.discard-source: Optional migrate (arguments) -- arguments.blk: Optional -- arguments.inc: Optional migrate-incoming (arguments) ++ arguments.exit-on-error: Optional migrate-set-capabilities (arguments) =C2=B7=C2=B7 arguments.capabilities[].capability: enum -- 'block' -- 'compress' migrate-set-parameters (arguments) -- arguments.block-incremental: Optional -- arguments.compress-level: Optional -- arguments.compress-threads: Optional -- arguments.compress-wait-thread: Optional -- arguments.decompress-threads: Optional object-add (arguments) =C2=B7=C2=B7 arguments.qom-type: enum ++ 'sev-snp-guest' ++ arguments.legacy-vm-type: Optional ++ arguments.author-key-enabled: Optional ++ arguments.cbitpos: Optional ++ arguments.guest-visible-workarounds: Optional ++ arguments.host-data: Optional ++ arguments.id-auth: Optional ++ arguments.id-block: Optional ++ arguments.kernel-hashes: Optional ++ arguments.policy: Optional ++ arguments.reduced-phys-bits: integer ++ arguments.sev-device: Optional ++ arguments.vcek-disabled: Optional query-cpu-model-baseline (returns, arguments) ++ arguments.modela.deprecated-props: Optional ++ arguments.modela.deprecated-props[]: string ++ arguments.modelb.deprecated-props: Optional ++ arguments.modelb.deprecated-props[]: string ++ returns.model.deprecated-props: Optional ++ returns.model.deprecated-props[]: string query-cpu-model-comparison (arguments) ++ arguments.modela.deprecated-props: Optional ++ arguments.modela.deprecated-props[]: string ++ arguments.modelb.deprecated-props: Optional ++ arguments.modelb.deprecated-props[]: string query-cpu-model-expansion (returns, arguments) ++ arguments.model.deprecated-props: Optional ++ arguments.model.deprecated-props[]: string ++ returns.model.deprecated-props: Optional ++ returns.model.deprecated-props[]: string query-cpus-fast (returns) ++ returns[].props.module-id: Optional =C2=B7=C2=B7 returns[].target: enum -- 'nios2' query-hotpluggable-cpus (returns) ++ returns[].props.module-id: Optional query-machines (returns, arguments) ++ arguments.compat-props: Optional ++ returns[].compat-props: Optional ++ returns[].compat-props[]: object ++ returns[].compat-props[].property: string ++ returns[].compat-props[].qom-type: string ++ returns[].compat-props[].value: string query-migrate (returns) -- returns.compression: Optional -- returns.compression.busy: integer -- returns.compression.busy-rate: number -- returns.compression.compressed-size: integer -- returns.compression.compression-rate: number -- returns.compression.pages: integer -- returns.disk: Optional -- returns.disk.dirty-pages-rate: integer -- returns.disk.dirty-sync-count: integer -- returns.disk.dirty-sync-missed-zero-copy: integer -- returns.disk.downtime-bytes: integer -- returns.disk.duplicate: integer -- returns.disk.mbps: number -- returns.disk.multifd-bytes: integer -- returns.disk.normal: integer -- returns.disk.normal-bytes: integer -- returns.disk.page-size: integer -- returns.disk.pages-per-second: integer -- returns.disk.postcopy-bytes: integer -- returns.disk.postcopy-requests: integer -- returns.disk.precopy-bytes: integer -- returns.disk.remaining: integer -- returns.disk.skipped: integer -- returns.disk.total: integer -- returns.disk.transferred: integer -- returns.ram.skipped: integer query-migrate-capabilities (returns) =C2=B7=C2=B7 returns[].capability: enum -- 'block' -- 'compress' query-migrate-parameters (returns) -- returns.block-incremental: Optional -- returns.compress-level: Optional -- returns.compress-threads: Optional -- returns.compress-wait-thread: Optional -- returns.decompress-threads: Optional query-sev (returns) -- returns.handle: integer -- returns.policy: integer ++ returns.sev-type: enum ++ returns.snp-policy: integer ++ returns.handle: integer ++ returns.policy: integer query-target (returns) =C2=B7=C2=B7 returns.arch: enum -- 'nios2' set-numa-node (arguments) ++ arguments.module-id: Optional trace-event-get-state (returns, arguments) -- arguments.vcpu: Optional -- returns[].vcpu: boolean trace-event-set-state (arguments) -- arguments.vcpu: Optional transaction (arguments) ++ arguments.actions[].data.discard-source: Optional ++ arguments.actions[].data.discard-source: Optional ****** events ****** Added =3D=3D=3D=3D=3D VFIO_MIGRATION Removed =3D=3D=3D=3D=3D=3D=3D MEM_UNPLUG_ERROR RDMA_GID_STATUS_CHANGED --000000000000ce8322061ab5b863 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hiya, here's some draft output of a script I'= m working on to summarize QMP wire format differences between QEMU versions= .=C2=A0

This script works in terms of the QMP *wir= e format*, not the QAPI *specification*. As a consequence, *almost* all typ= e names are stripped from this output and all nested structures are fully i= nlined - so changes to shared data structures, enums, etc will manifest as = many independent changes. Similarly, changes to type names and type factori= ngs that do not change the wire format will not appear in this report at al= l.

This is still a WIP: if conditionals and featur= es may not be fully represented in this summary report.

<= /div>
Here's today's diff output, see if you think this format = is "intuitive" or makes sense to some extent; or, if you're f= eeling bored, if you believe it's fully accurate:

jsnow@scv ~/s/qemu (master)> qapi-schema-diff qapi-compiled-v9.0= .0.json qapi-compiled-v9.0.0-1388-g80e8f060216.json
####################= ###############
v9.0.0 =3D=3D> v9.0.0-1388-g80e8f060216
##########= #########################

********
commands
********

Re= moved
=3D=3D=3D=3D=3D=3D=3D
x-query-rdma

Modified
=3D=3D=3D= =3D=3D=3D=3D=3D
blockdev-backup (arguments)
=C2=A0 =C2=A0 ++ argument= s.discard-source: Optional<boolean>
drive-backup (arguments)
= =C2=A0 =C2=A0 ++ arguments.discard-source: Optional<boolean>
migra= te (arguments)
=C2=A0 =C2=A0 -- arguments.blk: Optional<boolean>=C2=A0 =C2=A0 -- arguments.inc: Optional<boolean>
migrate-incomi= ng (arguments)
=C2=A0 =C2=A0 ++ arguments.exit-on-error: Optional<boo= lean>
migrate-set-capabilities (arguments)
=C2=A0 =C2=A0 =C2=B7=C2= =B7 arguments.capabilities[].capability: enum
=C2=A0 =C2=A0 -- =C2=A0 = =C2=A0 'block'
=C2=A0 =C2=A0 -- =C2=A0 =C2=A0 'compress'=
migrate-set-parameters (arguments)
=C2=A0 =C2=A0 -- arguments.block-= incremental: Optional<boolean>
=C2=A0 =C2=A0 -- arguments.compress= -level: Optional<integer>
=C2=A0 =C2=A0 -- arguments.compress-thre= ads: Optional<integer>
=C2=A0 =C2=A0 -- arguments.compress-wait-th= read: Optional<boolean>
=C2=A0 =C2=A0 -- arguments.decompress-thre= ads: Optional<integer>
object-add (arguments)
=C2=A0 =C2=A0 =C2= =B7=C2=B7 arguments.qom-type: enum
=C2=A0 =C2=A0 ++ =C2=A0 =C2=A0 's= ev-snp-guest'
=C2=A0 =C2=A0 ++ arguments<qom-type=3Dsev-guest>= .legacy-vm-type: Optional<boolean>
=C2=A0 =C2=A0 ++ arguments<q= om-type=3Dsev-snp-guest>.author-key-enabled: Optional<boolean>
= =C2=A0 =C2=A0 ++ arguments<qom-type=3Dsev-snp-guest>.cbitpos: Optiona= l<integer>
=C2=A0 =C2=A0 ++ arguments<qom-type=3Dsev-snp-guest&= gt;.guest-visible-workarounds: Optional<string>
=C2=A0 =C2=A0 ++ a= rguments<qom-type=3Dsev-snp-guest>.host-data: Optional<string><= br>=C2=A0 =C2=A0 ++ arguments<qom-type=3Dsev-snp-guest>.id-auth: Opti= onal<string>
=C2=A0 =C2=A0 ++ arguments<qom-type=3Dsev-snp-gues= t>.id-block: Optional<string>
=C2=A0 =C2=A0 ++ arguments<qom= -type=3Dsev-snp-guest>.kernel-hashes: Optional<boolean>
=C2=A0 = =C2=A0 ++ arguments<qom-type=3Dsev-snp-guest>.policy: Optional<int= eger>
=C2=A0 =C2=A0 ++ arguments<qom-type=3Dsev-snp-guest>.redu= ced-phys-bits: integer
=C2=A0 =C2=A0 ++ arguments<qom-type=3Dsev-snp-= guest>.sev-device: Optional<string>
=C2=A0 =C2=A0 ++ arguments&= lt;qom-type=3Dsev-snp-guest>.vcek-disabled: Optional<boolean>
q= uery-cpu-model-baseline (returns, arguments)
=C2=A0 =C2=A0 ++ arguments.= modela.deprecated-props: Optional<array>
=C2=A0 =C2=A0 ++ argument= s.modela.deprecated-props[]: string
=C2=A0 =C2=A0 ++ arguments.modelb.de= precated-props: Optional<array>
=C2=A0 =C2=A0 ++ arguments.modelb.= deprecated-props[]: string
=C2=A0 =C2=A0 ++ returns.model.deprecated-pro= ps: Optional<array>
=C2=A0 =C2=A0 ++ returns.model.deprecated-prop= s[]: string
query-cpu-model-comparison (arguments)
=C2=A0 =C2=A0 ++ a= rguments.modela.deprecated-props: Optional<array>
=C2=A0 =C2=A0 ++= arguments.modela.deprecated-props[]: string
=C2=A0 =C2=A0 ++ arguments.= modelb.deprecated-props: Optional<array>
=C2=A0 =C2=A0 ++ argument= s.modelb.deprecated-props[]: string
query-cpu-model-expansion (returns, = arguments)
=C2=A0 =C2=A0 ++ arguments.model.deprecated-props: Optional&l= t;array>
=C2=A0 =C2=A0 ++ arguments.model.deprecated-props[]: string<= br>=C2=A0 =C2=A0 ++ returns.model.deprecated-props: Optional<array>=C2=A0 =C2=A0 ++ returns.model.deprecated-props[]: string
query-cpus-f= ast (returns)
=C2=A0 =C2=A0 ++ returns[].props.module-id: Optional<in= teger>
=C2=A0 =C2=A0 =C2=B7=C2=B7 returns[].target: enum
=C2=A0 = =C2=A0 -- =C2=A0 =C2=A0 'nios2'
query-hotpluggable-cpus (returns= )
=C2=A0 =C2=A0 ++ returns[].props.module-id: Optional<integer>query-machines (returns, arguments)
=C2=A0 =C2=A0 ++ arguments.compat-p= rops: Optional<boolean>
=C2=A0 =C2=A0 ++ returns[].compat-props: O= ptional<array>
=C2=A0 =C2=A0 ++ returns[].compat-props[]: object=C2=A0 =C2=A0 ++ returns[].compat-props[].property: string
=C2=A0 =C2= =A0 ++ returns[].compat-props[].qom-type: string
=C2=A0 =C2=A0 ++ return= s[].compat-props[].value: string
query-migrate (returns)
=C2=A0 =C2= =A0 -- returns.compression: Optional<object>
=C2=A0 =C2=A0 -- retu= rns.compression.busy: integer
=C2=A0 =C2=A0 -- returns.compression.busy-= rate: number
=C2=A0 =C2=A0 -- returns.compression.compressed-size: integ= er
=C2=A0 =C2=A0 -- returns.compression.compression-rate: number
=C2= =A0 =C2=A0 -- returns.compression.pages: integer
=C2=A0 =C2=A0 -- return= s.disk: Optional<object>
=C2=A0 =C2=A0 -- returns.disk.dirty-pages= -rate: integer
=C2=A0 =C2=A0 -- returns.disk.dirty-sync-count: integer=C2=A0 =C2=A0 -- returns.disk.dirty-sync-missed-zero-copy: integer
=C2= =A0 =C2=A0 -- returns.disk.downtime-bytes: integer
=C2=A0 =C2=A0 -- retu= rns.disk.duplicate: integer
=C2=A0 =C2=A0 -- returns.disk.mbps: number=C2=A0 =C2=A0 -- returns.disk.multifd-bytes: integer
=C2=A0 =C2=A0 -- = returns.disk.normal: integer
=C2=A0 =C2=A0 -- returns.disk.normal-bytes:= integer
=C2=A0 =C2=A0 -- returns.disk.page-size: integer
=C2=A0 =C2= =A0 -- returns.disk.pages-per-second: integer
=C2=A0 =C2=A0 -- returns.d= isk.postcopy-bytes: integer
=C2=A0 =C2=A0 -- returns.disk.postcopy-reque= sts: integer
=C2=A0 =C2=A0 -- returns.disk.precopy-bytes: integer
=C2= =A0 =C2=A0 -- returns.disk.remaining: integer
=C2=A0 =C2=A0 -- returns.d= isk.skipped: integer
=C2=A0 =C2=A0 -- returns.disk.total: integer
=C2= =A0 =C2=A0 -- returns.disk.transferred: integer
=C2=A0 =C2=A0 -- returns= .ram.skipped: integer
query-migrate-capabilities (returns)
=C2=A0 =C2= =A0 =C2=B7=C2=B7 returns[].capability: enum
=C2=A0 =C2=A0 -- =C2=A0 =C2= =A0 'block'
=C2=A0 =C2=A0 -- =C2=A0 =C2=A0 'compress'query-migrate-parameters (returns)
=C2=A0 =C2=A0 -- returns.block-incre= mental: Optional<boolean>
=C2=A0 =C2=A0 -- returns.compress-level:= Optional<integer>
=C2=A0 =C2=A0 -- returns.compress-threads: Opti= onal<integer>
=C2=A0 =C2=A0 -- returns.compress-wait-thread: Optio= nal<boolean>
=C2=A0 =C2=A0 -- returns.decompress-threads: Optional= <integer>
query-sev (returns)
=C2=A0 =C2=A0 -- returns.handle: = integer
=C2=A0 =C2=A0 -- returns.policy: integer
=C2=A0 =C2=A0 ++ ret= urns.sev-type: enum
=C2=A0 =C2=A0 ++ returns<sev-type=3Dsev-snp>.s= np-policy: integer
=C2=A0 =C2=A0 ++ returns<sev-type=3Dsev>.handle= : integer
=C2=A0 =C2=A0 ++ returns<sev-type=3Dsev>.policy: integer=
query-target (returns)
=C2=A0 =C2=A0 =C2=B7=C2=B7 returns.arch: enum=
=C2=A0 =C2=A0 -- =C2=A0 =C2=A0 'nios2'
set-numa-node (argume= nts)
=C2=A0 =C2=A0 ++ arguments<type=3Dcpu>.module-id: Optional<= ;integer>
trace-event-get-state (returns, arguments)
=C2=A0 =C2=A0= -- arguments.vcpu: Optional<integer>
=C2=A0 =C2=A0 -- returns[].v= cpu: boolean
trace-event-set-state (arguments)
=C2=A0 =C2=A0 -- argum= ents.vcpu: Optional<integer>
transaction (arguments)
=C2=A0 =C2= =A0 ++ arguments.actions[]<type=3Dblockdev-backup>.data.discard-sourc= e: Optional<boolean>
=C2=A0 =C2=A0 ++ arguments.actions[]<type= =3Ddrive-backup>.data.discard-source: Optional<boolean>

***= ***
events
******

Added
=3D=3D=3D=3D=3D
VFIO_MIGRATION
Removed
=3D=3D=3D=3D=3D=3D=3D
MEM_UNPLUG_ERROR
RDMA_GID_STAT= US_CHANGED


--000000000000ce8322061ab5b863--