AArch64 EL2 hypervisor for QEMU virt that boots at EL2
1

Configure Feed

Select the types of activity you want to include in your feed.

Add monitor snapshot consistency checks for paused vCPUs

+9 -1
+9 -1
core/monitor.c
··· 292 292 uart_puts("snapshot no-vcpu\n"); 293 293 return; 294 294 } 295 + if (vcpu->state != VCPU_PAUSED) { 296 + uart_puts("snapshot requires-paused-vcpu\n"); 297 + return; 298 + } 295 299 g_snapshot = *vcpu; 296 300 g_snapshot_valid = true; 297 301 log_simple(LOG_MONITOR, 610u, vcpu->pc, vcpu->pstate); ··· 299 303 uart_put_hex64(g_snapshot.pc); 300 304 uart_puts(" pstate="); 301 305 uart_put_hex64(g_snapshot.pstate); 306 + uart_puts(" id="); 307 + uart_put_dec64(g_snapshot.id); 302 308 uart_puts("\n"); 303 309 } 304 310 ··· 316 322 uart_put_hex64(g_snapshot.sp_el1); 317 323 uart_puts(" traps="); 318 324 uart_put_dec64(g_snapshot.stats.traps); 325 + uart_puts(" state="); 326 + uart_put_dec64((uint64_t)g_snapshot.state); 319 327 uart_puts("\n"); 320 328 } 321 329 322 330 static void monitor_restore(struct vcpu *vcpu) 323 331 { 324 332 #if CONFIG_MONITOR_MUTATION 325 - if (vcpu == (struct vcpu *)0 || !g_snapshot_valid) { 333 + if (vcpu == (struct vcpu *)0 || !g_snapshot_valid || vcpu->id != g_snapshot.id) { 326 334 uart_puts("restore no-snapshot\n"); 327 335 return; 328 336 }