On 2021/7/27 16:31, Michal Prívozník wrote: > On 7/22/21 10:05 AM, Yang Fei wrote: >> Add helper function virHostCPUGetHaltPollTime to obtain halt polling >> time. If the kernel support halt polling time statistic, and mount >> debugfs. This function will take effect on KVM VMs. >> >> Signed-off-by: Yang Fei <yangfei85@xxxxxxxxxx> >> --- >> src/libvirt_private.syms | 1 + >> src/util/virhostcpu.c | 39 +++++++++++++++++++++++++++++++++++++++ >> src/util/virhostcpu.h | 4 ++++ >> 3 files changed, 44 insertions(+) >> > >> diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c >> index bf7fda23af..7f577c3e3e 100644 >> --- a/src/util/virhostcpu.c >> +++ b/src/util/virhostcpu.c >> @@ -1535,3 +1535,42 @@ virHostCPUGetSignature(char **signature) >> } >> >> #endif /* __linux__ */ >> + >> +int >> +virHostCPUGetHaltPollTime(pid_t pid, >> + unsigned long long *haltPollSuccess, >> + unsigned long long *haltPollFail) >> +{ >> + g_autofree char *pidToStr = NULL; >> + g_autofree char *debugFsPath = NULL; >> + g_autofree char *kvmPath = NULL; >> + struct dirent *ent = NULL; >> + g_autoptr(DIR) dir = NULL; >> + bool found = false; >> + >> + if (!(debugFsPath = virFileFindMountPoint("debugfs"))) >> + return -1; >> + >> + kvmPath = g_strdup_printf("%s/%s", debugFsPath, "kvm"); >> + if (virDirOpenQuiet(&dir, kvmPath) != 1) >> + return -1; >> + >> + pidToStr = g_strdup_printf("%lld%c", (long long)pid, '-'); > > Just a tiny nit: this could be "%lld-". > Thanks for your review Michal. And do I need to send another version to fix it now? >> + while (virDirRead(dir, &ent, NULL) > 0) { >> + if (STRPREFIX(ent->d_name, pidToStr)) { >> + found = true; >> + break; >> + } >> + } >> + >> + if (!found) >> + return -1; >> + >> + if (virFileReadValueUllongQuiet(haltPollSuccess, "%s/%s/%s", kvmPath, >> + ent->d_name, "halt_poll_success_ns") < 0 || >> + virFileReadValueUllongQuiet(haltPollFail, "%s/%s/%s", kvmPath, >> + ent->d_name, "halt_poll_fail_ns") < 0) >> + return -1; >> + >> + return 0; >> +} > > Michal > > . > Thanks, Fei.