1# -*- Mode: Python -*- 2# vim: filetype=python 3# 4 5## 6# = VM run state 7## 8 9## 10# @RunState: 11# 12# An enumeration of VM run states. 13# 14# @debug: QEMU is running on a debugger 15# 16# @finish-migrate: guest is paused to finish the migration process 17# 18# @inmigrate: guest is paused waiting for an incoming migration. Note 19# that this state does not tell whether the machine will start at 20# the end of the migration. This depends on the command-line -S 21# option and any invocation of 'stop' or 'cont' that has happened 22# since QEMU was started. 23# 24# @internal-error: An internal error that prevents further guest 25# execution has occurred 26# 27# @io-error: the last IOP has failed and the device is configured to 28# pause on I/O errors 29# 30# @paused: guest has been paused via the 'stop' command 31# 32# @postmigrate: guest is paused following a successful 'migrate' 33# 34# @prelaunch: QEMU was started with -S and guest has not started 35# 36# @restore-vm: guest is paused to restore VM state 37# 38# @running: guest is actively running 39# 40# @save-vm: guest is paused to save the VM state 41# 42# @shutdown: guest is shut down (and -no-shutdown is in use) 43# 44# @suspended: guest is suspended (ACPI S3) 45# 46# @watchdog: the watchdog action is configured to pause and has been 47# triggered 48# 49# @guest-panicked: guest has been panicked as a result of guest OS 50# panic 51# 52# @colo: guest is paused to save/restore VM state under colo 53# checkpoint, VM can not get into this state unless colo 54# capability is enabled for migration. (since 2.8) 55## 56{ 'enum': 'RunState', 57 'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused', 58 'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm', 59 'running', 'save-vm', 'shutdown', 'suspended', 'watchdog', 60 'guest-panicked', 'colo' ] } 61 62## 63# @ShutdownCause: 64# 65# An enumeration of reasons for a Shutdown. 66# 67# @none: No shutdown request pending 68# 69# @host-error: An error prevents further use of guest 70# 71# @host-qmp-quit: Reaction to the QMP command 'quit' 72# 73# @host-qmp-system-reset: Reaction to the QMP command 'system_reset' 74# 75# @host-signal: Reaction to a signal, such as SIGINT 76# 77# @host-ui: Reaction to a UI event, like window close 78# 79# @guest-shutdown: Guest shutdown/suspend request, via ACPI or other 80# hardware-specific means 81# 82# @guest-reset: Guest reset request, and command line turns that into 83# a shutdown 84# 85# @guest-panic: Guest panicked, and command line turns that into a 86# shutdown 87# 88# @subsystem-reset: Partial guest reset that does not trigger QMP 89# events and ignores --no-reboot. This is useful for sanitizing 90# hypercalls on s390 that are used during kexec/kdump/boot 91# 92# @snapshot-load: A snapshot is being loaded by the record & replay 93# subsystem. This value is used only within QEMU. It doesn't 94# occur in QMP. (since 7.2) 95## 96{ 'enum': 'ShutdownCause', 97 # Beware, shutdown_caused_by_guest() depends on enumeration order 98 'data': [ 'none', 'host-error', 'host-qmp-quit', 'host-qmp-system-reset', 99 'host-signal', 'host-ui', 'guest-shutdown', 'guest-reset', 100 'guest-panic', 'subsystem-reset', 'snapshot-load'] } 101 102## 103# @StatusInfo: 104# 105# Information about VCPU run state 106# 107# @running: true if all VCPUs are runnable, false if not runnable 108# 109# @singlestep: true if using TCG with one guest instruction per 110# translation block 111# 112# @status: the virtual machine @RunState 113# 114# Features: 115# 116# @deprecated: Member 'singlestep' is deprecated (with no 117# replacement). 118# 119# Since: 0.14 120# 121# Notes: @singlestep is enabled on the command line with '-accel 122# tcg,one-insn-per-tb=on', or with the HMP 'one-insn-per-tb' 123# command. 124## 125{ 'struct': 'StatusInfo', 126 'data': {'running': 'bool', 127 'singlestep': { 'type': 'bool', 'features': [ 'deprecated' ]}, 128 'status': 'RunState'} } 129 130## 131# @query-status: 132# 133# Query the run status of all VCPUs 134# 135# Returns: @StatusInfo reflecting all VCPUs 136# 137# Since: 0.14 138# 139# Example: 140# 141# -> { "execute": "query-status" } 142# <- { "return": { "running": true, 143# "singlestep": false, 144# "status": "running" } } 145## 146{ 'command': 'query-status', 'returns': 'StatusInfo', 147 'allow-preconfig': true } 148 149## 150# @SHUTDOWN: 151# 152# Emitted when the virtual machine has shut down, indicating that qemu 153# is about to exit. 154# 155# @guest: If true, the shutdown was triggered by a guest request (such 156# as a guest-initiated ACPI shutdown request or other 157# hardware-specific action) rather than a host request (such as 158# sending qemu a SIGINT). (since 2.10) 159# 160# @reason: The @ShutdownCause which resulted in the SHUTDOWN. (since 161# 4.0) 162# 163# Note: If the command-line option "-no-shutdown" has been specified, 164# qemu will not exit, and a STOP event will eventually follow the 165# SHUTDOWN event 166# 167# Since: 0.12 168# 169# Example: 170# 171# <- { "event": "SHUTDOWN", 172# "data": { "guest": true, "reason": "guest-shutdown" }, 173# "timestamp": { "seconds": 1267040730, "microseconds": 682951 } } 174## 175{ 'event': 'SHUTDOWN', 'data': { 'guest': 'bool', 'reason': 'ShutdownCause' } } 176 177## 178# @POWERDOWN: 179# 180# Emitted when the virtual machine is powered down through the power 181# control system, such as via ACPI. 182# 183# Since: 0.12 184# 185# Example: 186# 187# <- { "event": "POWERDOWN", 188# "timestamp": { "seconds": 1267040730, "microseconds": 682951 } } 189## 190{ 'event': 'POWERDOWN' } 191 192## 193# @RESET: 194# 195# Emitted when the virtual machine is reset 196# 197# @guest: If true, the reset was triggered by a guest request (such as 198# a guest-initiated ACPI reboot request or other hardware-specific 199# action) rather than a host request (such as the QMP command 200# system_reset). (since 2.10) 201# 202# @reason: The @ShutdownCause of the RESET. (since 4.0) 203# 204# Since: 0.12 205# 206# Example: 207# 208# <- { "event": "RESET", 209# "data": { "guest": false, "reason": "guest-reset" }, 210# "timestamp": { "seconds": 1267041653, "microseconds": 9518 } } 211## 212{ 'event': 'RESET', 'data': { 'guest': 'bool', 'reason': 'ShutdownCause' } } 213 214## 215# @STOP: 216# 217# Emitted when the virtual machine is stopped 218# 219# Since: 0.12 220# 221# Example: 222# 223# <- { "event": "STOP", 224# "timestamp": { "seconds": 1267041730, "microseconds": 281295 } } 225## 226{ 'event': 'STOP' } 227 228## 229# @RESUME: 230# 231# Emitted when the virtual machine resumes execution 232# 233# Since: 0.12 234# 235# Example: 236# 237# <- { "event": "RESUME", 238# "timestamp": { "seconds": 1271770767, "microseconds": 582542 } } 239## 240{ 'event': 'RESUME' } 241 242## 243# @SUSPEND: 244# 245# Emitted when guest enters a hardware suspension state, for example, 246# S3 state, which is sometimes called standby state 247# 248# Since: 1.1 249# 250# Example: 251# 252# <- { "event": "SUSPEND", 253# "timestamp": { "seconds": 1344456160, "microseconds": 309119 } } 254## 255{ 'event': 'SUSPEND' } 256 257## 258# @SUSPEND_DISK: 259# 260# Emitted when guest enters a hardware suspension state with data 261# saved on disk, for example, S4 state, which is sometimes called 262# hibernate state 263# 264# Note: QEMU shuts down (similar to event @SHUTDOWN) when entering 265# this state 266# 267# Since: 1.2 268# 269# Example: 270# 271# <- { "event": "SUSPEND_DISK", 272# "timestamp": { "seconds": 1344456160, "microseconds": 309119 } } 273## 274{ 'event': 'SUSPEND_DISK' } 275 276## 277# @WAKEUP: 278# 279# Emitted when the guest has woken up from suspend state and is 280# running 281# 282# Since: 1.1 283# 284# Example: 285# 286# <- { "event": "WAKEUP", 287# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } } 288## 289{ 'event': 'WAKEUP' } 290 291## 292# @WATCHDOG: 293# 294# Emitted when the watchdog device's timer is expired 295# 296# @action: action that has been taken 297# 298# Note: If action is "reset", "shutdown", or "pause" the WATCHDOG 299# event is followed respectively by the RESET, SHUTDOWN, or STOP 300# events 301# 302# Note: This event is rate-limited. 303# 304# Since: 0.13 305# 306# Example: 307# 308# <- { "event": "WATCHDOG", 309# "data": { "action": "reset" }, 310# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } } 311## 312{ 'event': 'WATCHDOG', 313 'data': { 'action': 'WatchdogAction' } } 314 315## 316# @WatchdogAction: 317# 318# An enumeration of the actions taken when the watchdog device's timer 319# is expired 320# 321# @reset: system resets 322# 323# @shutdown: system shutdown, note that it is similar to @powerdown, 324# which tries to set to system status and notify guest 325# 326# @poweroff: system poweroff, the emulator program exits 327# 328# @pause: system pauses, similar to @stop 329# 330# @debug: system enters debug state 331# 332# @none: nothing is done 333# 334# @inject-nmi: a non-maskable interrupt is injected into the first 335# VCPU (all VCPUS on x86) (since 2.4) 336# 337# Since: 2.1 338## 339{ 'enum': 'WatchdogAction', 340 'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none', 341 'inject-nmi' ] } 342 343## 344# @RebootAction: 345# 346# Possible QEMU actions upon guest reboot 347# 348# @reset: Reset the VM 349# 350# @shutdown: Shutdown the VM and exit, according to the shutdown 351# action 352# 353# Since: 6.0 354## 355{ 'enum': 'RebootAction', 356 'data': [ 'reset', 'shutdown' ] } 357 358## 359# @ShutdownAction: 360# 361# Possible QEMU actions upon guest shutdown 362# 363# @poweroff: Shutdown the VM and exit 364# 365# @pause: pause the VM 366# 367# Since: 6.0 368## 369{ 'enum': 'ShutdownAction', 370 'data': [ 'poweroff', 'pause' ] } 371 372## 373# @PanicAction: 374# 375# @none: Continue VM execution 376# 377# @pause: Pause the VM 378# 379# @shutdown: Shutdown the VM and exit, according to the shutdown 380# action 381# 382# @exit-failure: Shutdown the VM and exit with nonzero status (since 383# 7.1) 384# 385# Since: 6.0 386## 387{ 'enum': 'PanicAction', 388 'data': [ 'pause', 'shutdown', 'exit-failure', 'none' ] } 389 390## 391# @watchdog-set-action: 392# 393# Set watchdog action 394# 395# Since: 2.11 396## 397{ 'command': 'watchdog-set-action', 'data' : {'action': 'WatchdogAction'} } 398 399## 400# @set-action: 401# 402# Set the actions that will be taken by the emulator in response to 403# guest events. 404# 405# @reboot: @RebootAction action taken on guest reboot. 406# 407# @shutdown: @ShutdownAction action taken on guest shutdown. 408# 409# @panic: @PanicAction action taken on guest panic. 410# 411# @watchdog: @WatchdogAction action taken when watchdog timer expires 412# . 413# 414# Returns: Nothing on success. 415# 416# Since: 6.0 417# 418# Example: 419# 420# -> { "execute": "set-action", 421# "arguments": { "reboot": "shutdown", 422# "shutdown" : "pause", 423# "panic": "pause", 424# "watchdog": "inject-nmi" } } 425# <- { "return": {} } 426## 427{ 'command': 'set-action', 428 'data': { '*reboot': 'RebootAction', 429 '*shutdown': 'ShutdownAction', 430 '*panic': 'PanicAction', 431 '*watchdog': 'WatchdogAction' }, 432 'allow-preconfig': true } 433 434## 435# @GUEST_PANICKED: 436# 437# Emitted when guest OS panic is detected 438# 439# @action: action that has been taken, currently always "pause" 440# 441# @info: information about a panic (since 2.9) 442# 443# Since: 1.5 444# 445# Example: 446# 447# <- { "event": "GUEST_PANICKED", 448# "data": { "action": "pause" }, 449# "timestamp": { "seconds": 1648245231, "microseconds": 900001 } } 450## 451{ 'event': 'GUEST_PANICKED', 452 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } } 453 454## 455# @GUEST_CRASHLOADED: 456# 457# Emitted when guest OS crash loaded is detected 458# 459# @action: action that has been taken, currently always "run" 460# 461# @info: information about a panic 462# 463# Since: 5.0 464# 465# Example: 466# 467# <- { "event": "GUEST_CRASHLOADED", 468# "data": { "action": "run" }, 469# "timestamp": { "seconds": 1648245259, "microseconds": 893771 } } 470## 471{ 'event': 'GUEST_CRASHLOADED', 472 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } } 473 474## 475# @GuestPanicAction: 476# 477# An enumeration of the actions taken when guest OS panic is detected 478# 479# @pause: system pauses 480# 481# @poweroff: system powers off (since 2.8) 482# 483# @run: system continues to run (since 5.0) 484# 485# Since: 2.1 486## 487{ 'enum': 'GuestPanicAction', 488 'data': [ 'pause', 'poweroff', 'run' ] } 489 490## 491# @GuestPanicInformationType: 492# 493# An enumeration of the guest panic information types 494# 495# @hyper-v: hyper-v guest panic information type 496# 497# @s390: s390 guest panic information type (Since: 2.12) 498# 499# Since: 2.9 500## 501{ 'enum': 'GuestPanicInformationType', 502 'data': [ 'hyper-v', 's390' ] } 503 504## 505# @GuestPanicInformation: 506# 507# Information about a guest panic 508# 509# @type: Crash type that defines the hypervisor specific information 510# 511# Since: 2.9 512## 513{'union': 'GuestPanicInformation', 514 'base': {'type': 'GuestPanicInformationType'}, 515 'discriminator': 'type', 516 'data': {'hyper-v': 'GuestPanicInformationHyperV', 517 's390': 'GuestPanicInformationS390'}} 518 519## 520# @GuestPanicInformationHyperV: 521# 522# Hyper-V specific guest panic information (HV crash MSRs) 523# 524# Since: 2.9 525## 526{'struct': 'GuestPanicInformationHyperV', 527 'data': {'arg1': 'uint64', 528 'arg2': 'uint64', 529 'arg3': 'uint64', 530 'arg4': 'uint64', 531 'arg5': 'uint64'}} 532 533## 534# @S390CrashReason: 535# 536# Reason why the CPU is in a crashed state. 537# 538# @unknown: no crash reason was set 539# 540# @disabled-wait: the CPU has entered a disabled wait state 541# 542# @extint-loop: clock comparator or cpu timer interrupt with new PSW 543# enabled for external interrupts 544# 545# @pgmint-loop: program interrupt with BAD new PSW 546# 547# @opint-loop: operation exception interrupt with invalid code at the 548# program interrupt new PSW 549# 550# Since: 2.12 551## 552{ 'enum': 'S390CrashReason', 553 'data': [ 'unknown', 554 'disabled-wait', 555 'extint-loop', 556 'pgmint-loop', 557 'opint-loop' ] } 558 559## 560# @GuestPanicInformationS390: 561# 562# S390 specific guest panic information (PSW) 563# 564# @core: core id of the CPU that crashed 565# 566# @psw-mask: control fields of guest PSW 567# 568# @psw-addr: guest instruction address 569# 570# @reason: guest crash reason 571# 572# Since: 2.12 573## 574{'struct': 'GuestPanicInformationS390', 575 'data': {'core': 'uint32', 576 'psw-mask': 'uint64', 577 'psw-addr': 'uint64', 578 'reason': 'S390CrashReason'}} 579 580## 581# @MEMORY_FAILURE: 582# 583# Emitted when a memory failure occurs on host side. 584# 585# @recipient: recipient is defined as @MemoryFailureRecipient. 586# 587# @action: action that has been taken. action is defined as 588# @MemoryFailureAction. 589# 590# @flags: flags for MemoryFailureAction. action is defined as 591# @MemoryFailureFlags. 592# 593# Since: 5.2 594# 595# Example: 596# 597# <- { "event": "MEMORY_FAILURE", 598# "data": { "recipient": "hypervisor", 599# "action": "fatal", 600# "flags": { "action-required": false, 601# "recursive": false } }, 602# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } } 603## 604{ 'event': 'MEMORY_FAILURE', 605 'data': { 'recipient': 'MemoryFailureRecipient', 606 'action': 'MemoryFailureAction', 607 'flags': 'MemoryFailureFlags'} } 608 609## 610# @MemoryFailureRecipient: 611# 612# Hardware memory failure occurs, handled by recipient. 613# 614# @hypervisor: memory failure at QEMU process address space. (none 615# guest memory, but used by QEMU itself). 616# 617# @guest: memory failure at guest memory, 618# 619# Since: 5.2 620## 621{ 'enum': 'MemoryFailureRecipient', 622 'data': [ 'hypervisor', 623 'guest' ] } 624 625## 626# @MemoryFailureAction: 627# 628# Actions taken by QEMU in response to a hardware memory failure. 629# 630# @ignore: the memory failure could be ignored. This will only be the 631# case for action-optional failures. 632# 633# @inject: memory failure occurred in guest memory, the guest enabled 634# MCE handling mechanism, and QEMU could inject the MCE into the 635# guest successfully. 636# 637# @fatal: the failure is unrecoverable. This occurs for 638# action-required failures if the recipient is the hypervisor; 639# QEMU will exit. 640# 641# @reset: the failure is unrecoverable but confined to the guest. 642# This occurs if the recipient is a guest guest which is not ready 643# to handle memory failures. 644# 645# Since: 5.2 646## 647{ 'enum': 'MemoryFailureAction', 648 'data': [ 'ignore', 649 'inject', 650 'fatal', 651 'reset' ] } 652 653## 654# @MemoryFailureFlags: 655# 656# Additional information on memory failures. 657# 658# @action-required: whether a memory failure event is action-required 659# or action-optional (e.g. a failure during memory scrub). 660# 661# @recursive: whether the failure occurred while the previous failure 662# was still in progress. 663# 664# Since: 5.2 665## 666{ 'struct': 'MemoryFailureFlags', 667 'data': { 'action-required': 'bool', 668 'recursive': 'bool'} } 669 670## 671# @NotifyVmexitOption: 672# 673# An enumeration of the options specified when enabling notify VM exit 674# 675# @run: enable the feature, do nothing and continue if the notify VM 676# exit happens. 677# 678# @internal-error: enable the feature, raise a internal error if the 679# notify VM exit happens. 680# 681# @disable: disable the feature. 682# 683# Since: 7.2 684## 685{ 'enum': 'NotifyVmexitOption', 686 'data': [ 'run', 'internal-error', 'disable' ] } 687