From: Yunping Zheng <[email protected]>
Using this patch you can enable or disable pci msi before test.
if you want to disable pci msi before test,just set:
pci_msi_sensitive = yes
disable_pci_msi = yes
in subtests.cfg.
when disable_pci_msi =yes, will modify the kernel params in grub.conf
and append "pci=nomsi."
when you using, you need sure you python support guestfs.
chang_log:
V2 from V1
using python guestfs lib.
Signed-off-by: Yunping Zheng <[email protected]>
---
virttest/env_process.py | 53 ++++++++++++++++++++---
virttest/utils_disk.py | 109
++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 156 insertions(+), 6 deletions(-)
diff --git a/virttest/env_process.py b/virttest/env_process.py
index 0b3bd4e..1f89b82 100644
--- a/virttest/env_process.py
+++ b/virttest/env_process.py
@@ -3,7 +3,7 @@ from autotest.client import utils
from autotest.client.shared import error
import aexpect, kvm_monitor, ppm_utils, test_setup, virt_vm, kvm_vm
import libvirt_vm, video_maker, utils_misc, storage, kvm_storage
-import remote, ovirt
+import remote, ovirt, utils_disk
try:
import PIL.Image
@@ -17,7 +17,7 @@ _screendump_thread = None
_screendump_thread_termination_event = None
-def preprocess_image(test, params, image_name):
+def preprocess_image(test, params, env, image_name):
"""
Preprocess a single QEMU image according to the instructions in
params.
@@ -44,6 +44,14 @@ def preprocess_image(test, params, image_name):
if not image.create(params):
raise error.TestError("Could not create image")
+ #if you want set "pci=nomsi" before test, set
"disable_pci_msi = yes"
+ #and pci_msi_sensitive = "yes"
+ if params.get("pci_msi_sensitive", "no") == "yes":
+ disable_pci_msi = params.get("disable_pci_msi", "no")
+ enable_disable_pci_msi(test, params, env,
image_filename,
+ disable_pci_msi)
+
+
def preprocess_vm(test, params, env, name):
"""
@@ -111,7 +119,7 @@ def preprocess_vm(test, params, env, name):
vm.params = params
-def postprocess_image(test, params, image_name):
+def postprocess_image(test, params, env, image_name):
"""
Postprocess a single QEMU image according to the instructions in
params.
@@ -225,14 +233,14 @@ def process(test, params, env, image_func,
vm_func, vm_first=False):
if vm is not None and vm.is_alive():
vm.pause()
try:
- image_func(test, image_params, image_name)
+ image_func(test, image_params, env,
image_name)
finally:
if vm is not None and vm.is_alive():
vm.resume()
else:
for image_name in params.objects("images"):
image_params = params.object_params(image_name)
- image_func(test, image_params, image_name)
+ image_func(test, image_params, env, image_name)
if not vm_first:
_call_image_func()
@@ -588,3 +596,38 @@ def _take_screendumps(test, params, env):
_screendump_thread_termination_event = None
break
_screendump_thread_termination_event.wait(delay)
+
+def enable_disable_pci_msi(test, params, env, image_filename,
disable_pci_msi):
+ """
+ Add or delete "pci=nomsi" in the kernel config line, before
guest is start.
+
+ @Parm image_filename: image you want to modify.
+ @Param disable_pci_msi: flag of if disable pci msi.if
disable_pci_msi is
+ True will add pci=nomsi in kernel config
line.
+ """
+
+ grub_file = params.get("grub_file", "/boot/grub/grub.conf")
+ kernel_cfg_pos_reg = params.get("kernel_cfg_pos_reg",
+ "\s*kernel\s*\/vmlinuz-\d+.*")
+ msi_keyword = params.get("msi_keyword", " pci=nomsi")
+
+ f = utils_disk.Guest_Disk(image_filename)
+ kernel_config_ori = f.read_file(grub_file)
+ kernel_config_line = re.findall(kernel_cfg_pos_reg,
kernel_config_ori)[0]
+ kernel_need_modify = False
+
+ if disable_pci_msi == "yes":
+ if not re.findall(msi_keyword, kernel_config_line):
+ kernel_config_set = kernel_config_line + msi_keyword
+ kernel_need_modify = True
+ elif disable_pci_msi == "no":
+ if re.findall(msi_keyword, kernel_config_line):
+ kernel_config_set = re.sub(msi_keyword, "",
kernel_config_line)
+ kernel_need_modify = True
+ if kernel_need_modify:
+ for vm in env.get_all_vms():
+ if vm.is_alive():
+ vm.destroy()
+ time.sleep(1)
+ f.replace_image_file_content(grub_file, kernel_config_line,
+ kernel_config_set)