[libvirt] [PATCH 06/12] qemu: add id when build RNG device and rename object id
lhuang
lhuang at redhat.com
Tue Jan 6 06:38:25 UTC 2015
On 01/05/2015 11:45 PM, Peter Krempa wrote:
> On 01/05/15 15:51, Peter Krempa wrote:
>> On 01/03/15 06:06, Luyao Huang wrote:
>>> We didn't set a id when we build RNG device cmdline before.
>>> Give a id to every RNG device and we can hotunplug it via
>>> QMP cmd device_del.
>>>
>>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>>> ---
>>> src/qemu/qemu_command.c | 12 ++++++------
>>> 1 file changed, 6 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>>> index 46e289d..a4073ee 100644
>>> --- a/src/qemu/qemu_command.c
>>> +++ b/src/qemu/qemu_command.c
>>> @@ -5761,7 +5761,7 @@ qemuBuildRNGBackendArgs(virCommandPtr cmd,
>>> goto cleanup;
>>> }
>>>
>>> - virBufferAsprintf(&buf, "rng-random,id=%s,filename=%s",
>>> + virBufferAsprintf(&buf, "rng-random,id=obj%s,filename=%s",
>>> dev->info.alias, dev->source.file);
>>>
>>> virCommandAddArg(cmd, "-object");
>>> @@ -5784,7 +5784,7 @@ qemuBuildRNGBackendArgs(virCommandPtr cmd,
>>> virCommandAddArgList(cmd, "-chardev", backend, NULL);
>>>
>>> virCommandAddArg(cmd, "-object");
>>> - virCommandAddArgFormat(cmd, "rng-egd,chardev=char%s,id=%s",
>>> + virCommandAddArgFormat(cmd, "rng-egd,chardev=char%s,id=obj%s",
>>> dev->info.alias, dev->info.alias);
>>> break;
>>>
>>> @@ -5816,13 +5816,13 @@ qemuBuildRNGDevStr(virDomainDefPtr def,
>>> }
>>>
>>> if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)
>>> - virBufferAsprintf(&buf, "virtio-rng-ccw,rng=%s", dev->info.alias);
>>> + virBufferAsprintf(&buf, "virtio-rng-ccw,rng=obj%s,id=%s", dev->info.alias, dev->info.alias);
>>> else if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390)
>>> - virBufferAsprintf(&buf, "virtio-rng-s390,rng=%s", dev->info.alias);
>>> + virBufferAsprintf(&buf, "virtio-rng-s390,rng=obj%s,id=%s", dev->info.alias, dev->info.alias);
>>> else if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO)
>>> - virBufferAsprintf(&buf, "virtio-rng-device,rng=%s", dev->info.alias);
>>> + virBufferAsprintf(&buf, "virtio-rng-device,rng=obj%s,id=%s", dev->info.alias, dev->info.alias);
>>> else
>>> - virBufferAsprintf(&buf, "virtio-rng-pci,rng=%s", dev->info.alias);
>>> + virBufferAsprintf(&buf, "virtio-rng-pci,rng=obj%s,id=%s", dev->info.alias, dev->info.alias);
>>>
>>> if (dev->rate > 0) {
>>> virBufferAsprintf(&buf, ",max-bytes=%u", dev->rate);
>>>
>>
>> This breaks the testsuite as you didn't fix the expected outputs after
>> such a change. Please always run "make check" before posting patches.
>>
>> Additional question. Is this change even necessary? The RNG device does
>> have it's alias already whithout the "obj" prefix ... thus it's just
>> "rng0" for example.
> I misread the code. This is actually necessary as otherwise the -device
> would have the same ID as the backend object. That makes sense to
> change, although we need to make sure then that the code will work in
> case of a long running VM (with the incorrect name) and a new libvirt
> instance.
>
> At any rate ... you need to fix the tests after this commit
Thanks for your review.
Yes, I will give another commit for the tests fix in next version.
I have test with a long running VM (start in old libvirt which RNG
device no
device name), and update to a libvirt which have these code, if we try
to hot-unplug the
rng device, qemu will return a error like this :
internal error: unable to execute QEMU command 'device_del': Device
'rng0' not found
maybe my qemu is too old ? vm qemu cmdline -device do not have a id
(because i start it in the
old libvirt), so this error is correct in this place. But i don't know
how can i hot-unplug a device without
a id.
> Peter
>
>
Luyao
More information about the libvir-list
mailing list