drivers/hv/Makefile | 1 + drivers/hv/mshv_debugfs.c | 726 +++++++++++++++++++++++++++++ drivers/hv/mshv_debugfs_counters.c | 490 +++++++++++++++++++ drivers/hv/mshv_root.h | 49 +- drivers/hv/mshv_root_hv_call.c | 64 ++- drivers/hv/mshv_root_main.c | 140 +++--- include/hyperv/hvhdk.h | 7 + 7 files changed, 1412 insertions(+), 65 deletions(-) create mode 100644 drivers/hv/mshv_debugfs.c create mode 100644 drivers/hv/mshv_debugfs_counters.c
Expose hypervisor, logical processor, partition, and virtual processor
statistics via debugfs. These are provided by mapping 'stats' pages via
hypercall.
Patch #1: Update hv_call_map_stats_page() to return success when
HV_STATS_AREA_PARENT is unavailable, which is the case on some
hypervisor versions, where it can fall back to HV_STATS_AREA_SELF
Patch #2: Use struct hv_stats_page pointers instead of void *
Patch #3: Make mshv_vp_stats_map/unmap() more flexible to use with debugfs
code
Patch #4: Always map vp stats page regardless of scheduler, to reuse in
debugfs
Patch #5: Change to hv_stats_page definition and
VpRootDispatchThreadBlocked
Patch #6: Introduce the definitions needed for the various stats pages
Patch #7: Add mshv_debugfs.c, and integrate it with the mshv_root driver to
expose the partition and VP stats.
---
Changes in v6:
- Fix whitespace and other checkpatch issues [Michael]
Changes in v5:
- Rename hv_counters.c to mshv_debugfs_counters.c [Michael]
- Clarify unusual inclusion of mshv_debugfs_counters.c with comment. After
discussion it is still included directly to keep things simple. Including
arrays with unspecified size via a header means sizeof() cannot be used on
the array.
- Error if mshv_debugfs_counters.c is included elsewhere than mshv_debugfs.c
- Use array index as stats page index to save space [Stanislav]
- Enforce HV_STATS_AREA_PARENT and SELF fit in NUM_STATS_AREAS with
static_assert and clarify with comment [Michael]
- Return to using lp count from hv stats page for mshv_lps_count [Michael]
- Use nr_cpu_ids instead of num_possible_cpus() [Michael]
- Set mshv_lps_stats[idx] and the array itself to NULL on unmap and cleanup
[Michael]
- Rename HvLogicalProcessors and VpRootDispatchThreadBlocked to Linux style
- Translate Linux cpu index to vp index via hv_vp_index on partition destroy
[Michael]
- Minor formatting cleanups [Michael]
Changes in v4:
- Put the counters definitions in static arrays in hv_counters.c, instead of
as enums in hvhdk.h [Michael]
- Due to the above, add an additional patch (#5) to simplify hv_stats_page,
and retain the enum definition at the top of mshv_root_main.c for use with
VpRootDispatchThreadBlocked. That is the only remaining use of the counter
enum.
- Due to the above, use num_present_cpus() as the number of LPs to map stats
pages for - this number shouldn't change at runtime because the hypervisor
doesn't support hotplug for root partition.
Changes in v3:
- Add 3 small refactor/cleanup patches (patches 2,3,4) from Stanislav. These
simplify some of the debugfs code, and fix issues with mapping VP stats on
L1VH.
- Fix cleanup of parent stats dentries on module removal (via squashing some
internal patches into patch #6) [Praveen]
- Remove unused goto label [Stanislav, kernel bot]
- Use struct hv_stats_page * instead of void * in mshv_debugfs.c [Stanislav]
- Remove some redundant variables [Stanislav]
- Rename debugfs dentry fields for brevity [Stanislav]
- Use ERR_CAST() for the dentry error pointer returned from
lp_debugfs_stats_create() [Stanislav]
- Fix leak of pages allocated for lp stats mappings by storing them in an array
[Michael]
- Add comments to clarify PARENT vs SELF usage and edge cases [Michael]
- Add VpLoadAvg for x86 and print the stat [Michael]
- Add NUM_STATS_AREAS for array sizing in mshv_debugfs.c [Michael]
Changes in v2:
- Remove unnecessary pr_debug_once() in patch 1 [Stanislav Kinsburskii]
- CONFIG_X86 -> CONFIG_X86_64 in patch 2 [Stanislav Kinsburskii]
---
Nuno Das Neves (3):
mshv: Update hv_stats_page definitions
mshv: Add data for printing stats page counters
mshv: Add debugfs to view hypervisor statistics
Purna Pavan Chandra Aekkaladevi (1):
mshv: Ignore second stats page map result failure
Stanislav Kinsburskii (3):
mshv: Use typed hv_stats_page pointers
mshv: Improve mshv_vp_stats_map/unmap(), add them to mshv_root.h
mshv: Always map child vp stats pages regardless of scheduler type
drivers/hv/Makefile | 1 +
drivers/hv/mshv_debugfs.c | 726 +++++++++++++++++++++++++++++
drivers/hv/mshv_debugfs_counters.c | 490 +++++++++++++++++++
drivers/hv/mshv_root.h | 49 +-
drivers/hv/mshv_root_hv_call.c | 64 ++-
drivers/hv/mshv_root_main.c | 140 +++---
include/hyperv/hvhdk.h | 7 +
7 files changed, 1412 insertions(+), 65 deletions(-)
create mode 100644 drivers/hv/mshv_debugfs.c
create mode 100644 drivers/hv/mshv_debugfs_counters.c
--
2.34.1
On Wed, Jan 28, 2026 at 10:11:39AM -0800, Nuno Das Neves wrote: > Expose hypervisor, logical processor, partition, and virtual processor > statistics via debugfs. These are provided by mapping 'stats' pages via > hypercall. > > Patch #1: Update hv_call_map_stats_page() to return success when > HV_STATS_AREA_PARENT is unavailable, which is the case on some > hypervisor versions, where it can fall back to HV_STATS_AREA_SELF > Patch #2: Use struct hv_stats_page pointers instead of void * > Patch #3: Make mshv_vp_stats_map/unmap() more flexible to use with debugfs > code > Patch #4: Always map vp stats page regardless of scheduler, to reuse in > debugfs > Patch #5: Change to hv_stats_page definition and > VpRootDispatchThreadBlocked > Patch #6: Introduce the definitions needed for the various stats pages > Patch #7: Add mshv_debugfs.c, and integrate it with the mshv_root driver to > expose the partition and VP stats. > [...] > > drivers/hv/Makefile | 1 + > drivers/hv/mshv_debugfs.c | 726 +++++++++++++++++++++++++++++ > drivers/hv/mshv_debugfs_counters.c | 490 +++++++++++++++++++ > drivers/hv/mshv_root.h | 49 +- > drivers/hv/mshv_root_hv_call.c | 64 ++- > drivers/hv/mshv_root_main.c | 140 +++--- > include/hyperv/hvhdk.h | 7 + > 7 files changed, 1412 insertions(+), 65 deletions(-) > create mode 100644 drivers/hv/mshv_debugfs.c > create mode 100644 drivers/hv/mshv_debugfs_counters.c > Applied to hyperv-next. Thank you!
On Wed, Jan 28, 2026 at 10:11:39AM -0800, Nuno Das Neves wrote: > Expose hypervisor, logical processor, partition, and virtual processor > statistics via debugfs. These are provided by mapping 'stats' pages via > hypercall. > For the whole series: Acked-by: Stanislav Kinsburskii <skinsburskii@linux.microsoft.com> > Patch #1: Update hv_call_map_stats_page() to return success when > HV_STATS_AREA_PARENT is unavailable, which is the case on some > hypervisor versions, where it can fall back to HV_STATS_AREA_SELF > Patch #2: Use struct hv_stats_page pointers instead of void * > Patch #3: Make mshv_vp_stats_map/unmap() more flexible to use with debugfs > code > Patch #4: Always map vp stats page regardless of scheduler, to reuse in > debugfs > Patch #5: Change to hv_stats_page definition and > VpRootDispatchThreadBlocked > Patch #6: Introduce the definitions needed for the various stats pages > Patch #7: Add mshv_debugfs.c, and integrate it with the mshv_root driver to > expose the partition and VP stats. > > --- > Changes in v6: > - Fix whitespace and other checkpatch issues [Michael] > > Changes in v5: > - Rename hv_counters.c to mshv_debugfs_counters.c [Michael] > - Clarify unusual inclusion of mshv_debugfs_counters.c with comment. After > discussion it is still included directly to keep things simple. Including > arrays with unspecified size via a header means sizeof() cannot be used on > the array. > - Error if mshv_debugfs_counters.c is included elsewhere than mshv_debugfs.c > - Use array index as stats page index to save space [Stanislav] > - Enforce HV_STATS_AREA_PARENT and SELF fit in NUM_STATS_AREAS with > static_assert and clarify with comment [Michael] > - Return to using lp count from hv stats page for mshv_lps_count [Michael] > - Use nr_cpu_ids instead of num_possible_cpus() [Michael] > - Set mshv_lps_stats[idx] and the array itself to NULL on unmap and cleanup > [Michael] > - Rename HvLogicalProcessors and VpRootDispatchThreadBlocked to Linux style > - Translate Linux cpu index to vp index via hv_vp_index on partition destroy > [Michael] > - Minor formatting cleanups [Michael] > > Changes in v4: > - Put the counters definitions in static arrays in hv_counters.c, instead of > as enums in hvhdk.h [Michael] > - Due to the above, add an additional patch (#5) to simplify hv_stats_page, > and retain the enum definition at the top of mshv_root_main.c for use with > VpRootDispatchThreadBlocked. That is the only remaining use of the counter > enum. > - Due to the above, use num_present_cpus() as the number of LPs to map stats > pages for - this number shouldn't change at runtime because the hypervisor > doesn't support hotplug for root partition. > > Changes in v3: > - Add 3 small refactor/cleanup patches (patches 2,3,4) from Stanislav. These > simplify some of the debugfs code, and fix issues with mapping VP stats on > L1VH. > - Fix cleanup of parent stats dentries on module removal (via squashing some > internal patches into patch #6) [Praveen] > - Remove unused goto label [Stanislav, kernel bot] > - Use struct hv_stats_page * instead of void * in mshv_debugfs.c [Stanislav] > - Remove some redundant variables [Stanislav] > - Rename debugfs dentry fields for brevity [Stanislav] > - Use ERR_CAST() for the dentry error pointer returned from > lp_debugfs_stats_create() [Stanislav] > - Fix leak of pages allocated for lp stats mappings by storing them in an array > [Michael] > - Add comments to clarify PARENT vs SELF usage and edge cases [Michael] > - Add VpLoadAvg for x86 and print the stat [Michael] > - Add NUM_STATS_AREAS for array sizing in mshv_debugfs.c [Michael] > > Changes in v2: > - Remove unnecessary pr_debug_once() in patch 1 [Stanislav Kinsburskii] > - CONFIG_X86 -> CONFIG_X86_64 in patch 2 [Stanislav Kinsburskii] > > --- > Nuno Das Neves (3): > mshv: Update hv_stats_page definitions > mshv: Add data for printing stats page counters > mshv: Add debugfs to view hypervisor statistics > > Purna Pavan Chandra Aekkaladevi (1): > mshv: Ignore second stats page map result failure > > Stanislav Kinsburskii (3): > mshv: Use typed hv_stats_page pointers > mshv: Improve mshv_vp_stats_map/unmap(), add them to mshv_root.h > mshv: Always map child vp stats pages regardless of scheduler type > > drivers/hv/Makefile | 1 + > drivers/hv/mshv_debugfs.c | 726 +++++++++++++++++++++++++++++ > drivers/hv/mshv_debugfs_counters.c | 490 +++++++++++++++++++ > drivers/hv/mshv_root.h | 49 +- > drivers/hv/mshv_root_hv_call.c | 64 ++- > drivers/hv/mshv_root_main.c | 140 +++--- > include/hyperv/hvhdk.h | 7 + > 7 files changed, 1412 insertions(+), 65 deletions(-) > create mode 100644 drivers/hv/mshv_debugfs.c > create mode 100644 drivers/hv/mshv_debugfs_counters.c > > -- > 2.34.1
© 2016 - 2026 Red Hat, Inc.