mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user