On Tue, Jul 19, 2022 at 4:02 PM Laine Stump <laine(a)laine.org> wrote:
On 7/18/22 11:15 AM, Jiri Denemark wrote:
> On Mon, Jul 18, 2022 at 10:40:56 +0200, Eugenio Perez Martin wrote:
>> On Mon, Jul 18, 2022 at 10:25 AM Jiri Denemark <jdenemar(a)redhat.com>
wrote:
>>> Which in ideal case would mean only a QMP command (such as
>>> hotplugging a non-migratable device) is the only way to add migration
>>> blocker. If this is true, than we're safe as libvirt does not allow
such
>>> commands between qemuMigrationSrcIsAllowed and migration start.
>>>
>>
>> Ok, that rules out a few bad use cases. I can do a fast lookup to
>> check if blockers can be added without the knowledge of libvirt.
>>
>>> That said, is there a reason for not implementing the correct solution
>>> right away as a separate patch?
>>>
>>
>> I was not sure if libvirt already had another way to check, for
>> example, if the vhost device didn't have VHOST_F_LOG_ALL feature.
>
> I'm not aware of such check, but even if it exists, checking for
> migration blockers looks like the right way of doing things anyway.
Actually that's been on my todo list for a long time - for any qemu that
supports the QMP command that checks for migratability, we should be
calling this command rather than checking against our own internal list
(which is really just an "informed guess") of what can't be migrated.
This way we'll always get the right answer (or at least what QEMU
believes to be the right answer :-)). Fixing it this way will also mean
that migration of VFIO devices will just "magically" start working once
a migration-supporting driver is written for the device, and the correct
vfio driver is bound to the device (this latter item is also on my list).
So if you're up for making the patch to call the QMP command, I'd be
happy to review it!
Thanks! Actually I'd need some guidance first, I'm not very used to
libvirt code.
As I understand I should create a function in qemu_agent.h/c, a getter
similar to qemuAgentGetFSInfo. How can I get a qemuAgent from
qemuMigrationSrcIsAllowed? I only have a virQEMUDriver there.
For now it should be enough to delete vdpa hardcoded negation, and
then other parts of libvirt can delete other hardcoded checks, isn't
it?
Thanks!