root/drivers/hv/mshv_debugfs_counters.c
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2026, Microsoft Corporation.
 *
 * Data for printing stats page counters via debugfs.
 *
 * Authors: Microsoft Linux virtualization team
 */

/*
 * For simplicity, this file is included directly in mshv_debugfs.c.
 * If these are ever needed elsewhere they should be compiled separately.
 * Ensure this file is not used twice by accident.
 */
#ifndef MSHV_DEBUGFS_C
#error "This file should only be included in mshv_debugfs.c"
#endif

/* HV_HYPERVISOR_COUNTER */
static char *hv_hypervisor_counters[] = {
        [1] = "HvLogicalProcessors",
        [2] = "HvPartitions",
        [3] = "HvTotalPages",
        [4] = "HvVirtualProcessors",
        [5] = "HvMonitoredNotifications",
        [6] = "HvModernStandbyEntries",
        [7] = "HvPlatformIdleTransitions",
        [8] = "HvHypervisorStartupCost",

        [10] = "HvIOSpacePages",
        [11] = "HvNonEssentialPagesForDump",
        [12] = "HvSubsumedPages",
};

/* HV_CPU_COUNTER */
static char *hv_lp_counters[] = {
        [1] = "LpGlobalTime",
        [2] = "LpTotalRunTime",
        [3] = "LpHypervisorRunTime",
        [4] = "LpHardwareInterrupts",
        [5] = "LpContextSwitches",
        [6] = "LpInterProcessorInterrupts",
        [7] = "LpSchedulerInterrupts",
        [8] = "LpTimerInterrupts",
        [9] = "LpInterProcessorInterruptsSent",
        [10] = "LpProcessorHalts",
        [11] = "LpMonitorTransitionCost",
        [12] = "LpContextSwitchTime",
        [13] = "LpC1TransitionsCount",
        [14] = "LpC1RunTime",
        [15] = "LpC2TransitionsCount",
        [16] = "LpC2RunTime",
        [17] = "LpC3TransitionsCount",
        [18] = "LpC3RunTime",
        [19] = "LpRootVpIndex",
        [20] = "LpIdleSequenceNumber",
        [21] = "LpGlobalTscCount",
        [22] = "LpActiveTscCount",
        [23] = "LpIdleAccumulation",
        [24] = "LpReferenceCycleCount0",
        [25] = "LpActualCycleCount0",
        [26] = "LpReferenceCycleCount1",
        [27] = "LpActualCycleCount1",
        [28] = "LpProximityDomainId",
        [29] = "LpPostedInterruptNotifications",
        [30] = "LpBranchPredictorFlushes",
#if IS_ENABLED(CONFIG_X86_64)
        [31] = "LpL1DataCacheFlushes",
        [32] = "LpImmediateL1DataCacheFlushes",
        [33] = "LpMbFlushes",
        [34] = "LpCounterRefreshSequenceNumber",
        [35] = "LpCounterRefreshReferenceTime",
        [36] = "LpIdleAccumulationSnapshot",
        [37] = "LpActiveTscCountSnapshot",
        [38] = "LpHwpRequestContextSwitches",
        [39] = "LpPlaceholder1",
        [40] = "LpPlaceholder2",
        [41] = "LpPlaceholder3",
        [42] = "LpPlaceholder4",
        [43] = "LpPlaceholder5",
        [44] = "LpPlaceholder6",
        [45] = "LpPlaceholder7",
        [46] = "LpPlaceholder8",
        [47] = "LpPlaceholder9",
        [48] = "LpSchLocalRunListSize",
        [49] = "LpReserveGroupId",
        [50] = "LpRunningPriority",
        [51] = "LpPerfmonInterruptCount",
#elif IS_ENABLED(CONFIG_ARM64)
        [31] = "LpCounterRefreshSequenceNumber",
        [32] = "LpCounterRefreshReferenceTime",
        [33] = "LpIdleAccumulationSnapshot",
        [34] = "LpActiveTscCountSnapshot",
        [35] = "LpHwpRequestContextSwitches",
        [36] = "LpPlaceholder2",
        [37] = "LpPlaceholder3",
        [38] = "LpPlaceholder4",
        [39] = "LpPlaceholder5",
        [40] = "LpPlaceholder6",
        [41] = "LpPlaceholder7",
        [42] = "LpPlaceholder8",
        [43] = "LpPlaceholder9",
        [44] = "LpSchLocalRunListSize",
        [45] = "LpReserveGroupId",
        [46] = "LpRunningPriority",
#endif
};

