summaryrefslogtreecommitdiff
path: root/drivers/hv
diff options
context:
space:
mode:
authorNuno Das Neves <nunodasneves@linux.microsoft.com>2026-01-28 10:11:44 -0800
committerWei Liu <wei.liu@kernel.org>2026-02-04 06:17:05 +0000
commitdf40f32c87be64c96ee974573968592e147a4ded (patch)
tree26b8d4440da9b76e64fd8f97d9b67f650c707a7a /drivers/hv
parentc527c7aee28f266423afff872df7bff4fad3e084 (diff)
mshv: Update hv_stats_page definitions
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>
Diffstat (limited to 'drivers/hv')
-rw-r--r--drivers/hv/mshv_root_main.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
index e679cebadfd0..8803cc71a542 100644
--- a/drivers/hv/mshv_root_main.c
+++ b/drivers/hv/mshv_root_main.c
@@ -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