/* This function is called when the watchdog expires. Note that * the hardware has two timers, and so expiry happens in two stages. * If d->stage == 1 then we perform the first stage action (usually, * sending an interrupt) and then restart the timer again for the * second stage. If the second stage expires then the watchdog * really has run out. */ static void i6300esb_timer_expired(void *vp) { I6300State *d = vp; i6300esb_debug("stage %d\n", d->stage); if (d->stage == 1) { /* What to do at the end of stage 1? */ switch (d->int_type) { case INT_TYPE_IRQ: fprintf(stderr, "i6300esb_timer_expired: I would send APIC 1 INT 10 here if I knew how (XXX)\n"); break; case INT_TYPE_SMI: fprintf(stderr, "i6300esb_timer_expired: I would send SMI here if I knew how (XXX)\n"); break; } /* Start the second stage. */ i6300esb_restart_timer(d, 2); } else { /* Second stage expired, reboot for real. */ if (d->reboot_enabled) { d->previous_reboot_flag = 1; watchdog_perform_action(); /* This reboots, exits, etc */ i6300esb_reset(&d->dev.qdev); } /* In "free running mode" we start stage 1 again. */ if (d->free_run) i6300esb_restart_timer(d, 1); } }
static void tco_timer_expired(void *opaque) { TCOIORegs *tr = opaque; ICH9LPCPMRegs *pm = container_of(tr, ICH9LPCPMRegs, tco_regs); ICH9LPCState *lpc = container_of(pm, ICH9LPCState, pm); uint32_t gcs = pci_get_long(lpc->chip_config + ICH9_CC_GCS); tr->tco.rld = 0; tr->tco.sts1 |= TCO_TIMEOUT; if (++tr->timeouts_no == 2) { tr->tco.sts2 |= TCO_SECOND_TO_STS; tr->tco.sts2 |= TCO_BOOT_STS; tr->timeouts_no = 0; if (!lpc->pin_strap.spkr_hi && !(gcs & ICH9_CC_GCS_NO_REBOOT)) { watchdog_perform_action(); tco_timer_stop(tr); return; } } if (pm->smi_en & ICH9_PMIO_SMI_EN_TCO_EN) { ich9_generate_smi(); } else { ich9_generate_nmi(); } tr->tco.rld = tr->tco.tmr; tco_timer_reload(tr); }
static void aspeed_wdt_timer_expired(void *dev) { AspeedWDTState *s = ASPEED_WDT(dev); qemu_log_mask(CPU_LOG_RESET, "Watchdog timer expired.\n"); watchdog_perform_action(); timer_del(s->timer); }
/* This is called when the watchdog expires. */ static void ib700_timer_expired(void *vp) { IB700State *s = vp; ib700_debug("watchdog expired\n"); watchdog_perform_action(); qemu_del_timer(s->timer); }
static void diag288_timer_expired(void *dev) { qemu_log_mask(CPU_LOG_RESET, "Watchdog timer expired.\n"); watchdog_perform_action(); /* Reset the watchdog only if the guest was notified about expiry. */ switch (get_watchdog_action()) { case WDT_DEBUG: case WDT_NONE: case WDT_PAUSE: return; } wdt_diag288_reset(dev); }
static void diag288_timer_expired(void *dev) { qemu_log_mask(CPU_LOG_RESET, "Watchdog timer expired.\n"); watchdog_perform_action(); wdt_diag288_reset(dev); }