mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
KVM: selftests: Extract guts of THP accessor to standalone sysfs helpers
Extract the guts of thp_configured() and get_trans_hugepagesz() to standalone helpers so that the core logic can be reused for other sysfs files, e.g. to query numa_balancing. Opportunistically assert that the initial fscanf() read at least one byte, and add a comment explaining the second call to fscanf(). Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Signed-off-by: James Houghton <jthoughton@google.com> Link: https://lore.kernel.org/r/20250508184649.2576210-2-jthoughton@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
5e9ac644c4
commit
d761c14d90
|
|
@ -132,35 +132,48 @@ void print_skip(const char *fmt, ...)
|
|||
puts(", skipping test");
|
||||
}
|
||||
|
||||
bool thp_configured(void)
|
||||
static bool test_sysfs_path(const char *path)
|
||||
{
|
||||
int ret;
|
||||
struct stat statbuf;
|
||||
int ret;
|
||||
|
||||
ret = stat("/sys/kernel/mm/transparent_hugepage", &statbuf);
|
||||
ret = stat(path, &statbuf);
|
||||
TEST_ASSERT(ret == 0 || (ret == -1 && errno == ENOENT),
|
||||
"Error in stating /sys/kernel/mm/transparent_hugepage");
|
||||
"Error in stat()ing '%s'", path);
|
||||
|
||||
return ret == 0;
|
||||
}
|
||||
|
||||
size_t get_trans_hugepagesz(void)
|
||||
bool thp_configured(void)
|
||||
{
|
||||
return test_sysfs_path("/sys/kernel/mm/transparent_hugepage");
|
||||
}
|
||||
|
||||
static size_t get_sysfs_val(const char *path)
|
||||
{
|
||||
size_t size;
|
||||
FILE *f;
|
||||
int ret;
|
||||
|
||||
f = fopen(path, "r");
|
||||
TEST_ASSERT(f, "Error opening '%s'", path);
|
||||
|
||||
ret = fscanf(f, "%ld", &size);
|
||||
TEST_ASSERT(ret > 0, "Error reading '%s'", path);
|
||||
|
||||
/* Re-scan the input stream to verify the entire file was read. */
|
||||
ret = fscanf(f, "%ld", &size);
|
||||
TEST_ASSERT(ret < 1, "Error reading '%s'", path);
|
||||
|
||||
fclose(f);
|
||||
return size;
|
||||
}
|
||||
|
||||
size_t get_trans_hugepagesz(void)
|
||||
{
|
||||
TEST_ASSERT(thp_configured(), "THP is not configured in host kernel");
|
||||
|
||||
f = fopen("/sys/kernel/mm/transparent_hugepage/hpage_pmd_size", "r");
|
||||
TEST_ASSERT(f != NULL, "Error in opening transparent_hugepage/hpage_pmd_size");
|
||||
|
||||
ret = fscanf(f, "%ld", &size);
|
||||
ret = fscanf(f, "%ld", &size);
|
||||
TEST_ASSERT(ret < 1, "Error reading transparent_hugepage/hpage_pmd_size");
|
||||
fclose(f);
|
||||
|
||||
return size;
|
||||
return get_sysfs_val("/sys/kernel/mm/transparent_hugepage/hpage_pmd_size");
|
||||
}
|
||||
|
||||
size_t get_def_hugetlb_pagesz(void)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user