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 <[email protected]>
---
 drivers/hv/mshv_root_main.c | 22 ++++++----------------
 include/hyperv/hvhdk.h      |  8 ++++++++
 2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
index fbfc9e7d9fa4..12825666e21b 100644
--- a/drivers/hv/mshv_root_main.c
+++ b/drivers/hv/mshv_root_main.c
@@ -39,23 +39,14 @@ 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,
+       VpRootDispatchThreadBlocked = 202,
 #elif defined(CONFIG_ARM64)
-       VpRootDispatchThreadBlocked                     = 94,
+       VpRootDispatchThreadBlocked = 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;
 
 enum hv_scheduler_type hv_scheduler_type;
@@ -485,12 +476,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[VpRootDispatchThreadBlocked] ||
+              self_vp_cntrs[VpRootDispatchThreadBlocked];
 }
 
 static int
diff --git a/include/hyperv/hvhdk.h b/include/hyperv/hvhdk.h
index 469186df7826..ac501969105c 100644
--- a/include/hyperv/hvhdk.h
+++ b/include/hyperv/hvhdk.h
@@ -10,6 +10,14 @@
 #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
-- 
2.34.1


Reply via email to