vmm_softc
if (vmm_softc->mode == VMM_MODE_EPT)
else if (vmm_softc->mode == VMM_MODE_RVI)
panic("%s: unknown vmm mode: %d", __func__, vmm_softc->mode);
struct vmm_softc *sc = (struct vmm_softc *)self;
vcpu->vc_virt_mode = vmm_softc->mode;
if (vmm_softc->mode == VMM_MODE_EPT)
else if (vmm_softc->mode == VMM_MODE_RVI)
panic("%s: unknown vmm mode: %d", __func__, vmm_softc->mode);
if (vmm_softc->mode == VMM_MODE_EPT)
else if (vmm_softc->mode == VMM_MODE_RVI)
panic("%s: unknown vmm mode: %d", __func__, vmm_softc->mode);
if (vmm_softc->mode == VMM_MODE_EPT) {
} else if (vmm_softc->mode == VMM_MODE_RVI) {
if ((err = rw_enter(&vmm_softc->vm_lock, RW_WRITE | RW_NOSLEEP)))
SLIST_FOREACH(vm, &vmm_softc->vm_list, vm_link) {
if (vmm_softc->sc_md.pkru_enabled)
if (vmm_softc->sc_md.pkru_enabled) {
rw_exit_write(&vmm_softc->vm_lock);
if (vmm_softc->mode == VMM_MODE_EPT)
if (vmm_softc->vm_ct > 0)
if (vmm_softc->mode == VMM_MODE_RVI) {
} else if (vmm_softc->mode == VMM_MODE_EPT) {
if (vmm_softc->mode == VMM_MODE_RVI) {
} else if (vmm_softc->mode == VMM_MODE_EPT) {
if (vmm_softc->sc_md.pkru_enabled)
if (vmm_softc->mode == VMM_MODE_EPT)
else if (vmm_softc->mode == VMM_MODE_RVI)
if (vmm_softc->sc_md.pkru_enabled) {
if (vmm_softc->sc_md.pkru_enabled) {
if (vmm_softc->mode == VMM_MODE_EPT) {
if (vmm_softc->sc_md.pkru_enabled)
rw_enter_write(&vmm_softc->sc_slock);
if (vmm_softc->mode == VMM_MODE_RVI) {
if (vmm_softc->sc_md.pkru_enabled)
if (vmm_softc->sc_md.pkru_enabled) {
rw_exit_write(&vmm_softc->sc_slock);
struct vmm_softc *sc = vmm_softc;
rw_enter_write(&vmm_softc->vpid_lock);
rw_exit_write(&vmm_softc->vpid_lock);
rw_exit_write(&vmm_softc->vpid_lock);
struct vmm_softc *sc = vmm_softc;
rw_enter_write(&vmm_softc->vpid_lock);
rw_exit_write(&vmm_softc->vpid_lock);
rw_enter_write(&vmm_softc->sc_slock);
rw_exit_write(&vmm_softc->sc_slock);
switch (vmm_softc->mode) {
printf("%s: invalid vmm mode %d\n", __func__, vmm_softc->mode);
rw_enter_write(&vmm_softc->sc_slock);
KASSERT(vmm_softc->sc_status == VMM_SUSPENDED);
refcnt_init(&vmm_softc->sc_refcnt);
vmm_softc->sc_status = VMM_ACTIVE;
rw_exit_write(&vmm_softc->sc_slock);
wakeup(&vmm_softc->sc_status);
if (vmm_softc == NULL)
if (vmm_softc->mode == VMM_MODE_UNKNOWN)
rw_enter_read(&vmm_softc->vm_lock);
SLIST_FOREACH(vm, &vmm_softc->vm_list, vm_link) {
rw_exit_read(&vmm_softc->vm_lock);
ret = rw_enter(&vmm_softc->sc_slock, RW_READ | RW_INTR);
while (vmm_softc->sc_status != VMM_ACTIVE) {
ret = rwsleep_nsec(&vmm_softc->sc_status, &vmm_softc->sc_slock,
rw_exit(&vmm_softc->sc_slock);
refcnt_take(&vmm_softc->sc_refcnt);
rw_exit(&vmm_softc->sc_slock);
refcnt_rele_wake(&vmm_softc->sc_refcnt);
struct vmm_softc *vmm_softc;
rw_enter_write(&vmm_softc->vm_lock);
if (vmm_softc->vcpu_ct + vcp->vcp_ncpus > vmm_softc->vcpu_max) {
vmm_softc->vcpu_max);
rw_exit_write(&vmm_softc->vm_lock);
vmm_softc->vcpu_ct += vcp->vcp_ncpus;
vmm_softc->vm_ct++;
rw_exit_write(&vmm_softc->vm_lock);
sizeof(struct vmm_softc), vmm_probe, vmm_attach, NULL, vmm_activate
rw_enter_write(&vmm_softc->vm_lock);
vmm_softc->vm_idx++;
vm->vm_id = vmm_softc->vm_idx;
SLIST_INSERT_HEAD(&vmm_softc->vm_list, vm, vm_link);
rw_exit_write(&vmm_softc->vm_lock);
rw_enter_write(&vmm_softc->vm_lock);
vmm_softc->vm_ct--;
vmm_softc->vcpu_ct -= vcp->vcp_ncpus;
if (vmm_softc->vm_ct < 1)
rw_exit_write(&vmm_softc->vm_lock);
struct vmm_softc *sc = (struct vmm_softc *)self;
rw_enter_read(&vmm_softc->vm_lock);
vm_ct = vmm_softc->vm_ct;
rw_exit_read(&vmm_softc->vm_lock);
rw_enter_read(&vmm_softc->vm_lock);
SLIST_FOREACH(vm, &vmm_softc->vm_list, vm_link) {
rw_exit_read(&vmm_softc->vm_lock);
rw_enter_write(&vmm_softc->vm_lock);
SLIST_REMOVE(&vmm_softc->vm_list, vm, vm, vm_link);
rw_exit_write(&vmm_softc->vm_lock);
rw_enter_write(&vmm_softc->vm_lock);
vmm_softc->vm_ct--;
vmm_softc->vcpu_ct -= nvcpu;
if (vmm_softc->vm_ct < 1)
rw_exit_write(&vmm_softc->vm_lock);
vmm_softc = sc;
rw_enter_write(&vmm_softc->sc_slock);
KASSERT(vmm_softc->sc_status == VMM_ACTIVE);
vmm_softc->sc_status = VMM_SUSPENDED;
rw_exit_write(&vmm_softc->sc_slock);
refcnt_finalize(&vmm_softc->sc_refcnt, "vmmsusp");
extern struct vmm_softc *vmm_softc;