mirror of https://github.com/xemu-project/xemu.git
QAPI patches for 2017-05-23
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJZJB4MAAoJEDhwtADrkYZTjhkP+wRaiZj9h4IJvcWoNEzfyuA1 kd7+Kx6QgfCmZE9vL2/mlOFddWL0fPtPffL/ZRu5UNgIILaCSPFsGkOGvXLZhaUW he5sqLCqMc2mxgB98HpbT0dzt0cOSCjdM5BxkFXeq/yPoDa0IiZiD8cpvj+FVwKi D0qGdrKKGCR3RteL4gr/kaXY/LXAZfuEjbAtylQx1aMHJ6CKmdSIVVVU2JJVIYhQ +dT/Xst0PSkJYk90wgmwpzPCqKR/N5zHFe8CyUoE67FxBhegdw19O3wlzU9DJ3N5 8Az+fbEjifWoMytTZR4H3snPJGwl6wxsh2UVj9SMCvebc0y278UPlGqiszvWBepa 1iZHHULH+yygHyUmX6CxjHOUW498ES2KGHx7qJJe8ebeJ4XuU7JcE+Sf4GQEAm8Q p6P5s3qXpuVjekCjmerUAtybr+hxEQC9fbAGqPq+r489jwjvUiETrMLbmEHyy/Xa fSUaW+f5kGI0GJS9FYcbcMy9w2130lTK2k4bZM0mSVlSsHA7W0GBDnzxUDtxo6uH oqMQgKIFWOBU5GkRUiL43vpiTIpiLCuG6PbQlgefQRPWdoODVxykuu2bq5hVaax8 8XMkkq7isG/J5esFc55L1qEUyrUDtVYx/LiHj0XXJikkGirXtp7b7l/TmFLZGsex UWWzFRbZnCVf2CKwdV6h =DNqn -----END PGP SIGNATURE----- Merge remote-tracking branch 'armbru/tags/pull-qapi-2017-05-23' into staging QAPI patches for 2017-05-23 # gpg: Signature made Tue 23 May 2017 12:33:32 PM BST # gpg: using RSA key 0x3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * armbru/tags/pull-qapi-2017-05-23: qapi-schema: Remove obsolete note from ObjectTypeInfo block: Use QDict helpers for --force-share shutdown: Expose bool cause in SHUTDOWN and RESET events shutdown: Add source information to SHUTDOWN and RESET shutdown: Preserve shutdown cause through replay shutdown: Prepare for use of an enum in reset/shutdown_request shutdown: Simplify shutdown_signal sockets: Plug memory leak in socket_address_flatten() scripts/qmp/qom-set: fix the value argument passed to srv.command() Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
d0eda02938
|
@ -561,7 +561,7 @@ static void acpi_pm1_cnt_write(ACPIREGS *ar, uint16_t val)
|
|||
uint16_t sus_typ = (val >> 10) & 7;
|
||||
switch(sus_typ) {
|
||||
case 0: /* soft power off */
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
break;
|
||||
case 1:
|
||||
qemu_system_suspend_request();
|
||||
|
@ -569,7 +569,7 @@ static void acpi_pm1_cnt_write(ACPIREGS *ar, uint16_t val)
|
|||
default:
|
||||
if (sus_typ == ar->pm1.cnt.s4_val) { /* S4 request */
|
||||
qapi_event_send_suspend_disk(&error_abort);
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -108,9 +108,9 @@ static void hb_regs_write(void *opaque, hwaddr offset,
|
|||
|
||||
if (offset == 0xf00) {
|
||||
if (value == 1 || value == 2) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
} else if (value == 3) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ static void integratorcm_do_remap(IntegratorCMState *s)
|
|||
static void integratorcm_set_ctrl(IntegratorCMState *s, uint32_t value)
|
||||
{
|
||||
if (value & 8) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
if ((s->cm_ctrl ^ value) & 1) {
|
||||
/* (value & 1) != 0 means the green "MISC LED" is lit.
|
||||
|
|
|
@ -898,7 +898,7 @@ static void mv88w8618_pit_write(void *opaque, hwaddr offset,
|
|||
|
||||
case MP_BOARD_RESET:
|
||||
if (value == MP_BOARD_RESET_MAGIC) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -355,7 +355,7 @@ static void omap_wd_timer_write(void *opaque, hwaddr addr,
|
|||
/* XXX: on T|E hardware somehow this has no effect,
|
||||
* on Zire 71 it works as specified. */
|
||||
s->reset = 1;
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
s->last_wr = value & 0xff;
|
||||
|
@ -1545,8 +1545,10 @@ static inline void omap_clkm_idlect1_update(struct omap_mpu_state_s *s,
|
|||
if (value & (1 << 11)) { /* SETARM_IDLE */
|
||||
cpu_interrupt(CPU(s->cpu), CPU_INTERRUPT_HALT);
|
||||
}
|
||||
if (!(value & (1 << 10))) /* WKUP_MODE */
|
||||
qemu_system_shutdown_request(); /* XXX: disable wakeup from IRQ */
|
||||
if (!(value & (1 << 10))) { /* WKUP_MODE */
|
||||
/* XXX: disable wakeup from IRQ */
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
|
||||
#define SET_CANIDLE(clock, bit) \
|
||||
if (diff & (1 << bit)) { \
|
||||
|
@ -1693,7 +1695,7 @@ static void omap_clkm_write(void *opaque, hwaddr addr,
|
|||
diff = s->clkm.arm_rstct1 ^ value;
|
||||
s->clkm.arm_rstct1 = value & 0x0007;
|
||||
if (value & 9) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
s->clkm.cold_start = 0xa;
|
||||
}
|
||||
if (diff & ~value & 4) { /* DSP_RST */
|
||||
|
|
|
@ -1610,7 +1610,7 @@ static void omap_prcm_write(void *opaque, hwaddr addr,
|
|||
case 0x450: /* RM_RSTCTRL_WKUP */
|
||||
/* TODO: reset */
|
||||
if (value & 2)
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
break;
|
||||
case 0x454: /* RM_RSTTIME_WKUP */
|
||||
s->rsttime_wkup = value & 0x1fff;
|
||||
|
|
|
@ -848,7 +848,7 @@ static void spitz_lcd_hsync_handler(void *opaque, int line, int level)
|
|||
static void spitz_reset(void *opaque, int line, int level)
|
||||
{
|
||||
if (level) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1197,7 +1197,7 @@ static
|
|||
void do_sys_reset(void *opaque, int n, int level)
|
||||
{
|
||||
if (level) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ static void tosa_out_switch(void *opaque, int line, int level)
|
|||
static void tosa_reset(void *opaque, int line, int level)
|
||||
{
|
||||
if (level) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -519,7 +519,7 @@ static void port92_write(void *opaque, hwaddr addr, uint64_t val,
|
|||
s->outport = val;
|
||||
qemu_set_irq(s->a20_out, (val >> 1) & 1);
|
||||
if ((val & 1) && !(oldval & 1)) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1089,11 +1089,14 @@ static void cpu_handle_ioreq(void *opaque)
|
|||
* causes Xen to powerdown the domain.
|
||||
*/
|
||||
if (runstate_is_running()) {
|
||||
ShutdownCause request;
|
||||
|
||||
if (qemu_shutdown_requested_get()) {
|
||||
destroy_hvm_domain(false);
|
||||
}
|
||||
if (qemu_reset_requested_get()) {
|
||||
qemu_system_reset(VMRESET_REPORT);
|
||||
request = qemu_reset_requested_get();
|
||||
if (request) {
|
||||
qemu_system_reset(request);
|
||||
destroy_hvm_domain(true);
|
||||
}
|
||||
}
|
||||
|
@ -1395,7 +1398,7 @@ void xen_shutdown_fatal_error(const char *fmt, ...)
|
|||
va_end(ap);
|
||||
fprintf(stderr, "Will destroy the domain.\n");
|
||||
/* destroy the domain */
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_ERROR);
|
||||
}
|
||||
|
||||
void xen_hvm_modified_memory(ram_addr_t start, ram_addr_t length)
|
||||
|
|
|
@ -226,7 +226,7 @@ static void outport_write(KBDState *s, uint32_t val)
|
|||
s->outport = val;
|
||||
qemu_set_irq(s->a20_out, (val >> 1) & 1);
|
||||
if (!(val & 1)) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -301,7 +301,7 @@ static void kbd_write_command(void *opaque, hwaddr addr,
|
|||
s->outport &= ~KBD_OUT_A20;
|
||||
break;
|
||||
case KBD_CCMD_RESET:
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
break;
|
||||
case KBD_CCMD_NO_OP:
|
||||
/* ignore that */
|
||||
|
|
|
@ -44,14 +44,14 @@ static int ipmi_do_hw_op(IPMIInterface *s, enum ipmi_op op, int checkonly)
|
|||
if (checkonly) {
|
||||
return 0;
|
||||
}
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return 0;
|
||||
|
||||
case IPMI_POWEROFF_CHASSIS:
|
||||
if (checkonly) {
|
||||
return 0;
|
||||
}
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
return 0;
|
||||
|
||||
case IPMI_SEND_NMI:
|
||||
|
|
|
@ -606,7 +606,7 @@ static void ich9_rst_cnt_write(void *opaque, hwaddr addr, uint64_t val,
|
|||
ICH9LPCState *lpc = opaque;
|
||||
|
||||
if (val & 4) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return;
|
||||
}
|
||||
lpc->rst_cnt = val & 0xA; /* keep FULL_RST (bit 3) and SYS_RST (bit 1) */
|
||||
|
|
|
@ -232,7 +232,7 @@ static void boston_platreg_write(void *opaque, hwaddr addr,
|
|||
break;
|
||||
case PLAT_SOFTRST_CTL:
|
||||
if (val & PLAT_SOFTRST_CTL_SYSRESET) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -470,7 +470,7 @@ static void malta_fpga_write(void *opaque, hwaddr addr,
|
|||
/* SOFTRES Register */
|
||||
case 0x00500:
|
||||
if (val == 0x42)
|
||||
qemu_system_reset_request ();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
break;
|
||||
|
||||
/* BRKRES Register */
|
||||
|
|
|
@ -53,9 +53,9 @@ static void mips_qemu_write (void *opaque, hwaddr addr,
|
|||
uint64_t val, unsigned size)
|
||||
{
|
||||
if ((addr & 0xffff) == 0 && val == 42)
|
||||
qemu_system_reset_request ();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
else if ((addr & 0xffff) == 4 && val == 42)
|
||||
qemu_system_shutdown_request ();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
|
||||
static uint64_t mips_qemu_read (void *opaque, hwaddr addr,
|
||||
|
|
|
@ -351,13 +351,13 @@ static bool vexpress_cfgctrl_write(arm_sysctl_state *s, unsigned int dcc,
|
|||
break;
|
||||
case SYS_CFG_SHUTDOWN:
|
||||
if (site == SYS_CFG_SITE_MB && device == 0) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case SYS_CFG_REBOOT:
|
||||
if (site == SYS_CFG_SITE_MB && device == 0) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
@ -429,7 +429,7 @@ static void arm_sysctl_write(void *opaque, hwaddr offset,
|
|||
if (s->lockval == LOCK_VALUE) {
|
||||
s->resetlevel = val;
|
||||
if (val & 0x100) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -438,7 +438,7 @@ static void arm_sysctl_write(void *opaque, hwaddr offset,
|
|||
if (s->lockval == LOCK_VALUE) {
|
||||
s->resetlevel = val;
|
||||
if (val & 0x04) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -356,7 +356,7 @@ static inline void retu_write(CBusRetu *s, int reg, uint16_t val)
|
|||
|
||||
case RETU_REG_WATCHDOG:
|
||||
if (val == 0 && (s->cc[0] & 2))
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
break;
|
||||
|
||||
case RETU_REG_TXCR:
|
||||
|
|
|
@ -612,7 +612,7 @@ static bool cuda_cmd_powerdown(CUDAState *s,
|
|||
return false;
|
||||
}
|
||||
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -624,7 +624,7 @@ static bool cuda_cmd_reset_system(CUDAState *s,
|
|||
return false;
|
||||
}
|
||||
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -258,7 +258,7 @@ static void slavio_aux2_mem_writeb(void *opaque, hwaddr addr,
|
|||
val &= AUX2_PWROFF;
|
||||
s->aux2 = val;
|
||||
if (val & AUX2_PWROFF)
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
slavio_misc_update_irq(s);
|
||||
}
|
||||
|
||||
|
@ -338,7 +338,7 @@ static void slavio_sysctrl_mem_writel(void *opaque, hwaddr addr,
|
|||
case 0:
|
||||
if (val & SYS_RESET) {
|
||||
s->sysctrl = SYS_RESETSTAT;
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -405,7 +405,7 @@ static void zynq_slcr_write(void *opaque, hwaddr offset,
|
|||
switch (offset) {
|
||||
case PSS_RST_CTRL:
|
||||
if (val & R_PSS_RST_CTRL_SOFT_RST) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -482,9 +482,9 @@ static void apb_config_writel (void *opaque, hwaddr addr,
|
|||
s->reset_control |= val & RESET_WMASK;
|
||||
if (val & SOFT_POR) {
|
||||
s->nr_resets = 0;
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
} else if (val & SOFT_XIR) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -269,7 +269,7 @@ static void bonito_writel(void *opaque, hwaddr addr,
|
|||
}
|
||||
s->regs[saddr] = val;
|
||||
if (reset) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
case BONITO_INTENSET:
|
||||
|
|
|
@ -632,7 +632,7 @@ static void rcr_write(void *opaque, hwaddr addr, uint64_t val, unsigned len)
|
|||
PIIX3State *d = opaque;
|
||||
|
||||
if (val & 4) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return;
|
||||
}
|
||||
d->rcr = val & 2; /* keep System Reset type only */
|
||||
|
|
|
@ -774,7 +774,7 @@ static qemu_irq *ppce500_init_mpic(MachineState *machine, PPCE500Params *params,
|
|||
static void ppce500_power_off(void *opaque, int line, int on)
|
||||
{
|
||||
if (on) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ static void mpc8544_guts_write(void *opaque, hwaddr addr,
|
|||
switch (addr) {
|
||||
case MPC8544_GUTS_ADDR_RSTCR:
|
||||
if (value & MPC8544_GUTS_RSTCR_RESET) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -412,7 +412,7 @@ static void ppce500_set_irq(void *opaque, int pin, int level)
|
|||
if (level) {
|
||||
LOG_IRQ("%s: reset the PowerPC system\n",
|
||||
__func__);
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
case PPCE500_INPUT_RESET_CORE:
|
||||
|
|
|
@ -1807,7 +1807,7 @@ void ppc40x_chip_reset(PowerPCCPU *cpu)
|
|||
void ppc40x_system_reset(PowerPCCPU *cpu)
|
||||
{
|
||||
printf("Reset PowerPC system\n");
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
|
||||
void store_40x_dbcr0 (CPUPPCState *env, uint32_t val)
|
||||
|
|
|
@ -1162,7 +1162,7 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,
|
|||
spapr_ovec_cleanup(ov5_updates);
|
||||
|
||||
if (spapr->cas_reboot) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
} else {
|
||||
/* If ppc_spapr_reset() did not set up a HPT but one is necessary
|
||||
* (because the guest isn't going to use radix) then set it up here. */
|
||||
|
|
|
@ -110,7 +110,7 @@ static void rtas_power_off(PowerPCCPU *cpu, sPAPRMachineState *spapr,
|
|||
rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
|
||||
return;
|
||||
}
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
cpu_stop_current();
|
||||
rtas_st(rets, 0, RTAS_OUT_SUCCESS);
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ static void rtas_system_reboot(PowerPCCPU *cpu, sPAPRMachineState *spapr,
|
|||
rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);
|
||||
return;
|
||||
}
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
rtas_st(rets, 0, RTAS_OUT_SUCCESS);
|
||||
}
|
||||
|
||||
|
|
|
@ -396,7 +396,7 @@ void s390_reipl_request(void)
|
|||
S390IPLState *ipl = get_ipl_device();
|
||||
|
||||
ipl->reipl_requested = true;
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
|
||||
void s390_ipl_prepare_cpu(S390CPU *cpu)
|
||||
|
|
|
@ -164,7 +164,7 @@ r2d_fpga_write(void *opaque, hwaddr addr, uint64_t value, unsigned int size)
|
|||
break;
|
||||
case PA_POWOFF:
|
||||
if (value & 1) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
break;
|
||||
case PA_VERREG:
|
||||
|
|
|
@ -207,7 +207,7 @@ static void watchdog_hit(void *opaque)
|
|||
qemu_irq_raise(t->nmi);
|
||||
}
|
||||
else
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
|
||||
t->wd_hits++;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* QEMU M48T59 and M48T08 NVRAM emulation for PPC PREP and Sparc platforms
|
||||
*
|
||||
* Copyright (c) 2003-2005, 2007 Jocelyn Mayer
|
||||
* Copyright (c) 2003-2005, 2007, 2017 Jocelyn Mayer
|
||||
* Copyright (c) 2013 Hervé Poussineau
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
@ -159,7 +159,7 @@ static void watchdog_cb (void *opaque)
|
|||
NVRAM->buffer[0x1FF7] = 0x00;
|
||||
NVRAM->buffer[0x1FFC] &= ~0x40;
|
||||
/* May it be a hw CPU Reset instead ? */
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
} else {
|
||||
qemu_set_irq(NVRAM->IRQ, 1);
|
||||
qemu_set_irq(NVRAM->IRQ, 0);
|
||||
|
|
|
@ -90,7 +90,7 @@ static void sysctl_icap_write(MilkymistSysctlState *s, uint32_t value)
|
|||
trace_milkymist_sysctl_icap_write(value);
|
||||
switch (value & 0xffff) {
|
||||
case 0x000e:
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ static void sysctl_write(void *opaque, hwaddr addr, uint64_t value,
|
|||
s->regs[addr] = 1;
|
||||
break;
|
||||
case R_SYSTEM_ID:
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
break;
|
||||
|
||||
case R_GPIO_IN:
|
||||
|
|
|
@ -401,7 +401,7 @@ static void pxa2xx_timer_tick(void *opaque)
|
|||
if (t->num == 3)
|
||||
if (i->reset3 & 1) {
|
||||
i->reset3 = 0;
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@ void watchdog_perform_action(void)
|
|||
switch (watchdog_action) {
|
||||
case WDT_RESET: /* same as 'system_reset' in monitor */
|
||||
qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_RESET, &error_abort);
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
break;
|
||||
|
||||
case WDT_SHUTDOWN: /* same as 'system_powerdown' in monitor */
|
||||
|
|
|
@ -148,7 +148,7 @@ static void xen_domain_poll(void *opaque)
|
|||
return;
|
||||
|
||||
quit:
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
|
||||
static int xen_domain_watcher(void)
|
||||
|
|
|
@ -100,7 +100,7 @@ static void lx60_fpga_write(void *opaque, hwaddr addr,
|
|||
|
||||
case 0x10: /*board reset*/
|
||||
if (val == 0xdead) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
*/
|
||||
|
||||
#include "qapi-types.h"
|
||||
#include "sysemu.h"
|
||||
|
||||
/* replay clock kinds */
|
||||
enum ReplayClockKind {
|
||||
|
@ -98,7 +99,7 @@ int64_t replay_read_clock(ReplayClockKind kind);
|
|||
/* Events */
|
||||
|
||||
/*! Called when qemu shutdown is requested. */
|
||||
void replay_shutdown_request(void);
|
||||
void replay_shutdown_request(ShutdownCause cause);
|
||||
/*! Should be called at check points in the execution.
|
||||
These check points are skipped, if they were not met.
|
||||
Saves checkpoint in the SAVE mode and validates in the PLAY mode.
|
||||
|
|
|
@ -33,8 +33,26 @@ VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
|
|||
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
|
||||
void vm_state_notify(int running, RunState state);
|
||||
|
||||
#define VMRESET_SILENT false
|
||||
#define VMRESET_REPORT true
|
||||
/* Enumeration of various causes for shutdown. */
|
||||
typedef enum ShutdownCause {
|
||||
SHUTDOWN_CAUSE_NONE, /* No shutdown request pending */
|
||||
SHUTDOWN_CAUSE_HOST_ERROR, /* An error prevents further use of guest */
|
||||
SHUTDOWN_CAUSE_HOST_QMP, /* Reaction to a QMP command, like 'quit' */
|
||||
SHUTDOWN_CAUSE_HOST_SIGNAL, /* Reaction to a signal, such as SIGINT */
|
||||
SHUTDOWN_CAUSE_HOST_UI, /* Reaction to UI event, like window close */
|
||||
SHUTDOWN_CAUSE_GUEST_SHUTDOWN,/* Guest shutdown/suspend request, via
|
||||
ACPI or other hardware-specific means */
|
||||
SHUTDOWN_CAUSE_GUEST_RESET, /* Guest reset request, and command line
|
||||
turns that into a shutdown */
|
||||
SHUTDOWN_CAUSE_GUEST_PANIC, /* Guest panicked, and command line turns
|
||||
that into a shutdown */
|
||||
SHUTDOWN_CAUSE__MAX,
|
||||
} ShutdownCause;
|
||||
|
||||
static inline bool shutdown_caused_by_guest(ShutdownCause cause)
|
||||
{
|
||||
return cause >= SHUTDOWN_CAUSE_GUEST_SHUTDOWN;
|
||||
}
|
||||
|
||||
void vm_start(void);
|
||||
int vm_prepare_start(void);
|
||||
|
@ -49,23 +67,23 @@ typedef enum WakeupReason {
|
|||
QEMU_WAKEUP_REASON_OTHER,
|
||||
} WakeupReason;
|
||||
|
||||
void qemu_system_reset_request(void);
|
||||
void qemu_system_reset_request(ShutdownCause reason);
|
||||
void qemu_system_suspend_request(void);
|
||||
void qemu_register_suspend_notifier(Notifier *notifier);
|
||||
void qemu_system_wakeup_request(WakeupReason reason);
|
||||
void qemu_system_wakeup_enable(WakeupReason reason, bool enabled);
|
||||
void qemu_register_wakeup_notifier(Notifier *notifier);
|
||||
void qemu_system_shutdown_request(void);
|
||||
void qemu_system_shutdown_request(ShutdownCause reason);
|
||||
void qemu_system_powerdown_request(void);
|
||||
void qemu_register_powerdown_notifier(Notifier *notifier);
|
||||
void qemu_system_debug_request(void);
|
||||
void qemu_system_vmstop_request(RunState reason);
|
||||
void qemu_system_vmstop_request_prepare(void);
|
||||
bool qemu_vmstop_requested(RunState *r);
|
||||
int qemu_shutdown_requested_get(void);
|
||||
int qemu_reset_requested_get(void);
|
||||
ShutdownCause qemu_shutdown_requested_get(void);
|
||||
ShutdownCause qemu_reset_requested_get(void);
|
||||
void qemu_system_killed(int signal, pid_t pid);
|
||||
void qemu_system_reset(bool report);
|
||||
void qemu_system_reset(ShutdownCause reason);
|
||||
void qemu_system_guest_panicked(GuestPanicInformation *info);
|
||||
|
||||
void qemu_add_exit_notifier(Notifier *notify);
|
||||
|
|
|
@ -2052,7 +2052,7 @@ int kvm_cpu_exec(CPUState *cpu)
|
|||
break;
|
||||
case KVM_EXIT_SHUTDOWN:
|
||||
DPRINTF("shutdown\n");
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
ret = EXCP_INTERRUPT;
|
||||
break;
|
||||
case KVM_EXIT_UNKNOWN:
|
||||
|
@ -2066,11 +2066,11 @@ int kvm_cpu_exec(CPUState *cpu)
|
|||
case KVM_EXIT_SYSTEM_EVENT:
|
||||
switch (run->system_event.type) {
|
||||
case KVM_SYSTEM_EVENT_SHUTDOWN:
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
ret = EXCP_INTERRUPT;
|
||||
break;
|
||||
case KVM_SYSTEM_EVENT_RESET:
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
ret = EXCP_INTERRUPT;
|
||||
break;
|
||||
case KVM_SYSTEM_EVENT_CRASH:
|
||||
|
|
|
@ -626,7 +626,7 @@ void *colo_process_incoming_thread(void *opaque)
|
|||
}
|
||||
|
||||
qemu_mutex_lock_iothread();
|
||||
qemu_system_reset(VMRESET_SILENT);
|
||||
qemu_system_reset(SHUTDOWN_CAUSE_NONE);
|
||||
vmstate_loading = true;
|
||||
if (qemu_loadvm_state(fb) < 0) {
|
||||
error_report("COLO: loadvm failed");
|
||||
|
|
|
@ -2281,7 +2281,7 @@ int load_vmstate(const char *name, Error **errp)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
qemu_system_reset(VMRESET_SILENT);
|
||||
qemu_system_reset(SHUTDOWN_CAUSE_NONE);
|
||||
mis->from_src_file = f;
|
||||
|
||||
aio_context_acquire(aio_context);
|
||||
|
|
|
@ -52,7 +52,7 @@ int setenv(const char *name, const char *value, int overwrite)
|
|||
|
||||
static BOOL WINAPI qemu_ctrl_handler(DWORD type)
|
||||
{
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_SIGNAL);
|
||||
/* Windows 7 kills application when the function returns.
|
||||
Sleep here to give QEMU a try for closing.
|
||||
Sleep period is 10000ms because Windows kills the program
|
||||
|
|
|
@ -3057,8 +3057,6 @@
|
|||
# @name: the type name found in the search
|
||||
#
|
||||
# Since: 1.1
|
||||
#
|
||||
# Notes: This command is experimental and may change syntax in future releases.
|
||||
##
|
||||
{ 'struct': 'ObjectTypeInfo',
|
||||
'data': { 'name': 'str' } }
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
# Emitted when the virtual machine has shut down, indicating that qemu is
|
||||
# about to exit.
|
||||
#
|
||||
# @guest: If true, the shutdown was triggered by a guest request (such as
|
||||
# a guest-initiated ACPI shutdown request or other hardware-specific action)
|
||||
# rather than a host request (such as sending qemu a SIGINT). (since 2.10)
|
||||
#
|
||||
# Note: If the command-line option "-no-shutdown" has been specified, qemu will
|
||||
# not exit, and a STOP event will eventually follow the SHUTDOWN event
|
||||
#
|
||||
|
@ -17,11 +21,11 @@
|
|||
#
|
||||
# Example:
|
||||
#
|
||||
# <- { "event": "SHUTDOWN",
|
||||
# <- { "event": "SHUTDOWN", "data": { "guest": true },
|
||||
# "timestamp": { "seconds": 1267040730, "microseconds": 682951 } }
|
||||
#
|
||||
##
|
||||
{ 'event': 'SHUTDOWN' }
|
||||
{ 'event': 'SHUTDOWN', 'data': { 'guest': 'bool' } }
|
||||
|
||||
##
|
||||
# @POWERDOWN:
|
||||
|
@ -44,15 +48,20 @@
|
|||
#
|
||||
# Emitted when the virtual machine is reset
|
||||
#
|
||||
# @guest: If true, the reset was triggered by a guest request (such as
|
||||
# a guest-initiated ACPI reboot request or other hardware-specific action)
|
||||
# rather than a host request (such as the QMP command system_reset).
|
||||
# (since 2.10)
|
||||
#
|
||||
# Since: 0.12.0
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# <- { "event": "RESET",
|
||||
# <- { "event": "RESET", "data": { "guest": false },
|
||||
# "timestamp": { "seconds": 1267041653, "microseconds": 9518 } }
|
||||
#
|
||||
##
|
||||
{ 'event': 'RESET' }
|
||||
{ 'event': 'RESET', 'data': { 'guest': 'bool' } }
|
||||
|
||||
##
|
||||
# @STOP:
|
||||
|
|
|
@ -296,7 +296,7 @@ static BlockBackend *img_open_opts(const char *optstr,
|
|||
error_report("--force-share/-U conflicts with image options");
|
||||
return NULL;
|
||||
}
|
||||
qdict_put(options, BDRV_OPT_FORCE_SHARE, qbool_from_bool(true));
|
||||
qdict_put_bool(options, BDRV_OPT_FORCE_SHARE, true);
|
||||
}
|
||||
blk = blk_new_open(NULL, NULL, options, flags, &local_err);
|
||||
if (!blk) {
|
||||
|
@ -326,7 +326,7 @@ static BlockBackend *img_open_file(const char *filename,
|
|||
}
|
||||
|
||||
if (force_share) {
|
||||
qdict_put(options, BDRV_OPT_FORCE_SHARE, qbool_from_bool(true));
|
||||
qdict_put_bool(options, BDRV_OPT_FORCE_SHARE, true);
|
||||
}
|
||||
blk = blk_new_open(filename, NULL, options, flags, &local_err);
|
||||
if (!blk) {
|
||||
|
@ -3156,8 +3156,7 @@ static int img_rebase(int argc, char **argv)
|
|||
if (!options) {
|
||||
options = qdict_new();
|
||||
}
|
||||
qdict_put(options, BDRV_OPT_FORCE_SHARE,
|
||||
qbool_from_bool(true));
|
||||
qdict_put_bool(options, BDRV_OPT_FORCE_SHARE, true);
|
||||
}
|
||||
bdrv_get_backing_filename(bs, backing_name, sizeof(backing_name));
|
||||
blk_old_backing = blk_new_open(backing_name, NULL,
|
||||
|
|
|
@ -76,7 +76,7 @@ static int openfile(char *name, int flags, bool writethrough, bool force_share,
|
|||
QDECREF(opts);
|
||||
return 1;
|
||||
}
|
||||
qdict_put(opts, BDRV_OPT_FORCE_SHARE, qbool_from_bool(true));
|
||||
qdict_put_bool(opts, BDRV_OPT_FORCE_SHARE, true);
|
||||
}
|
||||
qemuio_blk = blk_new_open(name, NULL, opts, flags, &local_err);
|
||||
if (!qemuio_blk) {
|
||||
|
|
4
qmp.c
4
qmp.c
|
@ -84,7 +84,7 @@ UuidInfo *qmp_query_uuid(Error **errp)
|
|||
void qmp_quit(Error **errp)
|
||||
{
|
||||
no_shutdown = 0;
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_QMP);
|
||||
}
|
||||
|
||||
void qmp_stop(Error **errp)
|
||||
|
@ -105,7 +105,7 @@ void qmp_stop(Error **errp)
|
|||
|
||||
void qmp_system_reset(Error **errp)
|
||||
{
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_HOST_QMP);
|
||||
}
|
||||
|
||||
void qmp_system_powerdown(Error **erp)
|
||||
|
|
|
@ -22,8 +22,9 @@ enum ReplayEvents {
|
|||
EVENT_EXCEPTION,
|
||||
/* for async events */
|
||||
EVENT_ASYNC,
|
||||
/* for shutdown request */
|
||||
/* for shutdown requests, range allows recovery of ShutdownCause */
|
||||
EVENT_SHUTDOWN,
|
||||
EVENT_SHUTDOWN_LAST = EVENT_SHUTDOWN + SHUTDOWN_CAUSE__MAX,
|
||||
/* for character device write event */
|
||||
EVENT_CHAR_WRITE,
|
||||
/* for character device read all event */
|
||||
|
|
|
@ -49,9 +49,10 @@ bool replay_next_event_is(int event)
|
|||
res = true;
|
||||
}
|
||||
switch (replay_state.data_kind) {
|
||||
case EVENT_SHUTDOWN:
|
||||
case EVENT_SHUTDOWN ... EVENT_SHUTDOWN_LAST:
|
||||
replay_finish_event();
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(replay_state.data_kind -
|
||||
EVENT_SHUTDOWN);
|
||||
break;
|
||||
default:
|
||||
/* clock, time_t, checkpoint and other events */
|
||||
|
@ -170,11 +171,11 @@ bool replay_has_interrupt(void)
|
|||
return res;
|
||||
}
|
||||
|
||||
void replay_shutdown_request(void)
|
||||
void replay_shutdown_request(ShutdownCause cause)
|
||||
{
|
||||
if (replay_mode == REPLAY_MODE_RECORD) {
|
||||
replay_mutex_lock();
|
||||
replay_put_event(EVENT_SHUTDOWN);
|
||||
replay_put_event(EVENT_SHUTDOWN + cause);
|
||||
replay_mutex_unlock();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,4 +61,4 @@ else:
|
|||
srv = QEMUMonitorProtocol(socket_path)
|
||||
srv.connect()
|
||||
|
||||
print srv.command('qom-set', path=path, property=prop, value=sys.argv[2])
|
||||
print srv.command('qom-set', path=path, property=prop, value=value)
|
||||
|
|
|
@ -60,9 +60,9 @@ void helper_tb_flush(CPUAlphaState *env)
|
|||
void helper_halt(uint64_t restart)
|
||||
{
|
||||
if (restart) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
} else {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ void arm_handle_psci_call(ARMCPU *cpu)
|
|||
}
|
||||
break;
|
||||
case QEMU_PSCI_0_2_FN_SYSTEM_RESET:
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
/* QEMU reset and shutdown are async requests, but PSCI
|
||||
* mandates that we never return from the reset/shutdown
|
||||
* call, so power the CPU off now so it doesn't execute
|
||||
|
@ -145,7 +145,7 @@ void arm_handle_psci_call(ARMCPU *cpu)
|
|||
*/
|
||||
goto cpu_off;
|
||||
case QEMU_PSCI_0_2_FN_SYSTEM_OFF:
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
goto cpu_off;
|
||||
case QEMU_PSCI_0_1_FN_CPU_ON:
|
||||
case QEMU_PSCI_0_2_FN_CPU_ON:
|
||||
|
|
|
@ -59,7 +59,7 @@ static int check_exception(CPUX86State *env, int intno, int *error_code,
|
|||
|
||||
qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");
|
||||
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return EXCP_HLT;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -540,14 +540,14 @@ static int hax_vcpu_hax_exec(CPUArchState *env)
|
|||
/* Guest state changed, currently only for shutdown */
|
||||
case HAX_EXIT_STATECHANGE:
|
||||
fprintf(stdout, "VCPU shutdown request\n");
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
hax_vcpu_sync_state(env, 0);
|
||||
ret = 1;
|
||||
break;
|
||||
case HAX_EXIT_UNKNOWN_VMEXIT:
|
||||
fprintf(stderr, "Unknown VMX exit %x from guest\n",
|
||||
ht->_exit_reason);
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
hax_vcpu_sync_state(env, 0);
|
||||
cpu_dump_state(cpu, stderr, fprintf, 0);
|
||||
ret = -1;
|
||||
|
@ -578,7 +578,7 @@ static int hax_vcpu_hax_exec(CPUArchState *env)
|
|||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unknown exit %x from HAX\n", ht->_exit_status);
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
hax_vcpu_sync_state(env, 0);
|
||||
cpu_dump_state(cpu, stderr, fprintf, 0);
|
||||
ret = 1;
|
||||
|
|
|
@ -1212,7 +1212,7 @@ static void do_inject_x86_mce(CPUState *cs, run_on_cpu_data data)
|
|||
" triple fault\n",
|
||||
cs->cpu_index);
|
||||
qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return;
|
||||
}
|
||||
if (banks[1] & MCI_STATUS_VAL) {
|
||||
|
|
|
@ -2930,7 +2930,7 @@ int kvm_arch_process_async_events(CPUState *cs)
|
|||
|
||||
if (env->exception_injected == EXCP08_DBLE) {
|
||||
/* this means triple fault */
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
cs->exit_request = 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -266,7 +266,7 @@ void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr)
|
|||
S390CPU *cpu = s390_env_get_cpu(env);
|
||||
if (s390_cpu_halt(cpu) == 0) {
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1927,7 +1927,7 @@ static int handle_intercept(S390CPU *cpu)
|
|||
cpu_synchronize_state(cs);
|
||||
if (s390_cpu_halt(cpu) == 0) {
|
||||
if (is_special_wait_psw(cs)) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
} else {
|
||||
qemu_system_guest_panicked(NULL);
|
||||
}
|
||||
|
@ -1936,7 +1936,7 @@ static int handle_intercept(S390CPU *cpu)
|
|||
break;
|
||||
case ICPT_CPU_STOP:
|
||||
if (s390_cpu_set_state(CPU_STATE_STOPPED, cpu) == 0) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
if (cpu->env.sigp_order == SIGP_STOP_STORE_STATUS) {
|
||||
kvm_s390_store_status(cpu, KVM_S390_STORE_STATUS_DEF_ADDR,
|
||||
|
|
|
@ -532,11 +532,11 @@ uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1,
|
|||
break;
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
case SIGP_RESTART:
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
cpu_loop_exit(CPU(s390_env_get_cpu(env)));
|
||||
break;
|
||||
case SIGP_STOP:
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
cpu_loop_exit(CPU(s390_env_get_cpu(env)));
|
||||
break;
|
||||
#endif
|
||||
|
|
|
@ -109,7 +109,7 @@ void sparc_cpu_do_interrupt(CPUState *cs)
|
|||
if (env->psret == 0) {
|
||||
if (cs->exception_index == 0x80 &&
|
||||
env->def->features & CPU_FEATURE_TA0_SHUTDOWN) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
} else {
|
||||
cpu_abort(cs, "Trap 0x%02x while interrupts disabled, Error state",
|
||||
cs->exception_index);
|
||||
|
|
|
@ -46,7 +46,7 @@ QMP_VERSION
|
|||
read failed: Input/output error
|
||||
{"return": ""}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
|
||||
=== Testing blkverify on existing block device ===
|
||||
|
@ -85,7 +85,7 @@ wrote 512/512 bytes at offset 0
|
|||
read failed: Input/output error
|
||||
{"return": ""}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
QEMU_PROG: Failed to flush the L2 table cache: Input/output error
|
||||
QEMU_PROG: Failed to flush the refcount block cache: Input/output error
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ read 10485760/10485760 bytes at offset 0
|
|||
10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
{"return": ""}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
|
||||
== using quorum rewrite corrupted mode ==
|
||||
|
|
|
@ -8,7 +8,7 @@ QMP_VERSION
|
|||
{"return": {}}
|
||||
{"error": {"class": "GenericError", "desc": "'node-name' must be specified for the root node"}}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
|
||||
=== Duplicate ID ===
|
||||
|
@ -19,7 +19,7 @@ QMP_VERSION
|
|||
{"error": {"class": "GenericError", "desc": "node-name=disk is conflicting with a device id"}}
|
||||
{"error": {"class": "GenericError", "desc": "Duplicate node name"}}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
|
||||
=== aio=native without O_DIRECT ===
|
||||
|
@ -29,7 +29,7 @@ QMP_VERSION
|
|||
{"return": {}}
|
||||
{"error": {"class": "GenericError", "desc": "aio=native was specified, but it requires cache.direct=on, which was not specified."}}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
|
||||
=== Encrypted image ===
|
||||
|
@ -40,14 +40,14 @@ QMP_VERSION
|
|||
{"return": {}}
|
||||
{"error": {"class": "GenericError", "desc": "Use of AES-CBC encrypted IMGFMT images is no longer supported in system emulators"}}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
Testing:
|
||||
QMP_VERSION
|
||||
{"return": {}}
|
||||
{"error": {"class": "GenericError", "desc": "Use of AES-CBC encrypted IMGFMT images is no longer supported in system emulators"}}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
|
||||
=== Missing driver ===
|
||||
|
@ -58,6 +58,6 @@ QMP_VERSION
|
|||
{"return": {}}
|
||||
{"error": {"class": "GenericError", "desc": "Parameter 'driver' is missing"}}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
*** done
|
||||
|
|
|
@ -7,5 +7,5 @@ Formatting 'TEST_DIR/source.IMGFMT', fmt=IMGFMT size=67108864
|
|||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 67108864, "offset": 67108864, "speed": 0, "type": "mirror"}}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
*** done
|
||||
|
|
|
@ -7,7 +7,7 @@ wrote 65536/65536 bytes at offset 0
|
|||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
{"return": ""}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
No errors were found on the image.
|
||||
read 65536/65536 bytes at offset 0
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
|
|
@ -6,6 +6,6 @@ read 65536/65536 bytes at offset 0
|
|||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
{"return": ""}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
*** done
|
||||
|
|
|
@ -6,7 +6,7 @@ wrote 65536/65536 bytes at offset 0
|
|||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
{"return": ""}
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
read 65536/65536 bytes at offset 0
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 0
|
||||
|
|
|
@ -10,5 +10,5 @@ read 65536/65536 bytes at offset 0
|
|||
{"return": {}}
|
||||
can't open device nbd+unix:///drv?socket=TEST_DIR/nbd: No export with name 'drv' available
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
*** done
|
||||
|
|
|
@ -3,5 +3,5 @@ QA output created by 143
|
|||
{"return": {}}
|
||||
can't open device nbd+unix:///no_such_export?socket=TEST_DIR/nbd: No export with name 'no_such_export' available
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
*** done
|
||||
|
|
|
@ -34,7 +34,7 @@ read 65536/65536 bytes at offset 196608
|
|||
{"return": ""}
|
||||
|
||||
{"return": {}}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
|
||||
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
||||
|
||||
read 65536/65536 bytes at offset 0
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
|
|
@ -38,7 +38,7 @@ vm_state_notify(int running, int reason) "running %d reason %d"
|
|||
load_file(const char *name, const char *path) "name %s location %s"
|
||||
runstate_set(int new_state) "new state %d"
|
||||
system_wakeup_request(int reason) "reason=%d"
|
||||
qemu_system_shutdown_request(void) ""
|
||||
qemu_system_shutdown_request(int reason) "reason=%d"
|
||||
qemu_system_powerdown_request(void) ""
|
||||
|
||||
# spice-qemu-char.c
|
||||
|
|
|
@ -934,7 +934,7 @@ QemuCocoaView *cocoaView;
|
|||
{
|
||||
COCOA_DEBUG("QemuCocoaAppController: applicationWillTerminate\n");
|
||||
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
|
2
ui/sdl.c
2
ui/sdl.c
|
@ -837,7 +837,7 @@ static void sdl_refresh(DisplayChangeListener *dcl)
|
|||
case SDL_QUIT:
|
||||
if (!no_quit) {
|
||||
no_shutdown = 0;
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
|
||||
}
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
|
|
|
@ -568,7 +568,7 @@ static void handle_windowevent(SDL_Event *ev)
|
|||
case SDL_WINDOWEVENT_CLOSE:
|
||||
if (!no_quit) {
|
||||
no_shutdown = 0;
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
|
||||
}
|
||||
break;
|
||||
case SDL_WINDOWEVENT_SHOWN:
|
||||
|
@ -611,7 +611,7 @@ void sdl2_poll_events(struct sdl2_console *scon)
|
|||
case SDL_QUIT:
|
||||
if (!no_quit) {
|
||||
no_shutdown = 0;
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
|
||||
}
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
|
|
|
@ -1338,12 +1338,14 @@ char *socket_address_to_string(struct SocketAddress *addr, Error **errp)
|
|||
|
||||
SocketAddress *socket_address_flatten(SocketAddressLegacy *addr_legacy)
|
||||
{
|
||||
SocketAddress *addr = g_new(SocketAddress, 1);
|
||||
SocketAddress *addr;
|
||||
|
||||
if (!addr_legacy) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
addr = g_new(SocketAddress, 1);
|
||||
|
||||
switch (addr_legacy->type) {
|
||||
case SOCKET_ADDRESS_LEGACY_KIND_INET:
|
||||
addr->type = SOCKET_ADDRESS_TYPE_INET;
|
||||
|
|
69
vl.c
69
vl.c
|
@ -1598,8 +1598,9 @@ void vm_state_notify(int running, RunState state)
|
|||
}
|
||||
}
|
||||
|
||||
static int reset_requested;
|
||||
static int shutdown_requested, shutdown_signal = -1;
|
||||
static ShutdownCause reset_requested;
|
||||
static ShutdownCause shutdown_requested;
|
||||
static int shutdown_signal;
|
||||
static pid_t shutdown_pid;
|
||||
static int powerdown_requested;
|
||||
static int debug_requested;
|
||||
|
@ -1613,24 +1614,24 @@ static NotifierList wakeup_notifiers =
|
|||
NOTIFIER_LIST_INITIALIZER(wakeup_notifiers);
|
||||
static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE);
|
||||
|
||||
int qemu_shutdown_requested_get(void)
|
||||
ShutdownCause qemu_shutdown_requested_get(void)
|
||||
{
|
||||
return shutdown_requested;
|
||||
}
|
||||
|
||||
int qemu_reset_requested_get(void)
|
||||
ShutdownCause qemu_reset_requested_get(void)
|
||||
{
|
||||
return reset_requested;
|
||||
}
|
||||
|
||||
static int qemu_shutdown_requested(void)
|
||||
{
|
||||
return atomic_xchg(&shutdown_requested, 0);
|
||||
return atomic_xchg(&shutdown_requested, SHUTDOWN_CAUSE_NONE);
|
||||
}
|
||||
|
||||
static void qemu_kill_report(void)
|
||||
{
|
||||
if (!qtest_driver() && shutdown_signal != -1) {
|
||||
if (!qtest_driver() && shutdown_signal) {
|
||||
if (shutdown_pid == 0) {
|
||||
/* This happens for eg ^C at the terminal, so it's worth
|
||||
* avoiding printing an odd message in that case.
|
||||
|
@ -1644,18 +1645,19 @@ static void qemu_kill_report(void)
|
|||
shutdown_cmd ? shutdown_cmd : "<unknown process>");
|
||||
g_free(shutdown_cmd);
|
||||
}
|
||||
shutdown_signal = -1;
|
||||
shutdown_signal = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int qemu_reset_requested(void)
|
||||
static ShutdownCause qemu_reset_requested(void)
|
||||
{
|
||||
int r = reset_requested;
|
||||
ShutdownCause r = reset_requested;
|
||||
|
||||
if (r && replay_checkpoint(CHECKPOINT_RESET_REQUESTED)) {
|
||||
reset_requested = 0;
|
||||
reset_requested = SHUTDOWN_CAUSE_NONE;
|
||||
return r;
|
||||
}
|
||||
return false;
|
||||
return SHUTDOWN_CAUSE_NONE;
|
||||
}
|
||||
|
||||
static int qemu_suspend_requested(void)
|
||||
|
@ -1687,7 +1689,10 @@ static int qemu_debug_requested(void)
|
|||
return r;
|
||||
}
|
||||
|
||||
void qemu_system_reset(bool report)
|
||||
/*
|
||||
* Reset the VM. Issue an event unless @reason is SHUTDOWN_CAUSE_NONE.
|
||||
*/
|
||||
void qemu_system_reset(ShutdownCause reason)
|
||||
{
|
||||
MachineClass *mc;
|
||||
|
||||
|
@ -1700,8 +1705,9 @@ void qemu_system_reset(bool report)
|
|||
} else {
|
||||
qemu_devices_reset();
|
||||
}
|
||||
if (report) {
|
||||
qapi_event_send_reset(&error_abort);
|
||||
if (reason) {
|
||||
qapi_event_send_reset(shutdown_caused_by_guest(reason),
|
||||
&error_abort);
|
||||
}
|
||||
cpu_synchronize_all_post_reset();
|
||||
}
|
||||
|
@ -1719,7 +1725,7 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
|
|||
if (!no_shutdown) {
|
||||
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
|
||||
!!info, info, &error_abort);
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_PANIC);
|
||||
}
|
||||
|
||||
if (info) {
|
||||
|
@ -1736,12 +1742,12 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
|
|||
}
|
||||
}
|
||||
|
||||
void qemu_system_reset_request(void)
|
||||
void qemu_system_reset_request(ShutdownCause reason)
|
||||
{
|
||||
if (no_reboot) {
|
||||
shutdown_requested = 1;
|
||||
shutdown_requested = reason;
|
||||
} else {
|
||||
reset_requested = 1;
|
||||
reset_requested = reason;
|
||||
}
|
||||
cpu_stop_current();
|
||||
qemu_notify_event();
|
||||
|
@ -1808,15 +1814,15 @@ void qemu_system_killed(int signal, pid_t pid)
|
|||
/* Cannot call qemu_system_shutdown_request directly because
|
||||
* we are in a signal handler.
|
||||
*/
|
||||
shutdown_requested = 1;
|
||||
shutdown_requested = SHUTDOWN_CAUSE_HOST_SIGNAL;
|
||||
qemu_notify_event();
|
||||
}
|
||||
|
||||
void qemu_system_shutdown_request(void)
|
||||
void qemu_system_shutdown_request(ShutdownCause reason)
|
||||
{
|
||||
trace_qemu_system_shutdown_request();
|
||||
replay_shutdown_request();
|
||||
shutdown_requested = 1;
|
||||
trace_qemu_system_shutdown_request(reason);
|
||||
replay_shutdown_request(reason);
|
||||
shutdown_requested = reason;
|
||||
qemu_notify_event();
|
||||
}
|
||||
|
||||
|
@ -1847,24 +1853,29 @@ void qemu_system_debug_request(void)
|
|||
static bool main_loop_should_exit(void)
|
||||
{
|
||||
RunState r;
|
||||
ShutdownCause request;
|
||||
|
||||
if (qemu_debug_requested()) {
|
||||
vm_stop(RUN_STATE_DEBUG);
|
||||
}
|
||||
if (qemu_suspend_requested()) {
|
||||
qemu_system_suspend();
|
||||
}
|
||||
if (qemu_shutdown_requested()) {
|
||||
request = qemu_shutdown_requested();
|
||||
if (request) {
|
||||
qemu_kill_report();
|
||||
qapi_event_send_shutdown(&error_abort);
|
||||
qapi_event_send_shutdown(shutdown_caused_by_guest(request),
|
||||
&error_abort);
|
||||
if (no_shutdown) {
|
||||
vm_stop(RUN_STATE_SHUTDOWN);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (qemu_reset_requested()) {
|
||||
request = qemu_reset_requested();
|
||||
if (request) {
|
||||
pause_all_vcpus();
|
||||
qemu_system_reset(VMRESET_REPORT);
|
||||
qemu_system_reset(request);
|
||||
resume_all_vcpus();
|
||||
if (!runstate_check(RUN_STATE_RUNNING) &&
|
||||
!runstate_check(RUN_STATE_INMIGRATE)) {
|
||||
|
@ -1873,7 +1884,7 @@ static bool main_loop_should_exit(void)
|
|||
}
|
||||
if (qemu_wakeup_requested()) {
|
||||
pause_all_vcpus();
|
||||
qemu_system_reset(VMRESET_SILENT);
|
||||
qemu_system_reset(SHUTDOWN_CAUSE_NONE);
|
||||
notifier_list_notify(&wakeup_notifiers, &wakeup_reason);
|
||||
wakeup_reason = QEMU_WAKEUP_REASON_NONE;
|
||||
resume_all_vcpus();
|
||||
|
@ -4697,7 +4708,7 @@ int main(int argc, char **argv, char **envp)
|
|||
reading from the other reads, because timer polling functions query
|
||||
clock values from the log. */
|
||||
replay_checkpoint(CHECKPOINT_RESET);
|
||||
qemu_system_reset(VMRESET_SILENT);
|
||||
qemu_system_reset(SHUTDOWN_CAUSE_NONE);
|
||||
register_global_state();
|
||||
if (replay_mode != REPLAY_MODE_NONE) {
|
||||
replay_vmstate_init();
|
||||
|
|
Loading…
Reference in New Issue