From 85efb31d50af3cf6987d74f4abe9c54ae493f3a6 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Wed, 3 Apr 2024 12:55:36 -0400 Subject: [PATCH] libvmmapi: Move VM capability names to vmmapi_machdep.c Add some missing entries while here. Reviewed by: corvink, jhb MFC after: 2 weeks Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D41000 --- lib/libvmmapi/amd64/vmmapi_machdep.c | 15 +++++++++++++++ lib/libvmmapi/internal.h | 2 ++ lib/libvmmapi/vmmapi.c | 23 +++++------------------ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/lib/libvmmapi/amd64/vmmapi_machdep.c b/lib/libvmmapi/amd64/vmmapi_machdep.c index 5ed198d7b76a..c19e9c6f935f 100644 --- a/lib/libvmmapi/amd64/vmmapi_machdep.c +++ b/lib/libvmmapi/amd64/vmmapi_machdep.c @@ -37,6 +37,21 @@ #include "vmmapi.h" #include "internal.h" +const char *vm_capstrmap[] = { + [VM_CAP_HALT_EXIT] = "hlt_exit", + [VM_CAP_MTRAP_EXIT] = "mtrap_exit", + [VM_CAP_PAUSE_EXIT] = "pause_exit", + [VM_CAP_UNRESTRICTED_GUEST] = "unrestricted_guest", + [VM_CAP_ENABLE_INVPCID] = "enable_invpcid", + [VM_CAP_BPT_EXIT] = "bpt_exit", + [VM_CAP_RDPID] = "rdpid", + [VM_CAP_RDTSCP] = "rdtscp", + [VM_CAP_IPI_EXIT] = "ipi_exit", + [VM_CAP_MASK_HWINTR] = "mask_hwintr", + [VM_CAP_RFLAGS_TF] = "rflags_tf", + [VM_CAP_MAX] = NULL, +}; + int vm_set_desc(struct vcpu *vcpu, int reg, uint64_t base, uint32_t limit, uint32_t access) diff --git a/lib/libvmmapi/internal.h b/lib/libvmmapi/internal.h index e312e21958ca..973a70afe022 100644 --- a/lib/libvmmapi/internal.h +++ b/lib/libvmmapi/internal.h @@ -24,4 +24,6 @@ struct vcpu { int vcpu_ioctl(struct vcpu *vcpu, u_long cmd, void *arg); +extern const char *vm_capstrmap[]; + #endif /* !__VMMAPI_INTERNAL_H__ */ diff --git a/lib/libvmmapi/vmmapi.c b/lib/libvmmapi/vmmapi.c index 2401f7cd2428..cc765deb904c 100644 --- a/lib/libvmmapi/vmmapi.c +++ b/lib/libvmmapi/vmmapi.c @@ -711,27 +711,14 @@ vm_readwrite_kernemu_device(struct vcpu *vcpu, vm_paddr_t gpa, return (rc); } -static const char *capstrmap[] = { - [VM_CAP_HALT_EXIT] = "hlt_exit", - [VM_CAP_MTRAP_EXIT] = "mtrap_exit", - [VM_CAP_PAUSE_EXIT] = "pause_exit", - [VM_CAP_UNRESTRICTED_GUEST] = "unrestricted_guest", - [VM_CAP_ENABLE_INVPCID] = "enable_invpcid", - [VM_CAP_BPT_EXIT] = "bpt_exit", - [VM_CAP_RDPID] = "rdpid", - [VM_CAP_RDTSCP] = "rdtscp", - [VM_CAP_IPI_EXIT] = "ipi_exit", - [VM_CAP_MASK_HWINTR] = "mask_hwintr", - [VM_CAP_RFLAGS_TF] = "rflags_tf", -}; - int vm_capability_name2type(const char *capname) { int i; - for (i = 0; i < (int)nitems(capstrmap); i++) { - if (strcmp(capstrmap[i], capname) == 0) + for (i = 0; i < VM_CAP_MAX; i++) { + if (vm_capstrmap[i] != NULL && + strcmp(vm_capstrmap[i], capname) == 0) return (i); } @@ -741,8 +728,8 @@ vm_capability_name2type(const char *capname) const char * vm_capability_type2name(int type) { - if (type >= 0 && type < (int)nitems(capstrmap)) - return (capstrmap[type]); + if (type >= 0 && type < VM_CAP_MAX) + return (vm_capstrmap[type]); return (NULL); }