On Fri, Mar 21, 2025 at 2:42 PM Marc-André Lureau < marcandre.lur...@redhat.com> wrote:
> Hi > > On Fri, Mar 21, 2025 at 7:40 AM <yong.hu...@smartx.com> wrote: > > > > From: Hyman Huang <yong.hu...@smartx.com> > > > > Our goal is to migrate VMs that are configured with qemu-vdagent-typed > > chardev while allowing the agent to continue working without having > > to restart the service in guest. > > > > I sent a more complete series last week: "[PATCH for-10.1 00/10] > Support vdagent migration" > > https://patchew.org/QEMU/20250311155932.1472092-1-marcandre.lur...@redhat.com/ Thanks for your reminder, indeed, it migrates the qemu clipboard content as well, more complete. Thanks for the work, we'll pick your patchset and try it. > > > > > Let's justify which fields should be taken into account for struct > > VDAgentChardev. > > > > struct VDAgentChardev { > > Chardev parent; > > > > /* config */ > > bool mouse; > > bool clipboard; > > > > /* guest vdagent */ > > uint32_t caps; > > VDIChunkHeader chunk; > > uint32_t chunksize; > > uint8_t *msgbuf; > > uint32_t msgsize; > > uint8_t *xbuf; > > uint32_t xoff, xsize; > > Buffer outbuf; > > > > /* mouse */ > > DeviceState mouse_dev; > > uint32_t mouse_x; > > uint32_t mouse_y; > > uint32_t mouse_btn; > > uint32_t mouse_display; > > QemuInputHandlerState *mouse_hs; > > > > /* clipboard */ > > QemuClipboardPeer cbpeer; > > uint32_t last_serial[QEMU_CLIPBOARD_SELECTION__COUNT]; > > uint32_t cbpending[QEMU_CLIPBOARD_SELECTION__COUNT]; > > }; > > > > parent: > > No dynamic information is generated. skip migrating. > > > > mouse, clipboard: > > The mouse and clipboard should be set up identically on both sides. > > Skip migrating. > > > > caps: > > Store the negotiated caps between the client and the guest. > > Should migrate. > > > > chunk, ... outbuf: > > The spice agent protocol's message transportation between the client > > and the guest is implemented using all of these fields, however the > > message loss can be tolerated by guests because the issue may occur > > in the real world as well. > > Could skip migrating. > > It's part of the host/guest state, data will be lost and it's likely > the communication will break if it's not migrated. > > > > > mouse_dev, ... mouse_hs: > > The mouse state can be reset after a live migration since the agent > > working inside the guest does not heavily depend on them. > > Could skip migrating > > same > > > cbpeer: > > Since the cbpeer would lose the data it references to if the qemu > > clipboard data was not migrated, this field can also be initialized > > after live migration. > > Could skip migrating > > > > We should migrate the clipboard content too, to avoid having to > request it again, or have a noticeable effect. > > > last_serial, cbpending: > > It is necessary for the agent to function after live migration. > > Should migrate. > > > > For the last_serial, saving & loading its value to make ensure the > > client receives the most recent clipboard data from the guest after > > live migration. > > > > For the cbpending, saving & loading its value aims to inform the > > guest that the clipboard has been released and is now empty in > > case that the guest acts strangely while supposing that the > > requested data can be properly retrieved. > > > > To summarize, all we need to do is migrate the caps, last_serial > > and cbpendings fields of the struct VDAgentChardev, > > > > Please review, thanks > > > > Yong > > > > Hyman Huang (3): > > vdagent: Wrap vdagent_register_to_qemu_clipboard function > > vdagent: Set up mouse and clipboard after live migration > > vdagent: Drop blocker to support migration > > > > ui/trace-events | 1 + > > ui/vdagent.c | 102 +++++++++++++++++++++++++++++++++++++++--------- > > 2 files changed, 85 insertions(+), 18 deletions(-) > > > > -- > > 2.27.0 > > > > -- Best regards