/* HV_PROCESS_COUNTER */
static char *hv_partition_counters[] = {
        [1] = "PtVirtualProcessors",

        [3] = "PtTlbSize",
        [4] = "PtAddressSpaces",
        [5] = "PtDepositedPages",
        [6] = "PtGpaPages",
        [7] = "PtGpaSpaceModifications",
        [8] = "PtVirtualTlbFlushEntires",
        [9] = "PtRecommendedTlbSize",
        [10] = "PtGpaPages4K",
        [11] = "PtGpaPages2M",
        [12] = "PtGpaPages1G",
        [13] = "PtGpaPages512G",
        [14] = "PtDevicePages4K",
        [15] = "PtDevicePages2M",
        [16] = "PtDevicePages1G",
        [17] = "PtDevicePages512G",
        [18] = "PtAttachedDevices",
        [19] = "PtDeviceInterruptMappings",
        [20] = "PtIoTlbFlushes",
        [21] = "PtIoTlbFlushCost",
        [22] = "PtDeviceInterruptErrors",
        [23] = "PtDeviceDmaErrors",
        [24] = "PtDeviceInterruptThrottleEvents",
        [25] = "PtSkippedTimerTicks",
        [26] = "PtPartitionId",
#if IS_ENABLED(CONFIG_X86_64)
        [27] = "PtNestedTlbSize",
        [28] = "PtRecommendedNestedTlbSize",
        [29] = "PtNestedTlbFreeListSize",
        [30] = "PtNestedTlbTrimmedPages",
        [31] = "PtPagesShattered",
        [32] = "PtPagesRecombined",
        [33] = "PtHwpRequestValue",
        [34] = "PtAutoSuspendEnableTime",
        [35] = "PtAutoSuspendTriggerTime",
        [36] = "PtAutoSuspendDisableTime",
        [37] = "PtPlaceholder1",
        [38] = "PtPlaceholder2",
        [39] = "PtPlaceholder3",
        [40] = "PtPlaceholder4",
        [41] = "PtPlaceholder5",
        [42] = "PtPlaceholder6",
        [43] = "PtPlaceholder7",
        [44] = "PtPlaceholder8",
        [45] = "PtHypervisorStateTransferGeneration",
        [46] = "PtNumberofActiveChildPartitions",
#elif IS_ENABLED(CONFIG_ARM64)
        [27] = "PtHwpRequestValue",
        [28] = "PtAutoSuspendEnableTime",
        [29] = "PtAutoSuspendTriggerTime",
        [30] = "PtAutoSuspendDisableTime",
        [31] = "PtPlaceholder1",
        [32] = "PtPlaceholder2",
        [33] = "PtPlaceholder3",
        [34] = "PtPlaceholder4",
        [35] = "PtPlaceholder5",
        [36] = "PtPlaceholder6",
        [37] = "PtPlaceholder7",
        [38] = "PtPlaceholder8",
        [39] = "PtHypervisorStateTransferGeneration",
        [40] = "PtNumberofActiveChildPartitions",
#endif
};

