1# -*- Mode: Python -*- 2# vim: filetype=python 3# 4# This work is licensed under the terms of the GNU GPL, version 2 or later. 5# See the COPYING file in the top-level directory. 6 7{ 'include': 'machine-common.json' } 8 9## 10# @CpuModelInfo: 11# 12# Virtual CPU model. 13# 14# A CPU model consists of the name of a CPU definition, to which delta 15# changes are applied (e.g. features added/removed). Most magic values 16# that an architecture might require should be hidden behind the name. 17# However, if required, architectures can expose relevant properties. 18# 19# @name: the name of the CPU definition the model is based on 20# 21# @props: a dictionary of QOM properties to be applied 22# 23# Since: 2.8 24## 25{ 'struct': 'CpuModelInfo', 26 'data': { 'name': 'str', 27 '*props': 'any' } } 28 29## 30# @CpuModelExpansionType: 31# 32# An enumeration of CPU model expansion types. 33# 34# @static: Expand to a static CPU model, a combination of a static 35# base model name and property delta changes. As the static base 36# model will never change, the expanded CPU model will be the 37# same, independent of QEMU version, machine type, machine 38# options, and accelerator options. Therefore, the resulting 39# model can be used by tooling without having to specify a 40# compatibility machine - e.g. when displaying the "host" model. 41# The @static CPU models are migration-safe. 42# 43# @full: Expand all properties. The produced model is not guaranteed 44# to be migration-safe, but allows tooling to get an insight and 45# work with model details. 46# 47# .. note:: When a non-migration-safe CPU model is expanded in static 48# mode, some features enabled by the CPU model may be omitted, 49# because they can't be implemented by a static CPU model definition 50# (e.g. cache info passthrough and PMU passthrough in x86). If you 51# need an accurate representation of the features enabled by a 52# non-migration-safe CPU model, use @full. If you need a static 53# representation that will keep ABI compatibility even when changing 54# QEMU version or machine-type, use @static (but keep in mind that 55# some features may be omitted). 56# 57# Since: 2.8 58## 59{ 'enum': 'CpuModelExpansionType', 60 'data': [ 'static', 'full' ] } 61 62## 63# @CpuModelCompareResult: 64# 65# An enumeration of CPU model comparison results. The result is 66# usually calculated using e.g. CPU features or CPU generations. 67# 68# @incompatible: If model A is incompatible to model B, model A is not 69# guaranteed to run where model B runs and the other way around. 70# 71# @identical: If model A is identical to model B, model A is 72# guaranteed to run where model B runs and the other way around. 73# 74# @superset: If model A is a superset of model B, model B is 75# guaranteed to run where model A runs. There are no guarantees 76# about the other way. 77# 78# @subset: If model A is a subset of model B, model A is guaranteed to 79# run where model B runs. There are no guarantees about the other 80# way. 81# 82# Since: 2.8 83## 84{ 'enum': 'CpuModelCompareResult', 85 'data': [ 'incompatible', 'identical', 'superset', 'subset' ] } 86 87## 88# @CpuModelBaselineInfo: 89# 90# The result of a CPU model baseline. 91# 92# @model: the baselined CpuModelInfo. 93# 94# Since: 2.8 95## 96{ 'struct': 'CpuModelBaselineInfo', 97 'data': { 'model': 'CpuModelInfo' }, 98 'if': 'TARGET_S390X' } 99 100## 101# @CpuModelCompareInfo: 102# 103# The result of a CPU model comparison. 104# 105# @result: The result of the compare operation. 106# 107# @responsible-properties: List of properties that led to the 108# comparison result not being identical. 109# 110# @responsible-properties is a list of QOM property names that led to 111# both CPUs not being detected as identical. For identical models, 112# this list is empty. If a QOM property is read-only, that means 113# there's no known way to make the CPU models identical. If the 114# special property name "type" is included, the models are by 115# definition not identical and cannot be made identical. 116# 117# Since: 2.8 118## 119{ 'struct': 'CpuModelCompareInfo', 120 'data': { 'result': 'CpuModelCompareResult', 121 'responsible-properties': ['str'] }, 122 'if': 'TARGET_S390X' } 123 124## 125# @query-cpu-model-comparison: 126# 127# Compares two CPU models, @modela and @modelb, returning how they 128# compare in a specific configuration. The results indicates how 129# both models compare regarding runnability. This result can be 130# used by tooling to make decisions if a certain CPU model will 131# run in a certain configuration or if a compatible CPU model has 132# to be created by baselining. 133# 134# Usually, a CPU model is compared against the maximum possible CPU 135# model of a certain configuration (e.g. the "host" model for KVM). 136# If that CPU model is identical or a subset, it will run in that 137# configuration. 138# 139# The result returned by this command may be affected by: 140# 141# * QEMU version: CPU models may look different depending on the QEMU 142# version. (Except for CPU models reported as "static" in 143# query-cpu-definitions.) 144# * machine-type: CPU model may look different depending on the 145# machine-type. (Except for CPU models reported as "static" in 146# query-cpu-definitions.) 147# * machine options (including accelerator): in some architectures, 148# CPU models may look different depending on machine and accelerator 149# options. (Except for CPU models reported as "static" in 150# query-cpu-definitions.) 151# * "-cpu" arguments and global properties: arguments to the -cpu 152# option and global properties may affect expansion of CPU models. 153# Using query-cpu-model-expansion while using these is not advised. 154# 155# Some architectures may not support comparing CPU models. s390x 156# supports comparing CPU models. 157# 158# @modela: description of the first CPU model to compare, referred to as 159# "model A" in CpuModelCompareResult 160# 161# @modelb: description of the second CPU model to compare, referred to as 162# "model B" in CpuModelCompareResult 163# 164# Returns: a CpuModelCompareInfo describing how both CPU models 165# compare 166# 167# Errors: 168# - if comparing CPU models is not supported 169# - if a model cannot be used 170# - if a model contains an unknown cpu definition name, unknown 171# properties or properties with wrong types. 172# 173# .. note:: This command isn't specific to s390x, but is only 174# implemented on this architecture currently. 175# 176# Since: 2.8 177## 178{ 'command': 'query-cpu-model-comparison', 179 'data': { 'modela': 'CpuModelInfo', 'modelb': 'CpuModelInfo' }, 180 'returns': 'CpuModelCompareInfo', 181 'if': 'TARGET_S390X' } 182 183## 184# @query-cpu-model-baseline: 185# 186# Baseline two CPU models, @modela and @modelb, creating a compatible 187# third model. The created model will always be a static, 188# migration-safe CPU model (see "static" CPU model expansion for details). 189# 190# This interface can be used by tooling to create a compatible CPU 191# model out two CPU models. The created CPU model will be identical 192# to or a subset of both CPU models when comparing them. Therefore, 193# the created CPU model is guaranteed to run where the given CPU 194# models run. 195# 196# The result returned by this command may be affected by: 197# 198# * QEMU version: CPU models may look different depending on the QEMU 199# version. (Except for CPU models reported as "static" in 200# query-cpu-definitions.) 201# * machine-type: CPU model may look different depending on the 202# machine-type. (Except for CPU models reported as "static" in 203# query-cpu-definitions.) 204# * machine options (including accelerator): in some architectures, 205# CPU models may look different depending on machine and accelerator 206# options. (Except for CPU models reported as "static" in 207# query-cpu-definitions.) 208# * "-cpu" arguments and global properties: arguments to the -cpu 209# option and global properties may affect expansion of CPU models. 210# Using query-cpu-model-expansion while using these is not advised. 211# 212# Some architectures may not support baselining CPU models. s390x 213# supports baselining CPU models. 214# 215# @modela: description of the first CPU model to baseline 216# 217# @modelb: description of the second CPU model to baseline 218# 219# Returns: a CpuModelBaselineInfo describing the baselined CPU model 220# 221# Errors: 222# - if baselining CPU models is not supported 223# - if a model cannot be used 224# - if a model contains an unknown cpu definition name, unknown 225# properties or properties with wrong types. 226# 227# .. note:: This command isn't specific to s390x, but is only 228# implemented on this architecture currently. 229# 230# Since: 2.8 231## 232{ 'command': 'query-cpu-model-baseline', 233 'data': { 'modela': 'CpuModelInfo', 234 'modelb': 'CpuModelInfo' }, 235 'returns': 'CpuModelBaselineInfo', 236 'if': 'TARGET_S390X' } 237 238## 239# @CpuModelExpansionInfo: 240# 241# The result of a cpu model expansion. 242# 243# @model: the expanded CpuModelInfo. 244# 245# @deprecated-props: a list of properties that are flagged as deprecated 246# by the CPU vendor. The list depends on the CpuModelExpansionType: 247# "static" properties are a subset of the enabled-properties for 248# the expanded model; "full" properties are a set of properties 249# that are deprecated across all models for the architecture. 250# (since: 9.1). 251# 252# Since: 2.8 253## 254{ 'struct': 'CpuModelExpansionInfo', 255 'data': { 'model': 'CpuModelInfo', 256 'deprecated-props' : { 'type': ['str'], 257 'if': 'TARGET_S390X' } }, 258 'if': { 'any': [ 'TARGET_S390X', 259 'TARGET_I386', 260 'TARGET_ARM', 261 'TARGET_LOONGARCH64', 262 'TARGET_RISCV' ] } } 263 264## 265# @query-cpu-model-expansion: 266# 267# Expands a given CPU model, @model, (or a combination of CPU model + 268# additional options) to different granularities, specified by 269# @type, allowing tooling to get an understanding what a specific 270# CPU model looks like in QEMU under a certain configuration. 271# 272# This interface can be used to query the "host" CPU model. 273# 274# The data returned by this command may be affected by: 275# 276# * QEMU version: CPU models may look different depending on the QEMU 277# version. (Except for CPU models reported as "static" in 278# query-cpu-definitions.) 279# * machine-type: CPU model may look different depending on the 280# machine-type. (Except for CPU models reported as "static" in 281# query-cpu-definitions.) 282# * machine options (including accelerator): in some architectures, 283# CPU models may look different depending on machine and accelerator 284# options. (Except for CPU models reported as "static" in 285# query-cpu-definitions.) 286# * "-cpu" arguments and global properties: arguments to the -cpu 287# option and global properties may affect expansion of CPU models. 288# Using query-cpu-model-expansion while using these is not advised. 289# 290# Some architectures may not support all expansion types. s390x 291# supports "full" and "static". Arm only supports "full". 292# 293# @model: description of the CPU model to expand 294# 295# @type: expansion type, specifying how to expand the CPU model 296# 297# Returns: a CpuModelExpansionInfo describing the expanded CPU model 298# 299# Errors: 300# - if expanding CPU models is not supported 301# - if the model cannot be expanded 302# - if the model contains an unknown CPU definition name, unknown 303# properties or properties with a wrong type 304# - if an expansion type is not supported 305# 306# Since: 2.8 307## 308{ 'command': 'query-cpu-model-expansion', 309 'data': { 'type': 'CpuModelExpansionType', 310 'model': 'CpuModelInfo' }, 311 'returns': 'CpuModelExpansionInfo', 312 'if': { 'any': [ 'TARGET_S390X', 313 'TARGET_I386', 314 'TARGET_ARM', 315 'TARGET_LOONGARCH64', 316 'TARGET_RISCV' ] } } 317 318## 319# @CpuDefinitionInfo: 320# 321# Virtual CPU definition. 322# 323# @name: the name of the CPU definition 324# 325# @migration-safe: whether a CPU definition can be safely used for 326# migration in combination with a QEMU compatibility machine when 327# migrating between different QEMU versions and between hosts with 328# different sets of (hardware or software) capabilities. If not 329# provided, information is not available and callers should not 330# assume the CPU definition to be migration-safe. (since 2.8) 331# 332# @static: whether a CPU definition is static and will not change 333# depending on QEMU version, machine type, machine options and 334# accelerator options. A static model is always migration-safe. 335# (since 2.8) 336# 337# @unavailable-features: List of properties that prevent the CPU model 338# from running in the current host. (since 2.8) 339# 340# @typename: Type name that can be used as argument to 341# @device-list-properties, to introspect properties configurable 342# using -cpu or -global. (since 2.9) 343# 344# @alias-of: Name of CPU model this model is an alias for. The target 345# of the CPU model alias may change depending on the machine type. 346# Management software is supposed to translate CPU model aliases 347# in the VM configuration, because aliases may stop being 348# migration-safe in the future (since 4.1) 349# 350# @deprecated: If true, this CPU model is deprecated and may be 351# removed in in some future version of QEMU according to the QEMU 352# deprecation policy. (since 5.2) 353# 354# @unavailable-features is a list of QOM property names that represent 355# CPU model attributes that prevent the CPU from running. If the QOM 356# property is read-only, that means there's no known way to make the 357# CPU model run in the current host. Implementations that choose not 358# to provide specific information return the property name "type". If 359# the property is read-write, it means that it MAY be possible to run 360# the CPU model in the current host if that property is changed. 361# Management software can use it as hints to suggest or choose an 362# alternative for the user, or just to generate meaningful error 363# messages explaining why the CPU model can't be used. If 364# @unavailable-features is an empty list, the CPU model is runnable 365# using the current host and machine-type. If @unavailable-features 366# is not present, runnability information for the CPU is not 367# available. 368# 369# Since: 1.2 370## 371{ 'struct': 'CpuDefinitionInfo', 372 'data': { 'name': 'str', 373 '*migration-safe': 'bool', 374 'static': 'bool', 375 '*unavailable-features': [ 'str' ], 376 'typename': 'str', 377 '*alias-of' : 'str', 378 'deprecated' : 'bool' }, 379 'if': { 'any': [ 'TARGET_PPC', 380 'TARGET_ARM', 381 'TARGET_I386', 382 'TARGET_S390X', 383 'TARGET_MIPS', 384 'TARGET_LOONGARCH64', 385 'TARGET_RISCV' ] } } 386 387## 388# @query-cpu-definitions: 389# 390# Return a list of supported virtual CPU definitions 391# 392# Returns: a list of CpuDefinitionInfo 393# 394# Since: 1.2 395## 396{ 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'], 397 'if': { 'any': [ 'TARGET_PPC', 398 'TARGET_ARM', 399 'TARGET_I386', 400 'TARGET_S390X', 401 'TARGET_MIPS', 402 'TARGET_LOONGARCH64', 403 'TARGET_RISCV' ] } } 404 405## 406# @CpuS390Polarization: 407# 408# An enumeration of CPU polarization that can be assumed by a virtual 409# S390 CPU 410# 411# Since: 8.2 412## 413{ 'enum': 'CpuS390Polarization', 414 'prefix': 'S390_CPU_POLARIZATION', 415 'data': [ 'horizontal', 'vertical' ], 416 'if': 'TARGET_S390X' 417} 418 419## 420# @set-cpu-topology: 421# 422# Modify the topology by moving the CPU inside the topology tree, or 423# by changing a modifier attribute of a CPU. Absent values will not 424# be modified. 425# 426# @core-id: the vCPU ID to be moved 427# 428# @socket-id: destination socket to move the vCPU to 429# 430# @book-id: destination book to move the vCPU to 431# 432# @drawer-id: destination drawer to move the vCPU to 433# 434# @entitlement: entitlement to set 435# 436# @dedicated: whether the provisioning of real to virtual CPU is 437# dedicated 438# 439# Features: 440# 441# @unstable: This command is experimental. 442# 443# Since: 8.2 444## 445{ 'command': 'set-cpu-topology', 446 'data': { 447 'core-id': 'uint16', 448 '*socket-id': 'uint16', 449 '*book-id': 'uint16', 450 '*drawer-id': 'uint16', 451 '*entitlement': 'CpuS390Entitlement', 452 '*dedicated': 'bool' 453 }, 454 'features': [ 'unstable' ], 455 'if': { 'all': [ 'TARGET_S390X' , 'CONFIG_KVM' ] } 456} 457 458## 459# @CPU_POLARIZATION_CHANGE: 460# 461# Emitted when the guest asks to change the polarization. 462# 463# The guest can tell the host (via the PTF instruction) whether the 464# CPUs should be provisioned using horizontal or vertical 465# polarization. 466# 467# On horizontal polarization the host is expected to provision all 468# vCPUs equally. 469# 470# On vertical polarization the host can provision each vCPU 471# differently. The guest will get information on the details of the 472# provisioning the next time it uses the STSI(15) instruction. 473# 474# @polarization: polarization specified by the guest 475# 476# Features: 477# 478# @unstable: This event is experimental. 479# 480# Since: 8.2 481# 482# .. qmp-example:: 483# 484# <- { "event": "CPU_POLARIZATION_CHANGE", 485# "data": { "polarization": "horizontal" }, 486# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } } 487## 488{ 'event': 'CPU_POLARIZATION_CHANGE', 489 'data': { 'polarization': 'CpuS390Polarization' }, 490 'features': [ 'unstable' ], 491 'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] } 492} 493 494## 495# @CpuPolarizationInfo: 496# 497# The result of a CPU polarization query. 498# 499# @polarization: the CPU polarization 500# 501# Since: 8.2 502## 503{ 'struct': 'CpuPolarizationInfo', 504 'data': { 'polarization': 'CpuS390Polarization' }, 505 'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] } 506} 507 508## 509# @query-s390x-cpu-polarization: 510# 511# Features: 512# 513# @unstable: This command is experimental. 514# 515# Returns: the machine's CPU polarization 516# 517# Since: 8.2 518## 519{ 'command': 'query-s390x-cpu-polarization', 'returns': 'CpuPolarizationInfo', 520 'features': [ 'unstable' ], 521 'if': { 'all': [ 'TARGET_S390X', 'CONFIG_KVM' ] } 522} 523