]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: VMX: Add a wrapper around ROL16() to get a vmcs12 from a field encoding
authorSean Christopherson <seanjc@google.com>
Thu, 15 Jan 2026 17:34:25 +0000 (09:34 -0800)
committerSean Christopherson <seanjc@google.com>
Fri, 16 Jan 2026 15:48:00 +0000 (07:48 -0800)
Add a wrapper macro, ENC_TO_VMCS12_IDX(), to get a vmcs12 index given a
field encoding in anticipation of adding a macro to get from a vmcs12 index
back to the field encoding.  And because open coding ROL16(n, 6) everywhere
is gross.

No functional change intended.

Suggested-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://patch.msgid.link/20260115173427.716021-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/vmx/hyperv_evmcs.c
arch/x86/kvm/vmx/hyperv_evmcs.h
arch/x86/kvm/vmx/vmcs.h
arch/x86/kvm/vmx/vmcs12.c
arch/x86/kvm/vmx/vmcs12.h

index 904bfcd1519b0b8b723ce4675a2489161e641b73..cc728c9a3de56df423116ce0720d9960c40396c9 100644 (file)
@@ -7,7 +7,7 @@
 #include "hyperv_evmcs.h"
 
 #define EVMCS1_OFFSET(x) offsetof(struct hv_enlightened_vmcs, x)
-#define EVMCS1_FIELD(number, name, clean_field)[ROL16(number, 6)] = \
+#define EVMCS1_FIELD(number, name, clean_field)[ENC_TO_VMCS12_IDX(number)] = \
                {EVMCS1_OFFSET(name), clean_field}
 
 const struct evmcs_field vmcs_field_to_evmcs_1[] = {
index 6536290f42747912c75c33f1784b16ac8af61547..fc7c4e7bd1bfb190c468a3ee812b4699b2b73909 100644 (file)
@@ -130,7 +130,7 @@ static __always_inline int evmcs_field_offset(unsigned long field,
                                              u16 *clean_field)
 {
        const struct evmcs_field *evmcs_field;
-       unsigned int index = ROL16(field, 6);
+       unsigned int index = ENC_TO_VMCS12_IDX(field);
 
        if (unlikely(index >= nr_evmcs_1_fields))
                return -ENOENT;
index b2562531465882ff132a8871bcdfb5317052d31b..9aa204c876618cde72bc2e2d83fd5662e6060f1e 100644 (file)
@@ -12,6 +12,7 @@
 #include "capabilities.h"
 
 #define ROL16(val, n) ((u16)(((u16)(val) << (n)) | ((u16)(val) >> (16 - (n)))))
+#define ENC_TO_VMCS12_IDX(enc) ROL16(enc, 6)
 
 struct vmcs_hdr {
        u32 revision_id:31;
index 4233b5ca9461afb2208d3584519e119bfb3fad2b..c2ac9e1a50b3212d87caf16de57e10ffec22220a 100644 (file)
@@ -4,10 +4,10 @@
 #include "vmcs12.h"
 
 #define VMCS12_OFFSET(x) offsetof(struct vmcs12, x)
-#define FIELD(number, name)    [ROL16(number, 6)] = VMCS12_OFFSET(name)
+#define FIELD(number, name)    [ENC_TO_VMCS12_IDX(number)] = VMCS12_OFFSET(name)
 #define FIELD64(number, name)                                          \
        FIELD(number, name),                                            \
-       [ROL16(number##_HIGH, 6)] = VMCS12_OFFSET(name) + sizeof(u32)
+       [ENC_TO_VMCS12_IDX(number##_HIGH)] = VMCS12_OFFSET(name) + sizeof(u32)
 
 const unsigned short vmcs12_field_offsets[] = {
        FIELD(VIRTUAL_PROCESSOR_ID, virtual_processor_id),
index 4ad6b16525b93e89821484a02f9d78b05ab33594..7a5fdd9b27ba0c7fdcd02b54f6b01feab9b4f346 100644 (file)
@@ -385,7 +385,7 @@ static inline short get_vmcs12_field_offset(unsigned long field)
        if (field >> 15)
                return -ENOENT;
 
-       index = ROL16(field, 6);
+       index = ENC_TO_VMCS12_IDX(field);
        if (index >= nr_vmcs12_fields)
                return -ENOENT;