/* HV_THREAD_COUNTER */
static char *hv_vp_counters[] = {
        [1] = "VpTotalRunTime",
        [2] = "VpHypervisorRunTime",
        [3] = "VpRemoteNodeRunTime",
        [4] = "VpNormalizedRunTime",
        [5] = "VpIdealCpu",

        [7] = "VpHypercallsCount",
        [8] = "VpHypercallsTime",
#if IS_ENABLED(CONFIG_X86_64)
        [9] = "VpPageInvalidationsCount",
        [10] = "VpPageInvalidationsTime",
        [11] = "VpControlRegisterAccessesCount",
        [12] = "VpControlRegisterAccessesTime",
        [13] = "VpIoInstructionsCount",
        [14] = "VpIoInstructionsTime",
        [15] = "VpHltInstructionsCount",
        [16] = "VpHltInstructionsTime",
        [17] = "VpMwaitInstructionsCount",
        [18] = "VpMwaitInstructionsTime",
        [19] = "VpCpuidInstructionsCount",
        [20] = "VpCpuidInstructionsTime",
        [21] = "VpMsrAccessesCount",
        [22] = "VpMsrAccessesTime",
        [23] = "VpOtherInterceptsCount",
        [24] = "VpOtherInterceptsTime",
        [25] = "VpExternalInterruptsCount",
        [26] = "VpExternalInterruptsTime",
        [27] = "VpPendingInterruptsCount",
        [28] = "VpPendingInterruptsTime",
        [29] = "VpEmulatedInstructionsCount",
        [30] = "VpEmulatedInstructionsTime",
        [31] = "VpDebugRegisterAccessesCount",
        [32] = "VpDebugRegisterAccessesTime",
        [33] = "VpPageFaultInterceptsCount",
        [34] = "VpPageFaultInterceptsTime",
        [35] = "VpGuestPageTableMaps",
        [36] = "VpLargePageTlbFills",
        [37] = "VpSmallPageTlbFills",
        [38] = "VpReflectedGuestPageFaults",
        [39] = "VpApicMmioAccesses",
        [40] = "VpIoInterceptMessages",
        [41] = "VpMemoryInterceptMessages",
        [42] = "VpApicEoiAccesses",
        [43] = "VpOtherMessages",
        [44] = "VpPageTableAllocations",
        [45] = "VpLogicalProcessorMigrations",
        [46] = "VpAddressSpaceEvictions",
        [47] = "VpAddressSpaceSwitches",
        [48] = "VpAddressDomainFlushes",
        [49] = "VpAddressSpaceFlushes",
        [50] = "VpGlobalGvaRangeFlushes",
        [51] = "VpLocalGvaRangeFlushes",
        [52] = "VpPageTableEvictions",
        [53] = "VpPageTableReclamations",
        [54] = "VpPageTableResets",
        [55] = "VpPageTableValidations",
        [56] = "VpApicTprAccesses",
        [57] = "VpPageTableWriteIntercepts",
        [58] = "VpSyntheticInterrupts",
        [59] = "VpVirtualInterrupts",
        [60] = "VpApicIpisSent",
        [61] = "VpApicSelfIpisSent",
        [62] = "VpGpaSpaceHypercalls",
        [63] = "VpLogicalProcessorHypercalls",
        [64] = "VpLongSpinWaitHypercalls",
        [65] = "VpOtherHypercalls",
        [66] = "VpSyntheticInterruptHypercalls",
        [67] = "VpVirtualInterruptHypercalls",
        [68] = "VpVirtualMmuHypercalls",
        [69] = "VpVirtualProcessorHypercalls",
        [70] = "VpHardwareInterrupts",
        [71] = "VpNestedPageFaultInterceptsCount",
        [72] = "VpNestedPageFaultInterceptsTime",
        [73] = "VpPageScans",
        [74] = "VpLogicalProcessorDispatches",
        [75] = "VpWaitingForCpuTime",
        [76] = "VpExtendedHypercalls",
        [77] = "VpExtendedHypercallInterceptMessages",
        [78] = "VpMbecNestedPageTableSwitches",
        [79] = "VpOtherReflectedGuestExceptions",
        [80] = "VpGlobalIoTlbFlushes",
        [81] = "VpGlobalIoTlbFlushCost",
        [82] = "VpLocalIoTlbFlushes",
        [83] = "VpLocalIoTlbFlushCost",
        [84] = "VpHypercallsForwardedCount",
        [85] = "VpHypercallsForwardingTime",
        [86] = "VpPageInvalidationsForwardedCount",
        [87] = "VpPageInvalidationsForwardingTime",
        [88] = "VpControlRegisterAccessesForwardedCount",
        [89] = "VpControlRegisterAccessesForwardingTime",
        [90] = "VpIoInstructionsForwardedCount",
        [91] = "VpIoInstructionsForwardingTime",
        [92] = "VpHltInstructionsForwardedCount",
        [93] = "VpHltInstructionsForwardingTime",
        [94] = "VpMwaitInstructionsForwardedCount",
        [95] = "VpMwaitInstructionsForwardingTime",
        [96] = "VpCpuidInstructionsForwardedCount",
        [97] = "VpCpuidInstructionsForwardingTime",
        [98] = "VpMsrAccessesForwardedCount",
        [99] = "VpMsrAccessesForwardingTime",
        [100] = "VpOtherInterceptsForwardedCount",
        [101] = "VpOtherInterceptsForwardingTime",
        [102] = "VpExternalInterruptsForwardedCount",
        [103] = "VpExternalInterruptsForwardingTime",
        [104] = "VpPendingInterruptsForwardedCount",
        [105] = "VpPendingInterruptsForwardingTime",
        [106] = "VpEmulatedInstructionsForwardedCount",
        [107] = "VpEmulatedInstructionsForwardingTime",
        [108] = "VpDebugRegisterAccessesForwardedCount",
        [109] = "VpDebugRegisterAccessesForwardingTime",
        [110] = "VpPageFaultInterceptsForwardedCount",
        [111] = "VpPageFaultInterceptsForwardingTime",
        [112] = "VpVmclearEmulationCount",
        [113] = "VpVmclearEmulationTime",
        [114] = "VpVmptrldEmulationCount",
        [115] = "VpVmptrldEmulationTime",
        [116] = "VpVmptrstEmulationCount",
        [117] = "VpVmptrstEmulationTime",
        [118] = "VpVmreadEmulationCount",
        [119] = "VpVmreadEmulationTime",
        [120] = "VpVmwriteEmulationCount",
        [121] = "VpVmwriteEmulationTime",
        [122] = "VpVmxoffEmulationCount",
        [123] = "VpVmxoffEmulationTime",
        [124] = "VpVmxonEmulationCount",
        [125] = "VpVmxonEmulationTime",
        [126] = "VpNestedVMEntriesCount",
        [127] = "VpNestedVMEntriesTime",
        [128] = "VpNestedSLATSoftPageFaultsCount",
        [129] = "VpNestedSLATSoftPageFaultsTime",
        [130] = "VpNestedSLATHardPageFaultsCount",
        [131] = "VpNestedSLATHardPageFaultsTime",
        [132] = "VpInvEptAllContextEmulationCount",
        [133] = "VpInvEptAllContextEmulationTime",
        [134] = "VpInvEptSingleContextEmulationCount",
        [135] = "VpInvEptSingleContextEmulationTime",
        [136] = "VpInvVpidAllContextEmulationCount",
        [137] = "VpInvVpidAllContextEmulationTime",
        [138] = "VpInvVpidSingleContextEmulationCount",
        [139] = "VpInvVpidSingleContextEmulationTime",
        [140] = "VpInvVpidSingleAddressEmulationCount",
        [141] = "VpInvVpidSingleAddressEmulationTime",
        [142] = "VpNestedTlbPageTableReclamations",
        [143] = "VpNestedTlbPageTableEvictions",
        [144] = "VpFlushGuestPhysicalAddressSpaceHypercalls",
        [145] = "VpFlushGuestPhysicalAddressListHypercalls",
        [146] = "VpPostedInterruptNotifications",
        [147] = "VpPostedInterruptScans",
        [148] = "VpTotalCoreRunTime",
        [149] = "VpMaximumRunTime",
        [150] = "VpHwpRequestContextSwitches",
        [151] = "VpWaitingForCpuTimeBucket0",
        [152] = "VpWaitingForCpuTimeBucket1",
        [153] = "VpWaitingForCpuTimeBucket2",
        [154] = "VpWaitingForCpuTimeBucket3",
        [155] = "VpWaitingForCpuTimeBucket4",
        [156] = "VpWaitingForCpuTimeBucket5",
        [157] = "VpWaitingForCpuTimeBucket6",
        [158] = "VpVmloadEmulationCount",
        [159] = "VpVmloadEmulationTime",
        [160] = "VpVmsaveEmulationCount",
        [161] = "VpVmsaveEmulationTime",
        [162] = "VpGifInstructionEmulationCount",
        [163] = "VpGifInstructionEmulationTime",
        [164] = "VpEmulatedErrataSvmInstructions",
        [165] = "VpPlaceholder1",
        [166] = "VpPlaceholder2",
        [167] = "VpPlaceholder3",
        [168] = "VpPlaceholder4",
        [169] = "VpPlaceholder5",
        [170] = "VpPlaceholder6",
        [171] = "VpPlaceholder7",
        [172] = "VpPlaceholder8",
        [173] = "VpContentionTime",
        [174] = "VpWakeUpTime",
        [175] = "VpSchedulingPriority",
        [176] = "VpRdpmcInstructionsCount",
        [177] = "VpRdpmcInstructionsTime",
        [178] = "VpPerfmonPmuMsrAccessesCount",
        [179] = "VpPerfmonLbrMsrAccessesCount",
        [180] = "VpPerfmonIptMsrAccessesCount",
        [181] = "VpPerfmonInterruptCount",
        [182] = "VpVtl1DispatchCount",
        [183] = "VpVtl2DispatchCount",
        [184] = "VpVtl2DispatchBucket0",
        [185] = "VpVtl2DispatchBucket1",
        [186] = "VpVtl2DispatchBucket2",
        [187] = "VpVtl2DispatchBucket3",
        [188] = "VpVtl2DispatchBucket4",
        [189] = "VpVtl2DispatchBucket5",
        [190] = "VpVtl2DispatchBucket6",
        [191] = "VpVtl1RunTime",
        [192] = "VpVtl2RunTime",
        [193] = "VpIommuHypercalls",
        [194] = "VpCpuGroupHypercalls",
        [195] = "VpVsmHypercalls",
        [196] = "VpEventLogHypercalls",
        [197] = "VpDeviceDomainHypercalls",
        [198] = "VpDepositHypercalls",
        [199] = "VpSvmHypercalls",
        [200] = "VpBusLockAcquisitionCount",
        [201] = "VpLoadAvg",
        [202] = "VpRootDispatchThreadBlocked",
        [203] = "VpIdleCpuTime",
        [204] = "VpWaitingForCpuTimeBucket7",
        [205] = "VpWaitingForCpuTimeBucket8",
        [206] = "VpWaitingForCpuTimeBucket9",
        [207] = "VpWaitingForCpuTimeBucket10",
        [208] = "VpWaitingForCpuTimeBucket11",
        [209] = "VpWaitingForCpuTimeBucket12",
        [210] = "VpHierarchicalSuspendTime",
        [211] = "VpExpressSchedulingAttempts",
        [212] = "VpExpressSchedulingCount",
#elif IS_ENABLED(CONFIG_ARM64)
        [9] = "VpSysRegAccessesCount",
        [10] = "VpSysRegAccessesTime",
        [11] = "VpSmcInstructionsCount",
        [12] = "VpSmcInstructionsTime",
        [13] = "VpOtherInterceptsCount",
        [14] = "VpOtherInterceptsTime",
        [15] = "VpExternalInterruptsCount",
        [16] = "VpExternalInterruptsTime",
        [17] = "VpPendingInterruptsCount",
        [18] = "VpPendingInterruptsTime",
        [19] = "VpGuestPageTableMaps",
        [20] = "VpLargePageTlbFills",
        [21] = "VpSmallPageTlbFills",
        [22] = "VpReflectedGuestPageFaults",
        [23] = "VpMemoryInterceptMessages",
        [24] = "VpOtherMessages",
        [25] = "VpLogicalProcessorMigrations",
        [26] = "VpAddressDomainFlushes",
        [27] = "VpAddressSpaceFlushes",
        [28] = "VpSyntheticInterrupts",
        [29] = "VpVirtualInterrupts",
        [30] = "VpApicSelfIpisSent",
        [31] = "VpGpaSpaceHypercalls",
        [32] = "VpLogicalProcessorHypercalls",
        [33] = "VpLongSpinWaitHypercalls",
        [34] = "VpOtherHypercalls",
        [35] = "VpSyntheticInterruptHypercalls",
        [36] = "VpVirtualInterruptHypercalls",
        [37] = "VpVirtualMmuHypercalls",
        [38] = "VpVirtualProcessorHypercalls",
        [39] = "VpHardwareInterrupts",
        [40] = "VpNestedPageFaultInterceptsCount",
        [41] = "VpNestedPageFaultInterceptsTime",
        [42] = "VpLogicalProcessorDispatches",
        [43] = "VpWaitingForCpuTime",
        [44] = "VpExtendedHypercalls",
        [45] = "VpExtendedHypercallInterceptMessages",
        [46] = "VpMbecNestedPageTableSwitches",
        [47] = "VpOtherReflectedGuestExceptions",
        [48] = "VpGlobalIoTlbFlushes",
        [49] = "VpGlobalIoTlbFlushCost",
        [50] = "VpLocalIoTlbFlushes",
        [51] = "VpLocalIoTlbFlushCost",
        [52] = "VpFlushGuestPhysicalAddressSpaceHypercalls",
        [53] = "VpFlushGuestPhysicalAddressListHypercalls",
        [54] = "VpPostedInterruptNotifications",
        [55] = "VpPostedInterruptScans",
        [56] = "VpTotalCoreRunTime",
        [57] = "VpMaximumRunTime",
        [58] = "VpWaitingForCpuTimeBucket0",
        [59] = "VpWaitingForCpuTimeBucket1",
        [60] = "VpWaitingForCpuTimeBucket2",
        [61] = "VpWaitingForCpuTimeBucket3",
        [62] = "VpWaitingForCpuTimeBucket4",
        [63] = "VpWaitingForCpuTimeBucket5",
        [64] = "VpWaitingForCpuTimeBucket6",
        [65] = "VpHwpRequestContextSwitches",
        [66] = "VpPlaceholder2",
        [67] = "VpPlaceholder3",
        [68] = "VpPlaceholder4",
        [69] = "VpPlaceholder5",
        [70] = "VpPlaceholder6",
        [71] = "VpPlaceholder7",
        [72] = "VpPlaceholder8",
        [73] = "VpContentionTime",
        [74] = "VpWakeUpTime",
        [75] = "VpSchedulingPriority",
        [76] = "VpVtl1DispatchCount",
        [77] = "VpVtl2DispatchCount",
        [78] = "VpVtl2DispatchBucket0",
        [79] = "VpVtl2DispatchBucket1",
        [80] = "VpVtl2DispatchBucket2",
        [81] = "VpVtl2DispatchBucket3",
        [82] = "VpVtl2DispatchBucket4",
        [83] = "VpVtl2DispatchBucket5",
        [84] = "VpVtl2DispatchBucket6",
        [85] = "VpVtl1RunTime",
        [86] = "VpVtl2RunTime",
        [87] = "VpIommuHypercalls",
        [88] = "VpCpuGroupHypercalls",
        [89] = "VpVsmHypercalls",
        [90] = "VpEventLogHypercalls",
        [91] = "VpDeviceDomainHypercalls",
        [92] = "VpDepositHypercalls",
        [93] = "VpSvmHypercalls",
        [94] = "VpLoadAvg",
        [95] = "VpRootDispatchThreadBlocked",
        [96] = "VpIdleCpuTime",
        [97] = "VpWaitingForCpuTimeBucket7",
        [98] = "VpWaitingForCpuTimeBucket8",
        [99] = "VpWaitingForCpuTimeBucket9",
        [100] = "VpWaitingForCpuTimeBucket10",
        [101] = "VpWaitingForCpuTimeBucket11",
        [102] = "VpWaitingForCpuTimeBucket12",
        [103] = "VpHierarchicalSuspendTime",
        [104] = "VpExpressSchedulingAttempts",
        [105] = "VpExpressSchedulingCount",
#endif
};