On 08/27/2010 11:17 AM, Lucas Meneghel Rodrigues wrote:
> On Fri, 2010-08-06 at 10:23 +0800, Yiqiao Pu wrote:
>> In the new version of qemu in RHEL 6.0 device_add is instead of pci_add. So
>> modify the scripts to suit for the new version of qemu.
>> There is still one problem here. Block device htoplug only supported in qmp
>> command line, but qmp don't implement pci query in the current version which
>> is needed by the verification of device hotplug. So the block device
>> hotplug will report a failed rignt now.
>>
>> Signed-off-by: Yiqiao Pu<[email protected]>
>> ---
>>   client/tests/kvm/tests/pci_hotplug.py |   64 
>> ++++++++++++++++++++++++---------
>>   1 files changed, 47 insertions(+), 17 deletions(-)
>>
>> diff --git a/client/tests/kvm/tests/pci_hotplug.py 
>> b/client/tests/kvm/tests/pci_hotplug.py
>> index 2c459d7..5202cf6 100644
>> --- a/client/tests/kvm/tests/pci_hotplug.py
>> +++ b/client/tests/kvm/tests/pci_hotplug.py
>> @@ -1,4 +1,4 @@
>> -import logging, os
>> +import logging, os, commands, re
>>   from autotest_lib.client.common_lib import error
>>   import kvm_subprocess, kvm_test_utils, kvm_utils, kvm_vm
>>
>> @@ -35,26 +35,56 @@ def run_pci_hotplug(test, params, env):
>>
>>       tested_model = params.get("pci_model")
>>       test_type = params.get("pci_type")
>> -
>> -    if test_type == "nic":
>> -        pci_add_cmd = "pci_add pci_addr=auto nic model=%s" % tested_model
>> -    elif test_type == "block":
>> -        image_params = kvm_utils.get_sub_dict(params, "stg")
>> -        image_filename = kvm_vm.get_image_filename(image_params, 
>> test.bindir)
>> -        pci_add_cmd = ("pci_add pci_addr=auto storage file=%s,if=%s" %
>> -                       (image_filename, tested_model))
>> -
>> -    # Execute pci_add (should be replaced by a proper monitor method call)
>> -    add_output = vm.monitor.cmd(pci_add_cmd)
>> -    if not "OK domain" in add_output:
>> -        raise error.TestFail("Add device failed. Hypervisor command is: %s. 
>> "
>> -                             "Output: %r" % (pci_add_cmd, add_output))
>> -    after_add = vm.monitor.info("pci")
>> +    s, o = commands.getstatusoutput("uname -r")
>> +    if len(re.findall("el6", o))>  0:
> ^ This check is not good for upstream code, after all we might be
> running on qemu-kvm upstream, generic versions that already support the
> new syntax. Asking the monitor the set of supported commands seems the
> most sensible solution here. Please resolve this issue and re-send the
> patch.
>
>> +        cmd_type = "device"
>> +    else:
>> +        cmd_type = "pci"
>> +
>> +    if cmd_type == "pci":
>> +        if test_type == "nic":
>> +            pci_add_cmd = "pci_add pci_addr=auto nic model=%s" % 
>> tested_model
>> +        elif test_type == "block":
>> +            image_params = kvm_utils.get_sub_dict(params, "stg")
>> +            image_filename = kvm_vm.get_image_filename(image_params,
>> +                                                        test.bindir)
>> +            pci_add_cmd = ("pci_add pci_addr=auto storage file=%s,if=%s" %
>> +                           (image_filename, tested_model))
>> +        # Execute pci_add (should be replaced by a proper monitor method 
>> call)
>> +        add_output = vm.monitor.cmd(pci_add_cmd)
> ^ You might want to wrap pci device addition on a new monitor method, as
> the TODO comment on this above line suggests. This comment was made by
> Michael on his monitor patchset, and since you are working on this test,
> it's a good opportunity to get this implemented.
>
>> +        if not "OK domain" in add_output:
>> +            raise error.TestFail("Add device failed. Hypervisor command is: 
>> %s"
>> +                                  ". Output: %r" % (pci_add_cmd, 
>> add_output))
>> +        after_add = vm.monitor.info("pci")
>> +    elif cmd_type == "device":
>> +        # block device hotplug is not support rignt now
> ^ Typo, "supported"
>
>> +        id = test_type + "-" + kvm_utils.generate_random_string(4)
>> +        if test_type == "nic":
>> +            if tested_model == "virtio":
>> +                tested_model = "virtio-net-pci"
>> +            pci_add_cmd = "device_add id=%s,driver=%s" % (id, tested_model)
>> +        elif test_type == "block":
>> +            if tested_model == "virtio":
>> +                tested_model = "virtio-blk-pci"
>> +            if tested_model == "scsi":
>> +                tested_model = "scsi-disk"
>> +            pci_add_cmd = "device_add %s,id=%s,driver=%s" % (image_filename,
>> +                           id, tested_model)
>> +
>> +            raise error.TestError("Do not support in current version")
> ^ Here, we should verify whether the monitor does support pci query
> command (at some point, this *will* be implemented). If it doesn't,
> throw a error.TestNA with the message "PCI block hotplug is not
> supported by the monitor".
>
>> +        add_output = vm.monitor.cmd(pci_add_cmd)
>> +        after_add = vm.monitor.info("pci")
>> +        if not id in after_add:
>> +            raise error.TestFail("Add device failed. Hypervisor command is: 
>> %s"
>> +                                 ". Output: %r" % (pci_add_cmd, add_output))
>>
>>       # Define a helper function to delete the device
>>       def pci_del(ignore_failure=False):
>> -        slot_id = "0" + add_output.split(",")[2].split()[1]
>> -        cmd = "pci_del pci_addr=%s" % slot_id
>> +        if cmd_type == "pci":
>> +            slot_id = "0" + add_output.split(",")[2].split()[1]
>> +            cmd = "pci_del pci_addr=%s" % slot_id
>> +        elif cmd_type == "device":
>> +            cmd = "device_del id=%s" % id
>>           # This should be replaced by a proper monitor method call
>>           vm.monitor.cmd(cmd)
>>
Hi Lucas,
Sorry that I didn't see your reply until now, because my bad filter for 
emails. Now we find that the block devices also supported by monitor 
command line(virtio blocks), so we update the patch. I will modify that 
patch according your comments and resend it soon. Thank you.

Best Regards
Yiqiao Pu

_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to