1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2026, Microsoft Corporation. 4 * 5 * Data for printing stats page counters via debugfs. 6 * 7 * Authors: Microsoft Linux virtualization team 8 */ 9 10 /* 11 * For simplicity, this file is included directly in mshv_debugfs.c. 12 * If these are ever needed elsewhere they should be compiled separately. 13 * Ensure this file is not used twice by accident. 14 */ 15 #ifndef MSHV_DEBUGFS_C 16 #error "This file should only be included in mshv_debugfs.c" 17 #endif 18 19 /* HV_HYPERVISOR_COUNTER */ 20 static char *hv_hypervisor_counters[] = { 21 [1] = "HvLogicalProcessors", 22 [2] = "HvPartitions", 23 [3] = "HvTotalPages", 24 [4] = "HvVirtualProcessors", 25 [5] = "HvMonitoredNotifications", 26 [6] = "HvModernStandbyEntries", 27 [7] = "HvPlatformIdleTransitions", 28 [8] = "HvHypervisorStartupCost", 29 30 [10] = "HvIOSpacePages", 31 [11] = "HvNonEssentialPagesForDump", 32 [12] = "HvSubsumedPages", 33 }; 34 35 /* HV_CPU_COUNTER */ 36 static char *hv_lp_counters[] = { 37 [1] = "LpGlobalTime", 38 [2] = "LpTotalRunTime", 39 [3] = "LpHypervisorRunTime", 40 [4] = "LpHardwareInterrupts", 41 [5] = "LpContextSwitches", 42 [6] = "LpInterProcessorInterrupts", 43 [7] = "LpSchedulerInterrupts", 44 [8] = "LpTimerInterrupts", 45 [9] = "LpInterProcessorInterruptsSent", 46 [10] = "LpProcessorHalts", 47 [11] = "LpMonitorTransitionCost", 48 [12] = "LpContextSwitchTime", 49 [13] = "LpC1TransitionsCount", 50 [14] = "LpC1RunTime", 51 [15] = "LpC2TransitionsCount", 52 [16] = "LpC2RunTime", 53 [17] = "LpC3TransitionsCount", 54 [18] = "LpC3RunTime", 55 [19] = "LpRootVpIndex", 56 [20] = "LpIdleSequenceNumber", 57 [21] = "LpGlobalTscCount", 58 [22] = "LpActiveTscCount", 59 [23] = "LpIdleAccumulation", 60 [24] = "LpReferenceCycleCount0", 61 [25] = "LpActualCycleCount0", 62 [26] = "LpReferenceCycleCount1", 63 [27] = "LpActualCycleCount1", 64 [28] = "LpProximityDomainId", 65 [29] = "LpPostedInterruptNotifications", 66 [30] = "LpBranchPredictorFlushes", 67 #if IS_ENABLED(CONFIG_X86_64) 68 [31] = "LpL1DataCacheFlushes", 69 [32] = "LpImmediateL1DataCacheFlushes", 70 [33] = "LpMbFlushes", 71 [34] = "LpCounterRefreshSequenceNumber", 72 [35] = "LpCounterRefreshReferenceTime", 73 [36] = "LpIdleAccumulationSnapshot", 74 [37] = "LpActiveTscCountSnapshot", 75 [38] = "LpHwpRequestContextSwitches", 76 [39] = "LpPlaceholder1", 77 [40] = "LpPlaceholder2", 78 [41] = "LpPlaceholder3", 79 [42] = "LpPlaceholder4", 80 [43] = "LpPlaceholder5", 81 [44] = "LpPlaceholder6", 82 [45] = "LpPlaceholder7", 83 [46] = "LpPlaceholder8", 84 [47] = "LpPlaceholder9", 85 [48] = "LpSchLocalRunListSize", 86 [49] = "LpReserveGroupId", 87 [50] = "LpRunningPriority", 88 [51] = "LpPerfmonInterruptCount", 89 #elif IS_ENABLED(CONFIG_ARM64) 90 [31] = "LpCounterRefreshSequenceNumber", 91 [32] = "LpCounterRefreshReferenceTime", 92 [33] = "LpIdleAccumulationSnapshot", 93 [34] = "LpActiveTscCountSnapshot", 94 [35] = "LpHwpRequestContextSwitches", 95 [36] = "LpPlaceholder2", 96 [37] = "LpPlaceholder3", 97 [38] = "LpPlaceholder4", 98 [39] = "LpPlaceholder5", 99 [40] = "LpPlaceholder6", 100 [41] = "LpPlaceholder7", 101 [42] = "LpPlaceholder8", 102 [43] = "LpPlaceholder9", 103 [44] = "LpSchLocalRunListSize", 104 [45] = "LpReserveGroupId", 105 [46] = "LpRunningPriority", 106 #endif 107 }; 108 109 /* HV_PROCESS_COUNTER */ 110 static char *hv_partition_counters[] = { 111 [1] = "PtVirtualProcessors", 112 113 [3] = "PtTlbSize", 114 [4] = "PtAddressSpaces", 115 [5] = "PtDepositedPages", 116 [6] = "PtGpaPages", 117 [7] = "PtGpaSpaceModifications", 118 [8] = "PtVirtualTlbFlushEntires", 119 [9] = "PtRecommendedTlbSize", 120 [10] = "PtGpaPages4K", 121 [11] = "PtGpaPages2M", 122 [12] = "PtGpaPages1G", 123 [13] = "PtGpaPages512G", 124 [14] = "PtDevicePages4K", 125 [15] = "PtDevicePages2M", 126 [16] = "PtDevicePages1G", 127 [17] = "PtDevicePages512G", 128 [18] = "PtAttachedDevices", 129 [19] = "PtDeviceInterruptMappings", 130 [20] = "PtIoTlbFlushes", 131 [21] = "PtIoTlbFlushCost", 132 [22] = "PtDeviceInterruptErrors", 133 [23] = "PtDeviceDmaErrors", 134 [24] = "PtDeviceInterruptThrottleEvents", 135 [25] = "PtSkippedTimerTicks", 136 [26] = "PtPartitionId", 137 #if IS_ENABLED(CONFIG_X86_64) 138 [27] = "PtNestedTlbSize", 139 [28] = "PtRecommendedNestedTlbSize", 140 [29] = "PtNestedTlbFreeListSize", 141 [30] = "PtNestedTlbTrimmedPages", 142 [31] = "PtPagesShattered", 143 [32] = "PtPagesRecombined", 144 [33] = "PtHwpRequestValue", 145 [34] = "PtAutoSuspendEnableTime", 146 [35] = "PtAutoSuspendTriggerTime", 147 [36] = "PtAutoSuspendDisableTime", 148 [37] = "PtPlaceholder1", 149 [38] = "PtPlaceholder2", 150 [39] = "PtPlaceholder3", 151 [40] = "PtPlaceholder4", 152 [41] = "PtPlaceholder5", 153 [42] = "PtPlaceholder6", 154 [43] = "PtPlaceholder7", 155 [44] = "PtPlaceholder8", 156 [45] = "PtHypervisorStateTransferGeneration", 157 [46] = "PtNumberofActiveChildPartitions", 158 #elif IS_ENABLED(CONFIG_ARM64) 159 [27] = "PtHwpRequestValue", 160 [28] = "PtAutoSuspendEnableTime", 161 [29] = "PtAutoSuspendTriggerTime", 162 [30] = "PtAutoSuspendDisableTime", 163 [31] = "PtPlaceholder1", 164 [32] = "PtPlaceholder2", 165 [33] = "PtPlaceholder3", 166 [34] = "PtPlaceholder4", 167 [35] = "PtPlaceholder5", 168 [36] = "PtPlaceholder6", 169 [37] = "PtPlaceholder7", 170 [38] = "PtPlaceholder8", 171 [39] = "PtHypervisorStateTransferGeneration", 172 [40] = "PtNumberofActiveChildPartitions", 173 #endif 174 }; 175 176 /* HV_THREAD_COUNTER */ 177 static char *hv_vp_counters[] = { 178 [1] = "VpTotalRunTime", 179 [2] = "VpHypervisorRunTime", 180 [3] = "VpRemoteNodeRunTime", 181 [4] = "VpNormalizedRunTime", 182 [5] = "VpIdealCpu", 183 184 [7] = "VpHypercallsCount", 185 [8] = "VpHypercallsTime", 186 #if IS_ENABLED(CONFIG_X86_64) 187 [9] = "VpPageInvalidationsCount", 188 [10] = "VpPageInvalidationsTime", 189 [11] = "VpControlRegisterAccessesCount", 190 [12] = "VpControlRegisterAccessesTime", 191 [13] = "VpIoInstructionsCount", 192 [14] = "VpIoInstructionsTime", 193 [15] = "VpHltInstructionsCount", 194 [16] = "VpHltInstructionsTime", 195 [17] = "VpMwaitInstructionsCount", 196 [18] = "VpMwaitInstructionsTime", 197 [19] = "VpCpuidInstructionsCount", 198 [20] = "VpCpuidInstructionsTime", 199 [21] = "VpMsrAccessesCount", 200 [22] = "VpMsrAccessesTime", 201 [23] = "VpOtherInterceptsCount", 202 [24] = "VpOtherInterceptsTime", 203 [25] = "VpExternalInterruptsCount", 204 [26] = "VpExternalInterruptsTime", 205 [27] = "VpPendingInterruptsCount", 206 [28] = "VpPendingInterruptsTime", 207 [29] = "VpEmulatedInstructionsCount", 208 [30] = "VpEmulatedInstructionsTime", 209 [31] = "VpDebugRegisterAccessesCount", 210 [32] = "VpDebugRegisterAccessesTime", 211 [33] = "VpPageFaultInterceptsCount", 212 [34] = "VpPageFaultInterceptsTime", 213 [35] = "VpGuestPageTableMaps", 214 [36] = "VpLargePageTlbFills", 215 [37] = "VpSmallPageTlbFills", 216 [38] = "VpReflectedGuestPageFaults", 217 [39] = "VpApicMmioAccesses", 218 [40] = "VpIoInterceptMessages", 219 [41] = "VpMemoryInterceptMessages", 220 [42] = "VpApicEoiAccesses", 221 [43] = "VpOtherMessages", 222 [44] = "VpPageTableAllocations", 223 [45] = "VpLogicalProcessorMigrations", 224 [46] = "VpAddressSpaceEvictions", 225 [47] = "VpAddressSpaceSwitches", 226 [48] = "VpAddressDomainFlushes", 227 [49] = "VpAddressSpaceFlushes", 228 [50] = "VpGlobalGvaRangeFlushes", 229 [51] = "VpLocalGvaRangeFlushes", 230 [52] = "VpPageTableEvictions", 231 [53] = "VpPageTableReclamations", 232 [54] = "VpPageTableResets", 233 [55] = "VpPageTableValidations", 234 [56] = "VpApicTprAccesses", 235 [57] = "VpPageTableWriteIntercepts", 236 [58] = "VpSyntheticInterrupts", 237 [59] = "VpVirtualInterrupts", 238 [60] = "VpApicIpisSent", 239 [61] = "VpApicSelfIpisSent", 240 [62] = "VpGpaSpaceHypercalls", 241 [63] = "VpLogicalProcessorHypercalls", 242 [64] = "VpLongSpinWaitHypercalls", 243 [65] = "VpOtherHypercalls", 244 [66] = "VpSyntheticInterruptHypercalls", 245 [67] = "VpVirtualInterruptHypercalls", 246 [68] = "VpVirtualMmuHypercalls", 247 [69] = "VpVirtualProcessorHypercalls", 248 [70] = "VpHardwareInterrupts", 249 [71] = "VpNestedPageFaultInterceptsCount", 250 [72] = "VpNestedPageFaultInterceptsTime", 251 [73] = "VpPageScans", 252 [74] = "VpLogicalProcessorDispatches", 253 [75] = "VpWaitingForCpuTime", 254 [76] = "VpExtendedHypercalls", 255 [77] = "VpExtendedHypercallInterceptMessages", 256 [78] = "VpMbecNestedPageTableSwitches", 257 [79] = "VpOtherReflectedGuestExceptions", 258 [80] = "VpGlobalIoTlbFlushes", 259 [81] = "VpGlobalIoTlbFlushCost", 260 [82] = "VpLocalIoTlbFlushes", 261 [83] = "VpLocalIoTlbFlushCost", 262 [84] = "VpHypercallsForwardedCount", 263 [85] = "VpHypercallsForwardingTime", 264 [86] = "VpPageInvalidationsForwardedCount", 265 [87] = "VpPageInvalidationsForwardingTime", 266 [88] = "VpControlRegisterAccessesForwardedCount", 267 [89] = "VpControlRegisterAccessesForwardingTime", 268 [90] = "VpIoInstructionsForwardedCount", 269 [91] = "VpIoInstructionsForwardingTime", 270 [92] = "VpHltInstructionsForwardedCount", 271 [93] = "VpHltInstructionsForwardingTime", 272 [94] = "VpMwaitInstructionsForwardedCount", 273 [95] = "VpMwaitInstructionsForwardingTime", 274 [96] = "VpCpuidInstructionsForwardedCount", 275 [97] = "VpCpuidInstructionsForwardingTime", 276 [98] = "VpMsrAccessesForwardedCount", 277 [99] = "VpMsrAccessesForwardingTime", 278 [100] = "VpOtherInterceptsForwardedCount", 279 [101] = "VpOtherInterceptsForwardingTime", 280 [102] = "VpExternalInterruptsForwardedCount", 281 [103] = "VpExternalInterruptsForwardingTime", 282 [104] = "VpPendingInterruptsForwardedCount", 283 [105] = "VpPendingInterruptsForwardingTime", 284 [106] = "VpEmulatedInstructionsForwardedCount", 285 [107] = "VpEmulatedInstructionsForwardingTime", 286 [108] = "VpDebugRegisterAccessesForwardedCount", 287 [109] = "VpDebugRegisterAccessesForwardingTime", 288 [110] = "VpPageFaultInterceptsForwardedCount", 289 [111] = "VpPageFaultInterceptsForwardingTime", 290 [112] = "VpVmclearEmulationCount", 291 [113] = "VpVmclearEmulationTime", 292 [114] = "VpVmptrldEmulationCount", 293 [115] = "VpVmptrldEmulationTime", 294 [116] = "VpVmptrstEmulationCount", 295 [117] = "VpVmptrstEmulationTime", 296 [118] = "VpVmreadEmulationCount", 297 [119] = "VpVmreadEmulationTime", 298 [120] = "VpVmwriteEmulationCount", 299 [121] = "VpVmwriteEmulationTime", 300 [122] = "VpVmxoffEmulationCount", 301 [123] = "VpVmxoffEmulationTime", 302 [124] = "VpVmxonEmulationCount", 303 [125] = "VpVmxonEmulationTime", 304 [126] = "VpNestedVMEntriesCount", 305 [127] = "VpNestedVMEntriesTime", 306 [128] = "VpNestedSLATSoftPageFaultsCount", 307 [129] = "VpNestedSLATSoftPageFaultsTime", 308 [130] = "VpNestedSLATHardPageFaultsCount", 309 [131] = "VpNestedSLATHardPageFaultsTime", 310 [132] = "VpInvEptAllContextEmulationCount", 311 [133] = "VpInvEptAllContextEmulationTime", 312 [134] = "VpInvEptSingleContextEmulationCount", 313 [135] = "VpInvEptSingleContextEmulationTime", 314 [136] = "VpInvVpidAllContextEmulationCount", 315 [137] = "VpInvVpidAllContextEmulationTime", 316 [138] = "VpInvVpidSingleContextEmulationCount", 317 [139] = "VpInvVpidSingleContextEmulationTime", 318 [140] = "VpInvVpidSingleAddressEmulationCount", 319 [141] = "VpInvVpidSingleAddressEmulationTime", 320 [142] = "VpNestedTlbPageTableReclamations", 321 [143] = "VpNestedTlbPageTableEvictions", 322 [144] = "VpFlushGuestPhysicalAddressSpaceHypercalls", 323 [145] = "VpFlushGuestPhysicalAddressListHypercalls", 324 [146] = "VpPostedInterruptNotifications", 325 [147] = "VpPostedInterruptScans", 326 [148] = "VpTotalCoreRunTime", 327 [149] = "VpMaximumRunTime", 328 [150] = "VpHwpRequestContextSwitches", 329 [151] = "VpWaitingForCpuTimeBucket0", 330 [152] = "VpWaitingForCpuTimeBucket1", 331 [153] = "VpWaitingForCpuTimeBucket2", 332 [154] = "VpWaitingForCpuTimeBucket3", 333 [155] = "VpWaitingForCpuTimeBucket4", 334 [156] = "VpWaitingForCpuTimeBucket5", 335 [157] = "VpWaitingForCpuTimeBucket6", 336 [158] = "VpVmloadEmulationCount", 337 [159] = "VpVmloadEmulationTime", 338 [160] = "VpVmsaveEmulationCount", 339 [161] = "VpVmsaveEmulationTime", 340 [162] = "VpGifInstructionEmulationCount", 341 [163] = "VpGifInstructionEmulationTime", 342 [164] = "VpEmulatedErrataSvmInstructions", 343 [165] = "VpPlaceholder1", 344 [166] = "VpPlaceholder2", 345 [167] = "VpPlaceholder3", 346 [168] = "VpPlaceholder4", 347 [169] = "VpPlaceholder5", 348 [170] = "VpPlaceholder6", 349 [171] = "VpPlaceholder7", 350 [172] = "VpPlaceholder8", 351 [173] = "VpContentionTime", 352 [174] = "VpWakeUpTime", 353 [175] = "VpSchedulingPriority", 354 [176] = "VpRdpmcInstructionsCount", 355 [177] = "VpRdpmcInstructionsTime", 356 [178] = "VpPerfmonPmuMsrAccessesCount", 357 [179] = "VpPerfmonLbrMsrAccessesCount", 358 [180] = "VpPerfmonIptMsrAccessesCount", 359 [181] = "VpPerfmonInterruptCount", 360 [182] = "VpVtl1DispatchCount", 361 [183] = "VpVtl2DispatchCount", 362 [184] = "VpVtl2DispatchBucket0", 363 [185] = "VpVtl2DispatchBucket1", 364 [186] = "VpVtl2DispatchBucket2", 365 [187] = "VpVtl2DispatchBucket3", 366 [188] = "VpVtl2DispatchBucket4", 367 [189] = "VpVtl2DispatchBucket5", 368 [190] = "VpVtl2DispatchBucket6", 369 [191] = "VpVtl1RunTime", 370 [192] = "VpVtl2RunTime", 371 [193] = "VpIommuHypercalls", 372 [194] = "VpCpuGroupHypercalls", 373 [195] = "VpVsmHypercalls", 374 [196] = "VpEventLogHypercalls", 375 [197] = "VpDeviceDomainHypercalls", 376 [198] = "VpDepositHypercalls", 377 [199] = "VpSvmHypercalls", 378 [200] = "VpBusLockAcquisitionCount", 379 [201] = "VpLoadAvg", 380 [202] = "VpRootDispatchThreadBlocked", 381 [203] = "VpIdleCpuTime", 382 [204] = "VpWaitingForCpuTimeBucket7", 383 [205] = "VpWaitingForCpuTimeBucket8", 384 [206] = "VpWaitingForCpuTimeBucket9", 385 [207] = "VpWaitingForCpuTimeBucket10", 386 [208] = "VpWaitingForCpuTimeBucket11", 387 [209] = "VpWaitingForCpuTimeBucket12", 388 [210] = "VpHierarchicalSuspendTime", 389 [211] = "VpExpressSchedulingAttempts", 390 [212] = "VpExpressSchedulingCount", 391 #elif IS_ENABLED(CONFIG_ARM64) 392 [9] = "VpSysRegAccessesCount", 393 [10] = "VpSysRegAccessesTime", 394 [11] = "VpSmcInstructionsCount", 395 [12] = "VpSmcInstructionsTime", 396 [13] = "VpOtherInterceptsCount", 397 [14] = "VpOtherInterceptsTime", 398 [15] = "VpExternalInterruptsCount", 399 [16] = "VpExternalInterruptsTime", 400 [17] = "VpPendingInterruptsCount", 401 [18] = "VpPendingInterruptsTime", 402 [19] = "VpGuestPageTableMaps", 403 [20] = "VpLargePageTlbFills", 404 [21] = "VpSmallPageTlbFills", 405 [22] = "VpReflectedGuestPageFaults", 406 [23] = "VpMemoryInterceptMessages", 407 [24] = "VpOtherMessages", 408 [25] = "VpLogicalProcessorMigrations", 409 [26] = "VpAddressDomainFlushes", 410 [27] = "VpAddressSpaceFlushes", 411 [28] = "VpSyntheticInterrupts", 412 [29] = "VpVirtualInterrupts", 413 [30] = "VpApicSelfIpisSent", 414 [31] = "VpGpaSpaceHypercalls", 415 [32] = "VpLogicalProcessorHypercalls", 416 [33] = "VpLongSpinWaitHypercalls", 417 [34] = "VpOtherHypercalls", 418 [35] = "VpSyntheticInterruptHypercalls", 419 [36] = "VpVirtualInterruptHypercalls", 420 [37] = "VpVirtualMmuHypercalls", 421 [38] = "VpVirtualProcessorHypercalls", 422 [39] = "VpHardwareInterrupts", 423 [40] = "VpNestedPageFaultInterceptsCount", 424 [41] = "VpNestedPageFaultInterceptsTime", 425 [42] = "VpLogicalProcessorDispatches", 426 [43] = "VpWaitingForCpuTime", 427 [44] = "VpExtendedHypercalls", 428 [45] = "VpExtendedHypercallInterceptMessages", 429 [46] = "VpMbecNestedPageTableSwitches", 430 [47] = "VpOtherReflectedGuestExceptions", 431 [48] = "VpGlobalIoTlbFlushes", 432 [49] = "VpGlobalIoTlbFlushCost", 433 [50] = "VpLocalIoTlbFlushes", 434 [51] = "VpLocalIoTlbFlushCost", 435 [52] = "VpFlushGuestPhysicalAddressSpaceHypercalls", 436 [53] = "VpFlushGuestPhysicalAddressListHypercalls", 437 [54] = "VpPostedInterruptNotifications", 438 [55] = "VpPostedInterruptScans", 439 [56] = "VpTotalCoreRunTime", 440 [57] = "VpMaximumRunTime", 441 [58] = "VpWaitingForCpuTimeBucket0", 442 [59] = "VpWaitingForCpuTimeBucket1", 443 [60] = "VpWaitingForCpuTimeBucket2", 444 [61] = "VpWaitingForCpuTimeBucket3", 445 [62] = "VpWaitingForCpuTimeBucket4", 446 [63] = "VpWaitingForCpuTimeBucket5", 447 [64] = "VpWaitingForCpuTimeBucket6", 448 [65] = "VpHwpRequestContextSwitches", 449 [66] = "VpPlaceholder2", 450 [67] = "VpPlaceholder3", 451 [68] = "VpPlaceholder4", 452 [69] = "VpPlaceholder5", 453 [70] = "VpPlaceholder6", 454 [71] = "VpPlaceholder7", 455 [72] = "VpPlaceholder8", 456 [73] = "VpContentionTime", 457 [74] = "VpWakeUpTime", 458 [75] = "VpSchedulingPriority", 459 [76] = "VpVtl1DispatchCount", 460 [77] = "VpVtl2DispatchCount", 461 [78] = "VpVtl2DispatchBucket0", 462 [79] = "VpVtl2DispatchBucket1", 463 [80] = "VpVtl2DispatchBucket2", 464 [81] = "VpVtl2DispatchBucket3", 465 [82] = "VpVtl2DispatchBucket4", 466 [83] = "VpVtl2DispatchBucket5", 467 [84] = "VpVtl2DispatchBucket6", 468 [85] = "VpVtl1RunTime", 469 [86] = "VpVtl2RunTime", 470 [87] = "VpIommuHypercalls", 471 [88] = "VpCpuGroupHypercalls", 472 [89] = "VpVsmHypercalls", 473 [90] = "VpEventLogHypercalls", 474 [91] = "VpDeviceDomainHypercalls", 475 [92] = "VpDepositHypercalls", 476 [93] = "VpSvmHypercalls", 477 [94] = "VpLoadAvg", 478 [95] = "VpRootDispatchThreadBlocked", 479 [96] = "VpIdleCpuTime", 480 [97] = "VpWaitingForCpuTimeBucket7", 481 [98] = "VpWaitingForCpuTimeBucket8", 482 [99] = "VpWaitingForCpuTimeBucket9", 483 [100] = "VpWaitingForCpuTimeBucket10", 484 [101] = "VpWaitingForCpuTimeBucket11", 485 [102] = "VpWaitingForCpuTimeBucket12", 486 [103] = "VpHierarchicalSuspendTime", 487 [104] = "VpExpressSchedulingAttempts", 488 [105] = "VpExpressSchedulingCount", 489 #endif 490 }; 491