KVM: selftests: Add helpers to read kvm_{intel,amd} boolean module parameters
Add helper functions for reading the value of kvm_intel and kvm_amd boolean module parameters. Use the kvm_intel variant in vm_is_unrestricted_guest() to simplify the check for kvm_intel.unrestricted_guest. No functional change intended. Signed-off-by: David Matlack <dmatlack@google.com> Message-Id: <20220929181207.2281449-3-dmatlack@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
62ece2c5a9
commit
4d2bd14319
|
@ -175,6 +175,10 @@ extern const struct vm_guest_mode_params vm_guest_mode_params[];
|
|||
|
||||
int open_path_or_exit(const char *path, int flags);
|
||||
int open_kvm_dev_path_or_exit(void);
|
||||
|
||||
bool get_kvm_intel_param_bool(const char *param);
|
||||
bool get_kvm_amd_param_bool(const char *param);
|
||||
|
||||
unsigned int kvm_check_cap(long cap);
|
||||
|
||||
static inline bool kvm_has_cap(long cap)
|
||||
|
|
|
@ -50,6 +50,45 @@ int open_kvm_dev_path_or_exit(void)
|
|||
return _open_kvm_dev_path_or_exit(O_RDONLY);
|
||||
}
|
||||
|
||||
static bool get_module_param_bool(const char *module_name, const char *param)
|
||||
{
|
||||
const int path_size = 128;
|
||||
char path[path_size];
|
||||
char value;
|
||||
ssize_t r;
|
||||
int fd;
|
||||
|
||||
r = snprintf(path, path_size, "/sys/module/%s/parameters/%s",
|
||||
module_name, param);
|
||||
TEST_ASSERT(r < path_size,
|
||||
"Failed to construct sysfs path in %d bytes.", path_size);
|
||||
|
||||
fd = open_path_or_exit(path, O_RDONLY);
|
||||
|
||||
r = read(fd, &value, 1);
|
||||
TEST_ASSERT(r == 1, "read(%s) failed", path);
|
||||
|
||||
r = close(fd);
|
||||
TEST_ASSERT(!r, "close(%s) failed", path);
|
||||
|
||||
if (value == 'Y')
|
||||
return true;
|
||||
else if (value == 'N')
|
||||
return false;
|
||||
|
||||
TEST_FAIL("Unrecognized value '%c' for boolean module param", value);
|
||||
}
|
||||
|
||||
bool get_kvm_intel_param_bool(const char *param)
|
||||
{
|
||||
return get_module_param_bool("kvm_intel", param);
|
||||
}
|
||||
|
||||
bool get_kvm_amd_param_bool(const char *param)
|
||||
{
|
||||
return get_module_param_bool("kvm_amd", param);
|
||||
}
|
||||
|
||||
/*
|
||||
* Capability
|
||||
*
|
||||
|
|
|
@ -1294,20 +1294,9 @@ done:
|
|||
/* Returns true if kvm_intel was loaded with unrestricted_guest=1. */
|
||||
bool vm_is_unrestricted_guest(struct kvm_vm *vm)
|
||||
{
|
||||
char val = 'N';
|
||||
size_t count;
|
||||
FILE *f;
|
||||
|
||||
/* Ensure that a KVM vendor-specific module is loaded. */
|
||||
if (vm == NULL)
|
||||
close(open_kvm_dev_path_or_exit());
|
||||
|
||||
f = fopen("/sys/module/kvm_intel/parameters/unrestricted_guest", "r");
|
||||
if (f) {
|
||||
count = fread(&val, sizeof(char), 1, f);
|
||||
TEST_ASSERT(count == 1, "Unable to read from param file.");
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
return val == 'Y';
|
||||
return get_kvm_intel_param_bool("unrestricted_guest");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue