MCPcopy Create free account
hub / github.com/F-Stack/f-stack / svm_snapshot

Function svm_snapshot

freebsd/amd64/vmm/amd/svm.c:2401–2552  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2399
2400#ifdef BHYVE_SNAPSHOT
2401static int
2402svm_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);

Callers

nothing calls this directly

Calls 2

svm_set_dirtyFunction · 0.85
flush_by_asidFunction · 0.85

Tested by

no test coverage detected