On 1/23/2026 9:09 AM, Michael Kelley wrote: > From: Nuno Das Neves <[email protected]> Sent: Wednesday, > January 21, 2026 1:46 PM >> >> Introduce hv_counters.c, containing static data corresponding to >> HV_*_COUNTER enums in the hypervisor source. Defining the enum >> members as an array instead makes more sense, since it will be >> iterated over to print counter information to debugfs. > > I would have expected the filename to be mshv_counters.c, so that the > association > with the MS hypervisor is clear. And the file is inextricably linked to > mshv_debugfs.c, > which of course has the "mshv_" prefix. Or is there some thinking I'm not > aware of > for using the "hv_" prefix? > Good question - I originally thought of using hv_ because the definitions inside are part of the hypervisor ABI, and hence also have the hv_ prefix.
However you have a good point, and I'm not opposed to changing it. Maybe to just be super explicit: "mshv_debugfs_counters.c" ? > Also, I see in Patch 7 of this series that hv_counters.c is #included as a .c > file > in mshv_debugfs.c. Is there a reason for doing the #include instead of adding > hv_counters.c to the Makefile and building it on its own? You would need to > add a handful of extern statements to mshv_root.h so that the tables are > referenceable from mshv_debugfs.c. But that would seem to be the more > normal way of doing things. #including a .c file is unusual. > Yes...I thought I could avoid noise in mshv_root.h and the Makefile, since it's only relevant for mshv_debugfs.c. However I could see this file (whether as .c or .h) being misused and included elsewhere inadvertantly, which would duplicate the tables, so maybe doing it the normal way is a better idea, even if mshv_debugfs.c is likely the only user. > See one more comment on the last line of this patch ... > >> >> Include hypervisor, logical processor, partition, and virtual >> processor counters. >> >> Signed-off-by: Nuno Das Neves <[email protected]> >> --- >> drivers/hv/hv_counters.c | 488 +++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 488 insertions(+) >> create mode 100644 drivers/hv/hv_counters.c >> >> diff --git a/drivers/hv/hv_counters.c b/drivers/hv/hv_counters.c >> new file mode 100644 >> index 000000000000..a8e07e72cc29 >> --- /dev/null >> +++ b/drivers/hv/hv_counters.c >> @@ -0,0 +1,488 @@ >> +// 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 >> + */ >> + >> +struct hv_counter_entry { >> + char *name; >> + int idx; >> +}; >> + >> +/* HV_HYPERVISOR_COUNTER */ >> +static struct hv_counter_entry hv_hypervisor_counters[] = { >> + { "HvLogicalProcessors", 1 }, >> + { "HvPartitions", 2 }, >> + { "HvTotalPages", 3 }, >> + { "HvVirtualProcessors", 4 }, >> + { "HvMonitoredNotifications", 5 }, >> + { "HvModernStandbyEntries", 6 }, >> + { "HvPlatformIdleTransitions", 7 }, >> + { "HvHypervisorStartupCost", 8 }, >> + >> + { "HvIOSpacePages", 10 }, >> + { "HvNonEssentialPagesForDump", 11 }, >> + { "HvSubsumedPages", 12 }, >> +}; >> + >> +/* HV_CPU_COUNTER */ >> +static struct hv_counter_entry hv_lp_counters[] = { >> + { "LpGlobalTime", 1 }, >> + { "LpTotalRunTime", 2 }, >> + { "LpHypervisorRunTime", 3 }, >> + { "LpHardwareInterrupts", 4 }, >> + { "LpContextSwitches", 5 }, >> + { "LpInterProcessorInterrupts", 6 }, >> + { "LpSchedulerInterrupts", 7 }, >> + { "LpTimerInterrupts", 8 }, >> + { "LpInterProcessorInterruptsSent", 9 }, >> + { "LpProcessorHalts", 10 }, >> + { "LpMonitorTransitionCost", 11 }, >> + { "LpContextSwitchTime", 12 }, >> + { "LpC1TransitionsCount", 13 }, >> + { "LpC1RunTime", 14 }, >> + { "LpC2TransitionsCount", 15 }, >> + { "LpC2RunTime", 16 }, >> + { "LpC3TransitionsCount", 17 }, >> + { "LpC3RunTime", 18 }, >> + { "LpRootVpIndex", 19 }, >> + { "LpIdleSequenceNumber", 20 }, >> + { "LpGlobalTscCount", 21 }, >> + { "LpActiveTscCount", 22 }, >> + { "LpIdleAccumulation", 23 }, >> + { "LpReferenceCycleCount0", 24 }, >> + { "LpActualCycleCount0", 25 }, >> + { "LpReferenceCycleCount1", 26 }, >> + { "LpActualCycleCount1", 27 }, >> + { "LpProximityDomainId", 28 }, >> + { "LpPostedInterruptNotifications", 29 }, >> + { "LpBranchPredictorFlushes", 30 }, >> +#if IS_ENABLED(CONFIG_X86_64) >> + { "LpL1DataCacheFlushes", 31 }, >> + { "LpImmediateL1DataCacheFlushes", 32 }, >> + { "LpMbFlushes", 33 }, >> + { "LpCounterRefreshSequenceNumber", 34 }, >> + { "LpCounterRefreshReferenceTime", 35 }, >> + { "LpIdleAccumulationSnapshot", 36 }, >> + { "LpActiveTscCountSnapshot", 37 }, >> + { "LpHwpRequestContextSwitches", 38 }, >> + { "LpPlaceholder1", 39 }, >> + { "LpPlaceholder2", 40 }, >> + { "LpPlaceholder3", 41 }, >> + { "LpPlaceholder4", 42 }, >> + { "LpPlaceholder5", 43 }, >> + { "LpPlaceholder6", 44 }, >> + { "LpPlaceholder7", 45 }, >> + { "LpPlaceholder8", 46 }, >> + { "LpPlaceholder9", 47 }, >> + { "LpSchLocalRunListSize", 48 }, >> + { "LpReserveGroupId", 49 }, >> + { "LpRunningPriority", 50 }, >> + { "LpPerfmonInterruptCount", 51 }, >> +#elif IS_ENABLED(CONFIG_ARM64) >> + { "LpCounterRefreshSequenceNumber", 31 }, >> + { "LpCounterRefreshReferenceTime", 32 }, >> + { "LpIdleAccumulationSnapshot", 33 }, >> + { "LpActiveTscCountSnapshot", 34 }, >> + { "LpHwpRequestContextSwitches", 35 }, >> + { "LpPlaceholder2", 36 }, >> + { "LpPlaceholder3", 37 }, >> + { "LpPlaceholder4", 38 }, >> + { "LpPlaceholder5", 39 }, >> + { "LpPlaceholder6", 40 }, >> + { "LpPlaceholder7", 41 }, >> + { "LpPlaceholder8", 42 }, >> + { "LpPlaceholder9", 43 }, >> + { "LpSchLocalRunListSize", 44 }, >> + { "LpReserveGroupId", 45 }, >> + { "LpRunningPriority", 46 }, >> +#endif >> +}; >> + >> +/* HV_PROCESS_COUNTER */ >> +static struct hv_counter_entry hv_partition_counters[] = { >> + { "PtVirtualProcessors", 1 }, >> + >> + { "PtTlbSize", 3 }, >> + { "PtAddressSpaces", 4 }, >> + { "PtDepositedPages", 5 }, >> + { "PtGpaPages", 6 }, >> + { "PtGpaSpaceModifications", 7 }, >> + { "PtVirtualTlbFlushEntires", 8 }, >> + { "PtRecommendedTlbSize", 9 }, >> + { "PtGpaPages4K", 10 }, >> + { "PtGpaPages2M", 11 }, >> + { "PtGpaPages1G", 12 }, >> + { "PtGpaPages512G", 13 }, >> + { "PtDevicePages4K", 14 }, >> + { "PtDevicePages2M", 15 }, >> + { "PtDevicePages1G", 16 }, >> + { "PtDevicePages512G", 17 }, >> + { "PtAttachedDevices", 18 }, >> + { "PtDeviceInterruptMappings", 19 }, >> + { "PtIoTlbFlushes", 20 }, >> + { "PtIoTlbFlushCost", 21 }, >> + { "PtDeviceInterruptErrors", 22 }, >> + { "PtDeviceDmaErrors", 23 }, >> + { "PtDeviceInterruptThrottleEvents", 24 }, >> + { "PtSkippedTimerTicks", 25 }, >> + { "PtPartitionId", 26 }, >> +#if IS_ENABLED(CONFIG_X86_64) >> + { "PtNestedTlbSize", 27 }, >> + { "PtRecommendedNestedTlbSize", 28 }, >> + { "PtNestedTlbFreeListSize", 29 }, >> + { "PtNestedTlbTrimmedPages", 30 }, >> + { "PtPagesShattered", 31 }, >> + { "PtPagesRecombined", 32 }, >> + { "PtHwpRequestValue", 33 }, >> + { "PtAutoSuspendEnableTime", 34 }, >> + { "PtAutoSuspendTriggerTime", 35 }, >> + { "PtAutoSuspendDisableTime", 36 }, >> + { "PtPlaceholder1", 37 }, >> + { "PtPlaceholder2", 38 }, >> + { "PtPlaceholder3", 39 }, >> + { "PtPlaceholder4", 40 }, >> + { "PtPlaceholder5", 41 }, >> + { "PtPlaceholder6", 42 }, >> + { "PtPlaceholder7", 43 }, >> + { "PtPlaceholder8", 44 }, >> + { "PtHypervisorStateTransferGeneration", 45 }, >> + { "PtNumberofActiveChildPartitions", 46 }, >> +#elif IS_ENABLED(CONFIG_ARM64) >> + { "PtHwpRequestValue", 27 }, >> + { "PtAutoSuspendEnableTime", 28 }, >> + { "PtAutoSuspendTriggerTime", 29 }, >> + { "PtAutoSuspendDisableTime", 30 }, >> + { "PtPlaceholder1", 31 }, >> + { "PtPlaceholder2", 32 }, >> + { "PtPlaceholder3", 33 }, >> + { "PtPlaceholder4", 34 }, >> + { "PtPlaceholder5", 35 }, >> + { "PtPlaceholder6", 36 }, >> + { "PtPlaceholder7", 37 }, >> + { "PtPlaceholder8", 38 }, >> + { "PtHypervisorStateTransferGeneration", 39 }, >> + { "PtNumberofActiveChildPartitions", 40 }, >> +#endif >> +}; >> + >> +/* HV_THREAD_COUNTER */ >> +static struct hv_counter_entry hv_vp_counters[] = { >> + { "VpTotalRunTime", 1 }, >> + { "VpHypervisorRunTime", 2 }, >> + { "VpRemoteNodeRunTime", 3 }, >> + { "VpNormalizedRunTime", 4 }, >> + { "VpIdealCpu", 5 }, >> + >> + { "VpHypercallsCount", 7 }, >> + { "VpHypercallsTime", 8 }, >> +#if IS_ENABLED(CONFIG_X86_64) >> + { "VpPageInvalidationsCount", 9 }, >> + { "VpPageInvalidationsTime", 10 }, >> + { "VpControlRegisterAccessesCount", 11 }, >> + { "VpControlRegisterAccessesTime", 12 }, >> + { "VpIoInstructionsCount", 13 }, >> + { "VpIoInstructionsTime", 14 }, >> + { "VpHltInstructionsCount", 15 }, >> + { "VpHltInstructionsTime", 16 }, >> + { "VpMwaitInstructionsCount", 17 }, >> + { "VpMwaitInstructionsTime", 18 }, >> + { "VpCpuidInstructionsCount", 19 }, >> + { "VpCpuidInstructionsTime", 20 }, >> + { "VpMsrAccessesCount", 21 }, >> + { "VpMsrAccessesTime", 22 }, >> + { "VpOtherInterceptsCount", 23 }, >> + { "VpOtherInterceptsTime", 24 }, >> + { "VpExternalInterruptsCount", 25 }, >> + { "VpExternalInterruptsTime", 26 }, >> + { "VpPendingInterruptsCount", 27 }, >> + { "VpPendingInterruptsTime", 28 }, >> + { "VpEmulatedInstructionsCount", 29 }, >> + { "VpEmulatedInstructionsTime", 30 }, >> + { "VpDebugRegisterAccessesCount", 31 }, >> + { "VpDebugRegisterAccessesTime", 32 }, >> + { "VpPageFaultInterceptsCount", 33 }, >> + { "VpPageFaultInterceptsTime", 34 }, >> + { "VpGuestPageTableMaps", 35 }, >> + { "VpLargePageTlbFills", 36 }, >> + { "VpSmallPageTlbFills", 37 }, >> + { "VpReflectedGuestPageFaults", 38 }, >> + { "VpApicMmioAccesses", 39 }, >> + { "VpIoInterceptMessages", 40 }, >> + { "VpMemoryInterceptMessages", 41 }, >> + { "VpApicEoiAccesses", 42 }, >> + { "VpOtherMessages", 43 }, >> + { "VpPageTableAllocations", 44 }, >> + { "VpLogicalProcessorMigrations", 45 }, >> + { "VpAddressSpaceEvictions", 46 }, >> + { "VpAddressSpaceSwitches", 47 }, >> + { "VpAddressDomainFlushes", 48 }, >> + { "VpAddressSpaceFlushes", 49 }, >> + { "VpGlobalGvaRangeFlushes", 50 }, >> + { "VpLocalGvaRangeFlushes", 51 }, >> + { "VpPageTableEvictions", 52 }, >> + { "VpPageTableReclamations", 53 }, >> + { "VpPageTableResets", 54 }, >> + { "VpPageTableValidations", 55 }, >> + { "VpApicTprAccesses", 56 }, >> + { "VpPageTableWriteIntercepts", 57 }, >> + { "VpSyntheticInterrupts", 58 }, >> + { "VpVirtualInterrupts", 59 }, >> + { "VpApicIpisSent", 60 }, >> + { "VpApicSelfIpisSent", 61 }, >> + { "VpGpaSpaceHypercalls", 62 }, >> + { "VpLogicalProcessorHypercalls", 63 }, >> + { "VpLongSpinWaitHypercalls", 64 }, >> + { "VpOtherHypercalls", 65 }, >> + { "VpSyntheticInterruptHypercalls", 66 }, >> + { "VpVirtualInterruptHypercalls", 67 }, >> + { "VpVirtualMmuHypercalls", 68 }, >> + { "VpVirtualProcessorHypercalls", 69 }, >> + { "VpHardwareInterrupts", 70 }, >> + { "VpNestedPageFaultInterceptsCount", 71 }, >> + { "VpNestedPageFaultInterceptsTime", 72 }, >> + { "VpPageScans", 73 }, >> + { "VpLogicalProcessorDispatches", 74 }, >> + { "VpWaitingForCpuTime", 75 }, >> + { "VpExtendedHypercalls", 76 }, >> + { "VpExtendedHypercallInterceptMessages", 77 }, >> + { "VpMbecNestedPageTableSwitches", 78 }, >> + { "VpOtherReflectedGuestExceptions", 79 }, >> + { "VpGlobalIoTlbFlushes", 80 }, >> + { "VpGlobalIoTlbFlushCost", 81 }, >> + { "VpLocalIoTlbFlushes", 82 }, >> + { "VpLocalIoTlbFlushCost", 83 }, >> + { "VpHypercallsForwardedCount", 84 }, >> + { "VpHypercallsForwardingTime", 85 }, >> + { "VpPageInvalidationsForwardedCount", 86 }, >> + { "VpPageInvalidationsForwardingTime", 87 }, >> + { "VpControlRegisterAccessesForwardedCount", 88 }, >> + { "VpControlRegisterAccessesForwardingTime", 89 }, >> + { "VpIoInstructionsForwardedCount", 90 }, >> + { "VpIoInstructionsForwardingTime", 91 }, >> + { "VpHltInstructionsForwardedCount", 92 }, >> + { "VpHltInstructionsForwardingTime", 93 }, >> + { "VpMwaitInstructionsForwardedCount", 94 }, >> + { "VpMwaitInstructionsForwardingTime", 95 }, >> + { "VpCpuidInstructionsForwardedCount", 96 }, >> + { "VpCpuidInstructionsForwardingTime", 97 }, >> + { "VpMsrAccessesForwardedCount", 98 }, >> + { "VpMsrAccessesForwardingTime", 99 }, >> + { "VpOtherInterceptsForwardedCount", 100 }, >> + { "VpOtherInterceptsForwardingTime", 101 }, >> + { "VpExternalInterruptsForwardedCount", 102 }, >> + { "VpExternalInterruptsForwardingTime", 103 }, >> + { "VpPendingInterruptsForwardedCount", 104 }, >> + { "VpPendingInterruptsForwardingTime", 105 }, >> + { "VpEmulatedInstructionsForwardedCount", 106 }, >> + { "VpEmulatedInstructionsForwardingTime", 107 }, >> + { "VpDebugRegisterAccessesForwardedCount", 108 }, >> + { "VpDebugRegisterAccessesForwardingTime", 109 }, >> + { "VpPageFaultInterceptsForwardedCount", 110 }, >> + { "VpPageFaultInterceptsForwardingTime", 111 }, >> + { "VpVmclearEmulationCount", 112 }, >> + { "VpVmclearEmulationTime", 113 }, >> + { "VpVmptrldEmulationCount", 114 }, >> + { "VpVmptrldEmulationTime", 115 }, >> + { "VpVmptrstEmulationCount", 116 }, >> + { "VpVmptrstEmulationTime", 117 }, >> + { "VpVmreadEmulationCount", 118 }, >> + { "VpVmreadEmulationTime", 119 }, >> + { "VpVmwriteEmulationCount", 120 }, >> + { "VpVmwriteEmulationTime", 121 }, >> + { "VpVmxoffEmulationCount", 122 }, >> + { "VpVmxoffEmulationTime", 123 }, >> + { "VpVmxonEmulationCount", 124 }, >> + { "VpVmxonEmulationTime", 125 }, >> + { "VpNestedVMEntriesCount", 126 }, >> + { "VpNestedVMEntriesTime", 127 }, >> + { "VpNestedSLATSoftPageFaultsCount", 128 }, >> + { "VpNestedSLATSoftPageFaultsTime", 129 }, >> + { "VpNestedSLATHardPageFaultsCount", 130 }, >> + { "VpNestedSLATHardPageFaultsTime", 131 }, >> + { "VpInvEptAllContextEmulationCount", 132 }, >> + { "VpInvEptAllContextEmulationTime", 133 }, >> + { "VpInvEptSingleContextEmulationCount", 134 }, >> + { "VpInvEptSingleContextEmulationTime", 135 }, >> + { "VpInvVpidAllContextEmulationCount", 136 }, >> + { "VpInvVpidAllContextEmulationTime", 137 }, >> + { "VpInvVpidSingleContextEmulationCount", 138 }, >> + { "VpInvVpidSingleContextEmulationTime", 139 }, >> + { "VpInvVpidSingleAddressEmulationCount", 140 }, >> + { "VpInvVpidSingleAddressEmulationTime", 141 }, >> + { "VpNestedTlbPageTableReclamations", 142 }, >> + { "VpNestedTlbPageTableEvictions", 143 }, >> + { "VpFlushGuestPhysicalAddressSpaceHypercalls", 144 }, >> + { "VpFlushGuestPhysicalAddressListHypercalls", 145 }, >> + { "VpPostedInterruptNotifications", 146 }, >> + { "VpPostedInterruptScans", 147 }, >> + { "VpTotalCoreRunTime", 148 }, >> + { "VpMaximumRunTime", 149 }, >> + { "VpHwpRequestContextSwitches", 150 }, >> + { "VpWaitingForCpuTimeBucket0", 151 }, >> + { "VpWaitingForCpuTimeBucket1", 152 }, >> + { "VpWaitingForCpuTimeBucket2", 153 }, >> + { "VpWaitingForCpuTimeBucket3", 154 }, >> + { "VpWaitingForCpuTimeBucket4", 155 }, >> + { "VpWaitingForCpuTimeBucket5", 156 }, >> + { "VpWaitingForCpuTimeBucket6", 157 }, >> + { "VpVmloadEmulationCount", 158 }, >> + { "VpVmloadEmulationTime", 159 }, >> + { "VpVmsaveEmulationCount", 160 }, >> + { "VpVmsaveEmulationTime", 161 }, >> + { "VpGifInstructionEmulationCount", 162 }, >> + { "VpGifInstructionEmulationTime", 163 }, >> + { "VpEmulatedErrataSvmInstructions", 164 }, >> + { "VpPlaceholder1", 165 }, >> + { "VpPlaceholder2", 166 }, >> + { "VpPlaceholder3", 167 }, >> + { "VpPlaceholder4", 168 }, >> + { "VpPlaceholder5", 169 }, >> + { "VpPlaceholder6", 170 }, >> + { "VpPlaceholder7", 171 }, >> + { "VpPlaceholder8", 172 }, >> + { "VpContentionTime", 173 }, >> + { "VpWakeUpTime", 174 }, >> + { "VpSchedulingPriority", 175 }, >> + { "VpRdpmcInstructionsCount", 176 }, >> + { "VpRdpmcInstructionsTime", 177 }, >> + { "VpPerfmonPmuMsrAccessesCount", 178 }, >> + { "VpPerfmonLbrMsrAccessesCount", 179 }, >> + { "VpPerfmonIptMsrAccessesCount", 180 }, >> + { "VpPerfmonInterruptCount", 181 }, >> + { "VpVtl1DispatchCount", 182 }, >> + { "VpVtl2DispatchCount", 183 }, >> + { "VpVtl2DispatchBucket0", 184 }, >> + { "VpVtl2DispatchBucket1", 185 }, >> + { "VpVtl2DispatchBucket2", 186 }, >> + { "VpVtl2DispatchBucket3", 187 }, >> + { "VpVtl2DispatchBucket4", 188 }, >> + { "VpVtl2DispatchBucket5", 189 }, >> + { "VpVtl2DispatchBucket6", 190 }, >> + { "VpVtl1RunTime", 191 }, >> + { "VpVtl2RunTime", 192 }, >> + { "VpIommuHypercalls", 193 }, >> + { "VpCpuGroupHypercalls", 194 }, >> + { "VpVsmHypercalls", 195 }, >> + { "VpEventLogHypercalls", 196 }, >> + { "VpDeviceDomainHypercalls", 197 }, >> + { "VpDepositHypercalls", 198 }, >> + { "VpSvmHypercalls", 199 }, >> + { "VpBusLockAcquisitionCount", 200 }, >> + { "VpLoadAvg", 201 }, >> + { "VpRootDispatchThreadBlocked", 202 }, >> + { "VpIdleCpuTime", 203 }, >> + { "VpWaitingForCpuTimeBucket7", 204 }, >> + { "VpWaitingForCpuTimeBucket8", 205 }, >> + { "VpWaitingForCpuTimeBucket9", 206 }, >> + { "VpWaitingForCpuTimeBucket10", 207 }, >> + { "VpWaitingForCpuTimeBucket11", 208 }, >> + { "VpWaitingForCpuTimeBucket12", 209 }, >> + { "VpHierarchicalSuspendTime", 210 }, >> + { "VpExpressSchedulingAttempts", 211 }, >> + { "VpExpressSchedulingCount", 212 }, >> + { "VpBusLockAcquisitionTime", 213 }, >> +#elif IS_ENABLED(CONFIG_ARM64) >> + { "VpSysRegAccessesCount", 9 }, >> + { "VpSysRegAccessesTime", 10 }, >> + { "VpSmcInstructionsCount", 11 }, >> + { "VpSmcInstructionsTime", 12 }, >> + { "VpOtherInterceptsCount", 13 }, >> + { "VpOtherInterceptsTime", 14 }, >> + { "VpExternalInterruptsCount", 15 }, >> + { "VpExternalInterruptsTime", 16 }, >> + { "VpPendingInterruptsCount", 17 }, >> + { "VpPendingInterruptsTime", 18 }, >> + { "VpGuestPageTableMaps", 19 }, >> + { "VpLargePageTlbFills", 20 }, >> + { "VpSmallPageTlbFills", 21 }, >> + { "VpReflectedGuestPageFaults", 22 }, >> + { "VpMemoryInterceptMessages", 23 }, >> + { "VpOtherMessages", 24 }, >> + { "VpLogicalProcessorMigrations", 25 }, >> + { "VpAddressDomainFlushes", 26 }, >> + { "VpAddressSpaceFlushes", 27 }, >> + { "VpSyntheticInterrupts", 28 }, >> + { "VpVirtualInterrupts", 29 }, >> + { "VpApicSelfIpisSent", 30 }, >> + { "VpGpaSpaceHypercalls", 31 }, >> + { "VpLogicalProcessorHypercalls", 32 }, >> + { "VpLongSpinWaitHypercalls", 33 }, >> + { "VpOtherHypercalls", 34 }, >> + { "VpSyntheticInterruptHypercalls", 35 }, >> + { "VpVirtualInterruptHypercalls", 36 }, >> + { "VpVirtualMmuHypercalls", 37 }, >> + { "VpVirtualProcessorHypercalls", 38 }, >> + { "VpHardwareInterrupts", 39 }, >> + { "VpNestedPageFaultInterceptsCount", 40 }, >> + { "VpNestedPageFaultInterceptsTime", 41 }, >> + { "VpLogicalProcessorDispatches", 42 }, >> + { "VpWaitingForCpuTime", 43 }, >> + { "VpExtendedHypercalls", 44 }, >> + { "VpExtendedHypercallInterceptMessages", 45 }, >> + { "VpMbecNestedPageTableSwitches", 46 }, >> + { "VpOtherReflectedGuestExceptions", 47 }, >> + { "VpGlobalIoTlbFlushes", 48 }, >> + { "VpGlobalIoTlbFlushCost", 49 }, >> + { "VpLocalIoTlbFlushes", 50 }, >> + { "VpLocalIoTlbFlushCost", 51 }, >> + { "VpFlushGuestPhysicalAddressSpaceHypercalls", 52 }, >> + { "VpFlushGuestPhysicalAddressListHypercalls", 53 }, >> + { "VpPostedInterruptNotifications", 54 }, >> + { "VpPostedInterruptScans", 55 }, >> + { "VpTotalCoreRunTime", 56 }, >> + { "VpMaximumRunTime", 57 }, >> + { "VpWaitingForCpuTimeBucket0", 58 }, >> + { "VpWaitingForCpuTimeBucket1", 59 }, >> + { "VpWaitingForCpuTimeBucket2", 60 }, >> + { "VpWaitingForCpuTimeBucket3", 61 }, >> + { "VpWaitingForCpuTimeBucket4", 62 }, >> + { "VpWaitingForCpuTimeBucket5", 63 }, >> + { "VpWaitingForCpuTimeBucket6", 64 }, >> + { "VpHwpRequestContextSwitches", 65 }, >> + { "VpPlaceholder2", 66 }, >> + { "VpPlaceholder3", 67 }, >> + { "VpPlaceholder4", 68 }, >> + { "VpPlaceholder5", 69 }, >> + { "VpPlaceholder6", 70 }, >> + { "VpPlaceholder7", 71 }, >> + { "VpPlaceholder8", 72 }, >> + { "VpContentionTime", 73 }, >> + { "VpWakeUpTime", 74 }, >> + { "VpSchedulingPriority", 75 }, >> + { "VpVtl1DispatchCount", 76 }, >> + { "VpVtl2DispatchCount", 77 }, >> + { "VpVtl2DispatchBucket0", 78 }, >> + { "VpVtl2DispatchBucket1", 79 }, >> + { "VpVtl2DispatchBucket2", 80 }, >> + { "VpVtl2DispatchBucket3", 81 }, >> + { "VpVtl2DispatchBucket4", 82 }, >> + { "VpVtl2DispatchBucket5", 83 }, >> + { "VpVtl2DispatchBucket6", 84 }, >> + { "VpVtl1RunTime", 85 }, >> + { "VpVtl2RunTime", 86 }, >> + { "VpIommuHypercalls", 87 }, >> + { "VpCpuGroupHypercalls", 88 }, >> + { "VpVsmHypercalls", 89 }, >> + { "VpEventLogHypercalls", 90 }, >> + { "VpDeviceDomainHypercalls", 91 }, >> + { "VpDepositHypercalls", 92 }, >> + { "VpSvmHypercalls", 93 }, >> + { "VpLoadAvg", 94 }, >> + { "VpRootDispatchThreadBlocked", 95 }, >> + { "VpIdleCpuTime", 96 }, >> + { "VpWaitingForCpuTimeBucket7", 97 }, >> + { "VpWaitingForCpuTimeBucket8", 98 }, >> + { "VpWaitingForCpuTimeBucket9", 99 }, >> + { "VpWaitingForCpuTimeBucket10", 100 }, >> + { "VpWaitingForCpuTimeBucket11", 101 }, >> + { "VpWaitingForCpuTimeBucket12", 102 }, >> + { "VpHierarchicalSuspendTime", 103 }, >> + { "VpExpressSchedulingAttempts", 104 }, >> + { "VpExpressSchedulingCount", 105 }, >> +#endif >> +}; >> + > > The patch puts a blank line at the end of the new hv_counters.c file. When > using > "git am" to apply this patch, I get this warning: > > .git/rebase-apply/patch:499: new blank line at EOF. > + > warning: 1 line adds whitespace errors. > > Line 499 is that blank line at the end of the new file. If I modify the patch > to remove > the adding of the blank line, "git am" will apply the patch with no warning. > This > should probably be fixed. > Thanks for pointing that out, I'll fix it! > Michael
