"""
Utilities useful to client control files that test KVM.
"""
from autotest_lib.client.bin import utils
from autotest_lib.client.common_lib import error
def get_kvm_arch():
"""
Determines the kvm architecture kernel module that should be loaded.
@return: "kvm_amd", "kvm_intel", or raise TestError exception
"""
arch_type = ""
for line in open("/proc/cpuinfo"):
if arch_type == "":
if "AuthenticAMD" in line:
arch_type = "kvm_amd"
elif "GenuineIntel" in line:
arch_type = "kvm_intel"
elif "flags" in line:
if arch_type == "kvm_amd" and "svm" in line:
return arch_type
if arch_type == "kvm_intel" and "vmx" in line:
return arch_type
raise error.TestError("CPU Must be AMD or Intel, and must be KVM ready.")
def load_kvm():
"""
Loads the appropriate KVM kernel modules
"""
kvm_status = utils.system('modprobe kvm')
kvm_amdintel_status = utils.system("modprobe " + kvm_arch)
if kvm_status:
return kvm_status
else:
return kvm_amdintel_status
def unload_kvm():
"""
Unloads the appropriate KVM kernel modules
"""
kvm_amdintel_status = utils.system("rmmod " + kvm_arch)
kvm_status = utils.system('rmmod kvm')
if kvm_status:
return kvm_status
else:
return kvm_amdintel_status
kvm_arch = get_kvm_arch()