On Fri, May 17, 2013 at 06:17:07PM +0800, Osier Yang wrote:
On 17/05/13 18:12, Daniel P. Berrange wrote:
>On Thu, May 16, 2013 at 11:02:00PM +0800, Osier Yang wrote:
>>Since 0d70656afded, it starts to access the sysfs files to build
>>the qemu command line (by virSCSIDeviceGetSgName, which is to find
>>out the scsi generic device name by adpater:bus:target:unit), there
>>is no way to work around, qemu wants to see the scsi generic device
>>like "/dev/sg6" anyway.
>>
>>And there might be other places which need to access sysfs files
>>when building qemu command line in future.
>>
>>Instead of increasing the arguments of qemuBuildCommandLine, this
>>introduces a new callback for qemuBuildCommandLine, and thus tests
>>can register their own callbacks for sysfs test input files accessing.
>>
>>* src/qemu/qemu_command.h: (New callback struct
>> qemuBuildCommandLineCallbacks;
>> extern buildCommandLineCallbacks)
>>* src/qemu/qemu_command.c: (wire up the callback struct)
>>* src/qemu/qemu_driver.c: (Use the new syntax of qemuBuildCommandLine)
>>* src/qemu/qemu_hotplug.c: Likewise
>>* src/qemu/qemu_process.c: Likewise
>>* tests/qemuxml2argvtest.c: (Helper testSCSIDeviceGetSgName;
>> callback struct testCallbacks;
>> Use the callback struct)
>>* src/tests/qemuxmlnstest.c Use the new syntax of qemuBuildCommandLine)
>>---
>> src/qemu/qemu_command.c | 28 ++++++++++++++++++++--------
>> src/qemu/qemu_command.h | 16 ++++++++++++++--
>> src/qemu/qemu_driver.c | 3 ++-
>> src/qemu/qemu_hotplug.c | 6 ++++--
>> src/qemu/qemu_process.c | 3 ++-
>> tests/qemuxml2argvtest.c | 21 ++++++++++++++++++++-
>> tests/qemuxmlnstest.c | 3 ++-
>> 7 files changed, 64 insertions(+), 16 deletions(-)
>>
>>diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>>index 5b95c07..e775479 100644
>>--- a/src/qemu/qemu_command.c
>>+++ b/src/qemu/qemu_command.c
>>@@ -4757,18 +4757,25 @@ qemuBuildUSBHostdevUsbDevStr(virDomainHostdevDefPtr dev)
>> char *
>> qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev,
>>- virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED)
>>+ virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED,
>>+ qemuBuildCommandLineCallbacksPtr callbacks)
>> {
>> virBuffer buf = VIR_BUFFER_INITIALIZER;
>> char *sg = NULL;
>>- if (!(sg = virSCSIDeviceGetSgName(dev->source.subsys.u.scsi.adapter,
>>- dev->source.subsys.u.scsi.bus,
>>- dev->source.subsys.u.scsi.target,
>>- dev->source.subsys.u.scsi.unit))) {
>>- goto error;
>>+ if (!callbacks) {
>>+ virReportError(VIR_ERR_INVALID_ARG, "%s",
>>+ _("callbacks cannot be NULL"));
>>+ return NULL;
>I think I'd remove this check and....
>
>
>>diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
>>index 36dfa6b..23b6af3 100644
>>--- a/src/qemu/qemu_command.h
>>+++ b/src/qemu/qemu_command.h
>>@@ -61,7 +71,8 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
>> const char *migrateFrom,
>> int migrateFd,
>> virDomainSnapshotObjPtr current_snapshot,
>>- enum virNetDevVPortProfileOp vmop)
>>+ enum virNetDevVPortProfileOp vmop,
>>+ qemuBuildCommandLineCallbacksPtr callbacks)
>> ATTRIBUTE_NONNULL(1);
>...add another ATTRIBUTE_NONNULL here and...
Do we need ATTRIBUT_NONULL for qemuBuildCommandLine too? the
callbacks could be NULL in case of it won't call qemuBuildSCSIHostdevDrvStr,
or something else in future.
Yes, we should expect to use this facility in other places too, so we
should add NUNULL here to prepare for that.
If it should be NONNULL, I have to set up the callback from
qemuxmlnstest.c
too, the callbacks is meaningless for it though.
Yep, could put a reusable callback impl in testutilsqemu.c
so that we don't need to duplicate it in all the tests.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|