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>
This commit is contained in:
Nuno Das Neves
2026-02-04 06:17:05 +00:00
committed by Wei Liu
parent c527c7aee2
commit df40f32c87
2 changed files with 15 additions and 19 deletions
+8 -19
View 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
+7
View File
@@ -10,6 +10,13 @@
#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