Lines Matching defs:mach
131 struct nvmm_machine *mach;
135 mach = &machines[i];
137 rw_enter(&mach->lock, RW_WRITER);
138 if (mach->present) {
139 rw_exit(&mach->lock);
143 mach->present = true;
144 mach->time = time_second;
145 *ret = mach;
154 nvmm_machine_free(struct nvmm_machine *mach)
156 KASSERT(rw_write_held(&mach->lock));
157 KASSERT(mach->present);
158 mach->present = false;
166 struct nvmm_machine *mach;
172 mach = &machines[machid];
174 rw_enter(&mach->lock, op);
175 if (__predict_false(!mach->present)) {
176 rw_exit(&mach->lock);
179 if (__predict_false(mach->owner != owner && owner != &root_owner)) {
180 rw_exit(&mach->lock);
183 *ret = mach;
189 nvmm_machine_put(struct nvmm_machine *mach)
191 rw_exit(&mach->lock);
197 nvmm_vcpu_alloc(struct nvmm_machine *mach, nvmm_cpuid_t cpuid,
205 vcpu = &mach->cpus[cpuid];
221 nvmm_vcpu_free(struct nvmm_machine *mach, struct nvmm_cpu *vcpu)
231 nvmm_vcpu_get(struct nvmm_machine *mach, nvmm_cpuid_t cpuid,
239 vcpu = &mach->cpus[cpuid];
262 struct nvmm_machine *mach;
268 mach = &machines[i];
270 rw_enter(&mach->lock, RW_WRITER);
271 if (!mach->present || mach->owner != owner) {
272 rw_exit(&mach->lock);
278 error = nvmm_vcpu_get(mach, j, &vcpu);
281 (*nvmm_impl->vcpu_destroy)(mach, vcpu);
282 nvmm_vcpu_free(mach, vcpu);
284 atomic_dec_uint(&mach->ncpus);
286 (*nvmm_impl->machine_destroy)(mach);
287 uvmspace_free(mach->vm);
291 if (!mach->hmap[j].present)
293 uao_detach(mach->hmap[j].uobj);
296 nvmm_machine_free(mach);
298 rw_exit(&mach->lock);
322 struct nvmm_machine *mach;
325 error = nvmm_machine_alloc(&mach);
330 mach->owner = owner;
333 memset(&mach->hmap, 0, sizeof(mach->hmap));
336 mach->gpa_begin = 0;
337 mach->gpa_end = NVMM_MAX_RAM;
338 mach->vm = uvmspace_alloc(0, mach->gpa_end - mach->gpa_begin, false);
341 mach->commuobj = uao_create(NVMM_MAX_VCPUS * PAGE_SIZE, 0);
343 (*nvmm_impl->machine_create)(mach);
345 args->machid = mach->machid;
346 nvmm_machine_put(mach);
355 struct nvmm_machine *mach;
360 error = nvmm_machine_get(owner, args->machid, &mach, true);
365 error = nvmm_vcpu_get(mach, i, &vcpu);
369 (*nvmm_impl->vcpu_destroy)(mach, vcpu);
370 nvmm_vcpu_free(mach, vcpu);
372 atomic_dec_uint(&mach->ncpus);
375 (*nvmm_impl->machine_destroy)(mach);
378 uvmspace_free(mach->vm);
382 if (!mach->hmap[i].present)
384 uao_detach(mach->hmap[i].uobj);
387 nvmm_machine_free(mach);
388 nvmm_machine_put(mach);
397 struct nvmm_machine *mach;
411 error = nvmm_machine_get(owner, args->machid, &mach, true);
422 error = (*nvmm_impl->machine_configure)(mach, op, data);
425 nvmm_machine_put(mach);
433 struct nvmm_machine *mach;
437 error = nvmm_machine_get(owner, args->machid, &mach, false);
441 error = nvmm_vcpu_alloc(mach, args->cpuid, &vcpu);
446 uao_reference(mach->commuobj);
448 mach->commuobj, args->cpuid * PAGE_SIZE, 0, UVM_MAPFLAG(UVM_PROT_RW,
451 uao_detach(mach->commuobj);
452 nvmm_vcpu_free(mach, vcpu);
459 nvmm_vcpu_free(mach, vcpu);
465 error = (*nvmm_impl->vcpu_create)(mach, vcpu);
467 nvmm_vcpu_free(mach, vcpu);
473 atomic_inc_uint(&mach->ncpus);
476 nvmm_machine_put(mach);
483 struct nvmm_machine *mach;
487 error = nvmm_machine_get(owner, args->machid, &mach, false);
491 error = nvmm_vcpu_get(mach, args->cpuid, &vcpu);
495 (*nvmm_impl->vcpu_destroy)(mach, vcpu);
496 nvmm_vcpu_free(mach, vcpu);
498 atomic_dec_uint(&mach->ncpus);
501 nvmm_machine_put(mach);
509 struct nvmm_machine *mach;
523 error = nvmm_machine_get(owner, args->machid, &mach, false);
529 error = nvmm_vcpu_get(mach, args->cpuid, &vcpu);
531 nvmm_machine_put(mach);
545 nvmm_machine_put(mach);
554 struct nvmm_machine *mach;
558 error = nvmm_machine_get(owner, args->machid, &mach, false);
562 error = nvmm_vcpu_get(mach, args->cpuid, &vcpu);
570 nvmm_machine_put(mach);
578 struct nvmm_machine *mach;
582 error = nvmm_machine_get(owner, args->machid, &mach, false);
586 error = nvmm_vcpu_get(mach, args->cpuid, &vcpu);
594 nvmm_machine_put(mach);
601 struct nvmm_machine *mach;
605 error = nvmm_machine_get(owner, args->machid, &mach, false);
609 error = nvmm_vcpu_get(mach, args->cpuid, &vcpu);
617 nvmm_machine_put(mach);
622 nvmm_do_vcpu_run(struct nvmm_machine *mach, struct nvmm_cpu *vcpu,
625 struct vmspace *vm = mach->vm;
635 ret = (*nvmm_impl->vcpu_run)(mach, vcpu, exit);
644 if (exit->u.mem.gpa >= mach->gpa_end) {
658 struct nvmm_machine *mach;
662 error = nvmm_machine_get(owner, args->machid, &mach, false);
666 error = nvmm_vcpu_get(mach, args->cpuid, &vcpu);
670 error = nvmm_do_vcpu_run(mach, vcpu, &args->exit);
674 nvmm_machine_put(mach);
683 nvmm_hmapping_getuobj(struct nvmm_machine *mach, uintptr_t hva, size_t size,
690 hmapping = &mach->hmap[i];
705 nvmm_hmapping_validate(struct nvmm_machine *mach, uintptr_t hva, size_t size)
718 hmapping = &mach->hmap[i];
746 nvmm_hmapping_alloc(struct nvmm_machine *mach)
752 hmapping = &mach->hmap[i];
763 nvmm_hmapping_free(struct nvmm_machine *mach, uintptr_t hva, size_t size)
770 hmapping = &mach->hmap[i];
793 struct nvmm_machine *mach;
798 error = nvmm_machine_get(owner, args->machid, &mach, true);
802 error = nvmm_hmapping_validate(mach, args->hva, args->size);
806 hmapping = nvmm_hmapping_alloc(mach);
829 nvmm_machine_put(mach);
836 struct nvmm_machine *mach;
839 error = nvmm_machine_get(owner, args->machid, &mach, true);
843 error = nvmm_hmapping_free(mach, args->hva, args->size);
845 nvmm_machine_put(mach);
854 struct nvmm_machine *mach;
860 error = nvmm_machine_get(owner, args->machid, &mach, false);
878 if (args->gpa < mach->gpa_begin || args->gpa >= mach->gpa_end) {
886 if (args->gpa + args->size > mach->gpa_end) {
892 uobj = nvmm_hmapping_getuobj(mach, args->hva, args->size, &off);
902 error = uvm_map(&mach->vm->vm_map, &gpa, args->size, uobj, off, 0,
917 nvmm_machine_put(mach);
924 struct nvmm_machine *mach;
928 error = nvmm_machine_get(owner, args->machid, &mach, false);
936 if (args->gpa < mach->gpa_begin || args->gpa >= mach->gpa_end) {
944 if (args->gpa + args->size >= mach->gpa_end) {
951 uvm_unmap(&mach->vm->vm_map, gpa, gpa + args->size);
954 nvmm_machine_put(mach);
964 struct nvmm_machine *mach;
974 error = nvmm_machine_get(owner, ctl.machid, &mach, true);
978 ctl.nvcpus = mach->ncpus;
982 if (!mach->hmap[i].present)
984 ctl.nram += mach->hmap[i].size;
987 ctl.pid = mach->owner->pid;
988 ctl.time = mach->time;
990 nvmm_machine_put(mach);
1159 struct nvmm_machine *mach;
1176 error = nvmm_machine_get(owner, machid, &mach, false);
1180 uao_reference(mach->commuobj);
1181 *uobjp = mach->commuobj;
1186 nvmm_machine_put(mach);
1305 nvmm_suspend_vcpu(struct nvmm_machine *mach, struct nvmm_cpu *vcpu)
1310 (*nvmm_impl->vcpu_suspend)(mach, vcpu);
1315 nvmm_resume_vcpu(struct nvmm_machine *mach, struct nvmm_cpu *vcpu)
1320 (*nvmm_impl->vcpu_resume)(mach, vcpu);
1325 nvmm_suspend_machine(struct nvmm_machine *mach)
1328 rw_enter(&mach->lock, RW_WRITER);
1329 if (mach->present) {
1334 nvmm_suspend_vcpu(mach, &mach->cpus[cpuid]);
1337 (*nvmm_impl->machine_suspend)(mach);
1339 rw_exit(&mach->lock);
1343 nvmm_resume_machine(struct nvmm_machine *mach)
1346 rw_enter(&mach->lock, RW_WRITER);
1347 if (mach->present) {
1352 nvmm_resume_vcpu(mach, &mach->cpus[cpuid]);
1355 (*nvmm_impl->machine_resume)(mach);
1357 rw_exit(&mach->lock);