Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/nvmm nvmm: misc improvements



details:   https://anonhg.NetBSD.org/src/rev/f64ec2846bbf
branches:  trunk
changeset: 975307:f64ec2846bbf
user:      maxv <maxv%NetBSD.org@localhost>
date:      Wed Aug 26 16:28:17 2020 +0000

description:
nvmm: misc improvements

 - use mach->ncpus to get the number of vcpus, now that we have it
 - don't forget to decrement mach->ncpus when a machine gets killed
 - add more __predict_false()

diffstat:

 sys/dev/nvmm/nvmm.c |  28 ++++++++++------------------
 1 files changed, 10 insertions(+), 18 deletions(-)

diffs (111 lines):

diff -r 9ad06f131c7a -r f64ec2846bbf sys/dev/nvmm/nvmm.c
--- a/sys/dev/nvmm/nvmm.c       Wed Aug 26 16:03:40 2020 +0000
+++ b/sys/dev/nvmm/nvmm.c       Wed Aug 26 16:28:17 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: nvmm.c,v 1.35 2020/08/18 17:04:37 maxv Exp $   */
+/*     $NetBSD: nvmm.c,v 1.36 2020/08/26 16:28:17 maxv Exp $   */
 
 /*
  * Copyright (c) 2018-2020 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nvmm.c,v 1.35 2020/08/18 17:04:37 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nvmm.c,v 1.36 2020/08/26 16:28:17 maxv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -112,17 +112,17 @@
        struct nvmm_machine *mach;
        krw_t op = writer ? RW_WRITER : RW_READER;
 
-       if (machid >= NVMM_MAX_MACHINES) {
+       if (__predict_false(machid >= NVMM_MAX_MACHINES)) {
                return EINVAL;
        }
        mach = &machines[machid];
 
        rw_enter(&mach->lock, op);
-       if (!mach->present) {
+       if (__predict_false(!mach->present)) {
                rw_exit(&mach->lock);
                return ENOENT;
        }
-       if (owner != &root_owner && mach->owner != owner) {
+       if (__predict_false(mach->owner != owner && owner != &root_owner)) {
                rw_exit(&mach->lock);
                return EPERM;
        }
@@ -179,13 +179,13 @@
 {
        struct nvmm_cpu *vcpu;
 
-       if (cpuid >= NVMM_MAX_VCPUS) {
+       if (__predict_false(cpuid >= NVMM_MAX_VCPUS)) {
                return EINVAL;
        }
        vcpu = &mach->cpus[cpuid];
 
        mutex_enter(&vcpu->lock);
-       if (!vcpu->present) {
+       if (__predict_false(!vcpu->present)) {
                mutex_exit(&vcpu->lock);
                return ENOENT;
        }
@@ -227,6 +227,7 @@
                        (*nvmm_impl->vcpu_destroy)(mach, vcpu);
                        nvmm_vcpu_free(mach, vcpu);
                        nvmm_vcpu_put(vcpu);
+                       atomic_dec_uint(&mach->ncpus);
                }
                (*nvmm_impl->machine_destroy)(mach);
                uvmspace_free(mach->vm);
@@ -314,6 +315,7 @@
                (*nvmm_impl->vcpu_destroy)(mach, vcpu);
                nvmm_vcpu_free(mach, vcpu);
                nvmm_vcpu_put(vcpu);
+               atomic_dec_uint(&mach->ncpus);
        }
 
        (*nvmm_impl->machine_destroy)(mach);
@@ -414,7 +416,6 @@
        }
 
        nvmm_vcpu_put(vcpu);
-
        atomic_inc_uint(&mach->ncpus);
 
 out:
@@ -440,7 +441,6 @@
        (*nvmm_impl->vcpu_destroy)(mach, vcpu);
        nvmm_vcpu_free(mach, vcpu);
        nvmm_vcpu_put(vcpu);
-
        atomic_dec_uint(&mach->ncpus);
 
 out:
@@ -907,7 +907,6 @@
 {
        struct nvmm_ctl_mach_info ctl;
        struct nvmm_machine *mach;
-       struct nvmm_cpu *vcpu;
        int error;
        size_t i;
 
@@ -921,14 +920,7 @@
        if (error)
                return error;
 
-       ctl.nvcpus = 0;
-       for (i = 0; i < NVMM_MAX_VCPUS; i++) {
-               error = nvmm_vcpu_get(mach, i, &vcpu);
-               if (error)
-                       continue;
-               ctl.nvcpus++;
-               nvmm_vcpu_put(vcpu);
-       }
+       ctl.nvcpus = mach->ncpus;
 
        ctl.nram = 0;
        for (i = 0; i < NVMM_MAX_HMAPPINGS; i++) {



Home | Main Index | Thread Index | Old Index