Add the definitions for hypervisor, logical processor, and partition
stats pages.

Move the definition for the VP stats page to its rightful place in
hvhdk.h, and add the missing members.

These enum members retain their CamelCase style, since they are imported
directly from the hypervisor code They will be stringified when printing
the stats out, and retain more readability in this form.

Signed-off-by: Nuno Das Neves <[email protected]>
---
 drivers/hv/mshv_root_main.c |  17 --
 include/hyperv/hvhdk.h      | 437 ++++++++++++++++++++++++++++++++++++
 2 files changed, 437 insertions(+), 17 deletions(-)

diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
index f59a4ab47685..19006b788e85 100644
--- a/drivers/hv/mshv_root_main.c
+++ b/drivers/hv/mshv_root_main.c
@@ -38,23 +38,6 @@ 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,
-#elif defined(CONFIG_ARM64)
-       VpRootDispatchThreadBlocked                     = 94,
-#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;
 
 enum hv_scheduler_type hv_scheduler_type;
diff --git a/include/hyperv/hvhdk.h b/include/hyperv/hvhdk.h
index 469186df7826..51abbcd0ec37 100644
--- a/include/hyperv/hvhdk.h
+++ b/include/hyperv/hvhdk.h
@@ -10,6 +10,443 @@
 #include "hvhdk_mini.h"
 #include "hvgdk.h"
 
+enum hv_stats_hypervisor_counters {            /* HV_HYPERVISOR_COUNTER */
+       HvLogicalProcessors                     = 1,
+       HvPartitions                            = 2,
+       HvTotalPages                            = 3,
+       HvVirtualProcessors                     = 4,
+       HvMonitoredNotifications                = 5,
+       HvModernStandbyEntries                  = 6,
+       HvPlatformIdleTransitions               = 7,
+       HvHypervisorStartupCost                 = 8,
+       HvIOSpacePages                          = 10,
+       HvNonEssentialPagesForDump              = 11,
+       HvSubsumedPages                         = 12,
+       HvStatsMaxCounter
+};
+
+enum hv_stats_partition_counters {             /* HV_PROCESS_COUNTER */
+       PartitionVirtualProcessors              = 1,
+       PartitionTlbSize                        = 3,
+       PartitionAddressSpaces                  = 4,
+       PartitionDepositedPages                 = 5,
+       PartitionGpaPages                       = 6,
+       PartitionGpaSpaceModifications          = 7,
+       PartitionVirtualTlbFlushEntires         = 8,
+       PartitionRecommendedTlbSize             = 9,
+       PartitionGpaPages4K                     = 10,
+       PartitionGpaPages2M                     = 11,
+       PartitionGpaPages1G                     = 12,
+       PartitionGpaPages512G                   = 13,
+       PartitionDevicePages4K                  = 14,
+       PartitionDevicePages2M                  = 15,
+       PartitionDevicePages1G                  = 16,
+       PartitionDevicePages512G                = 17,
+       PartitionAttachedDevices                = 18,
+       PartitionDeviceInterruptMappings        = 19,
+       PartitionIoTlbFlushes                   = 20,
+       PartitionIoTlbFlushCost                 = 21,
+       PartitionDeviceInterruptErrors          = 22,
+       PartitionDeviceDmaErrors                = 23,
+       PartitionDeviceInterruptThrottleEvents  = 24,
+       PartitionSkippedTimerTicks              = 25,
+       PartitionPartitionId                    = 26,
+#if IS_ENABLED(CONFIG_X86_64)
+       PartitionNestedTlbSize                  = 27,
+       PartitionRecommendedNestedTlbSize       = 28,
+       PartitionNestedTlbFreeListSize          = 29,
+       PartitionNestedTlbTrimmedPages          = 30,
+       PartitionPagesShattered                 = 31,
+       PartitionPagesRecombined                = 32,
+       PartitionHwpRequestValue                = 33,
+#elif IS_ENABLED(CONFIG_ARM64)
+       PartitionHwpRequestValue                = 27,
+#endif
+       PartitionStatsMaxCounter
+};
+
+enum hv_stats_vp_counters {                    /* HV_THREAD_COUNTER */
+       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,
+       VpPlaceholder9                                  = 173,
+       VpPlaceholder10                                 = 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,
+       VpUnused                                        = 201,
+       VpRootDispatchThreadBlocked                     = 202,
+#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,
+#endif
+       VpStatsMaxCounter
+};
+
+enum hv_stats_lp_counters {                    /* HV_CPU_COUNTER */
+       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,
+       LpPlaceholder10                         = 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
+       LpStatsMaxCounter
+};
+
+/*
+ * Hypervisor statsitics page format
+ */
+struct hv_stats_page {
+       union {
+               u64 hv_cntrs[HvStatsMaxCounter];                /* Hypervisor 
counters */
+               u64 pt_cntrs[PartitionStatsMaxCounter];         /* Partition 
counters */
+               u64 vp_cntrs[VpStatsMaxCounter];                /* VP counters 
*/
+               u64 lp_cntrs[LpStatsMaxCounter];                /* LP counters 
*/
+               u8 data[HV_HYP_PAGE_SIZE];
+       };
+} __packed;
+
 /* Bits for dirty mask of hv_vp_register_page */
 #define HV_X64_REGISTER_CLASS_GENERAL  0
 #define HV_X64_REGISTER_CLASS_IP       1
-- 
2.34.1


Reply via email to