]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mshv: Update hv_stats_page definitions
authorNuno Das Neves <nunodasneves@linux.microsoft.com>
Wed, 28 Jan 2026 18:11:44 +0000 (10:11 -0800)
committerWei Liu <wei.liu@kernel.org>
Wed, 4 Feb 2026 06:17:05 +0000 (06:17 +0000)
hv_stats_page belongs in hvhdk.h, move it there.

It does not require a union to access the data for different counters,
just use a single u64 array for simplicity and to match the Windows
definitions.

While at it, correct the ARM64 value for VpRootDispatchThreadBlocked.

Signed-off-by: Nuno Das Neves <nunodasneves@linux.microsoft.com>
Acked-by: Stanislav Kinsburskii <skinsburskii@linux.microsoft.com>
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
drivers/hv/mshv_root_main.c
include/hyperv/hvhdk.h

index e679cebadfd0949db72f8c61177f4f271efabb31..8803cc71a5422ee717f1a867cc9d35a36612e3f0 100644 (file)
@@ -39,22 +39,12 @@ MODULE_AUTHOR("Microsoft");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Microsoft Hyper-V root partition VMM interface /dev/mshv");
 
-/* TODO move this to another file when debugfs code is added */
-enum hv_stats_vp_counters {                    /* HV_THREAD_COUNTER */
-#if defined(CONFIG_X86)
-       VpRootDispatchThreadBlocked                     = 202,
+/* HV_THREAD_COUNTER */
+#if defined(CONFIG_X86_64)
+#define HV_VP_COUNTER_ROOT_DISPATCH_THREAD_BLOCKED 202
 #elif defined(CONFIG_ARM64)
-       VpRootDispatchThreadBlocked                     = 94,
+#define HV_VP_COUNTER_ROOT_DISPATCH_THREAD_BLOCKED 95
 #endif
-       VpStatsMaxCounter
-};
-
-struct hv_stats_page {
-       union {
-               u64 vp_cntrs[VpStatsMaxCounter];                /* VP counters */
-               u8 data[HV_HYP_PAGE_SIZE];
-       };
-} __packed;
 
 struct mshv_root mshv_root;
 
@@ -485,12 +475,11 @@ static u64 mshv_vp_interrupt_pending(struct mshv_vp *vp)
 static bool mshv_vp_dispatch_thread_blocked(struct mshv_vp *vp)
 {
        struct hv_stats_page **stats = vp->vp_stats_pages;
-       u64 *self_vp_cntrs = stats[HV_STATS_AREA_SELF]->vp_cntrs;
-       u64 *parent_vp_cntrs = stats[HV_STATS_AREA_PARENT]->vp_cntrs;
+       u64 *self_vp_cntrs = stats[HV_STATS_AREA_SELF]->data;
+       u64 *parent_vp_cntrs = stats[HV_STATS_AREA_PARENT]->data;
 
-       if (self_vp_cntrs[VpRootDispatchThreadBlocked])
-               return self_vp_cntrs[VpRootDispatchThreadBlocked];
-       return parent_vp_cntrs[VpRootDispatchThreadBlocked];
+       return parent_vp_cntrs[HV_VP_COUNTER_ROOT_DISPATCH_THREAD_BLOCKED] ||
+              self_vp_cntrs[HV_VP_COUNTER_ROOT_DISPATCH_THREAD_BLOCKED];
 }
 
 static int
index 08965970c17dfc1d3ebae2fc17b3baa21f8b2eb8..79d1f16a850a8826a1a0b3969f3f4b30b8945b77 100644 (file)
 #include "hvhdk_mini.h"
 #include "hvgdk.h"
 
+/*
+ * Hypervisor statistics page format
+ */
+struct hv_stats_page {
+       u64 data[HV_HYP_PAGE_SIZE / sizeof(u64)];
+} __packed;
+
 /* Bits for dirty mask of hv_vp_register_page */
 #define HV_X64_REGISTER_CLASS_GENERAL  0
 #define HV_X64_REGISTER_CLASS_IP       1