| 2399 | |
| 2400 | #ifdef BHYVE_SNAPSHOT |
| 2401 | static int |
| 2402 | svm_snapshot(void *arg, struct vm_snapshot_meta *meta) |
| 2403 | { |
| 2404 | /* struct svm_softc is AMD's representation for SVM softc */ |
| 2405 | struct svm_softc *sc; |
| 2406 | struct svm_vcpu *vcpu; |
| 2407 | struct vmcb *vmcb; |
| 2408 | uint64_t val; |
| 2409 | int i; |
| 2410 | int ret; |
| 2411 | |
| 2412 | sc = arg; |
| 2413 | |
| 2414 | KASSERT(sc != NULL, ("%s: arg was NULL", __func__)); |
| 2415 | |
| 2416 | SNAPSHOT_VAR_OR_LEAVE(sc->nptp, meta, ret, done); |
| 2417 | |
| 2418 | for (i = 0; i < VM_MAXCPU; i++) { |
| 2419 | vcpu = &sc->vcpu[i]; |
| 2420 | vmcb = &vcpu->vmcb; |
| 2421 | |
| 2422 | /* VMCB fields for virtual cpu i */ |
| 2423 | SNAPSHOT_VAR_OR_LEAVE(vmcb->ctrl.v_tpr, meta, ret, done); |
| 2424 | val = vmcb->ctrl.v_tpr; |
| 2425 | SNAPSHOT_VAR_OR_LEAVE(val, meta, ret, done); |
| 2426 | vmcb->ctrl.v_tpr = val; |
| 2427 | |
| 2428 | SNAPSHOT_VAR_OR_LEAVE(vmcb->ctrl.asid, meta, ret, done); |
| 2429 | val = vmcb->ctrl.np_enable; |
| 2430 | SNAPSHOT_VAR_OR_LEAVE(val, meta, ret, done); |
| 2431 | vmcb->ctrl.np_enable = val; |
| 2432 | |
| 2433 | val = vmcb->ctrl.intr_shadow; |
| 2434 | SNAPSHOT_VAR_OR_LEAVE(val, meta, ret, done); |
| 2435 | vmcb->ctrl.intr_shadow = val; |
| 2436 | SNAPSHOT_VAR_OR_LEAVE(vmcb->ctrl.tlb_ctrl, meta, ret, done); |
| 2437 | |
| 2438 | SNAPSHOT_BUF_OR_LEAVE(vmcb->state.pad1, |
| 2439 | sizeof(vmcb->state.pad1), |
| 2440 | meta, ret, done); |
| 2441 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.cpl, meta, ret, done); |
| 2442 | SNAPSHOT_BUF_OR_LEAVE(vmcb->state.pad2, |
| 2443 | sizeof(vmcb->state.pad2), |
| 2444 | meta, ret, done); |
| 2445 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.efer, meta, ret, done); |
| 2446 | SNAPSHOT_BUF_OR_LEAVE(vmcb->state.pad3, |
| 2447 | sizeof(vmcb->state.pad3), |
| 2448 | meta, ret, done); |
| 2449 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.cr4, meta, ret, done); |
| 2450 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.cr3, meta, ret, done); |
| 2451 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.cr0, meta, ret, done); |
| 2452 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.dr7, meta, ret, done); |
| 2453 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.dr6, meta, ret, done); |
| 2454 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.rflags, meta, ret, done); |
| 2455 | SNAPSHOT_VAR_OR_LEAVE(vmcb->state.rip, meta, ret, done); |
| 2456 | SNAPSHOT_BUF_OR_LEAVE(vmcb->state.pad4, |
| 2457 | sizeof(vmcb->state.pad4), |
| 2458 | meta, ret, done); |
nothing calls this directly
no test coverage detected