* Jag Raman (jag.ra...@oracle.com) wrote: > > > On 3/4/2020 5:29 AM, Dr. David Alan Gilbert wrote: > > * Jagannathan Raman (jag.ra...@oracle.com) wrote: > > > Adds the handler to process message from QEMU, > > > Initialize remote process main loop, handles SYNC_SYSMEM > > > message by updating its "system_memory" container using > > > shared file descriptors received from QEMU. > > > > > > Signed-off-by: John G Johnson <john.g.john...@oracle.com> > > > Signed-off-by: Elena Ufimtseva <elena.ufimts...@oracle.com> > > > Signed-off-by: Jagannathan Raman <jag.ra...@oracle.com> > > > --- > > > v4 -> v5: > > > - We checked if we could use functions already defined in > > > util/main-loop.c instead of using g_main_loop_run. However, > > > we couldn't find a suitable function that's generic enough > > > to do this. All of them have emulator code embedded in them > > > which is not used by the remote process. We are therefore > > > not making any change to this patch > > > > > > remote/remote-main.c | 85 > > > ++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > 1 file changed, 85 insertions(+) > > > > > > diff --git a/remote/remote-main.c b/remote/remote-main.c > > > index ecf30e0..56315cd 100644 > > > --- a/remote/remote-main.c > > > +++ b/remote/remote-main.c > > > @@ -12,6 +12,7 @@ > > > #include "qemu-common.h" > > > #include <stdio.h> > > > +#include <unistd.h> > > > #include "qemu/module.h" > > > #include "remote/pcihost.h" > > > @@ -19,12 +20,96 @@ > > > #include "hw/boards.h" > > > #include "hw/qdev-core.h" > > > #include "qemu/main-loop.h" > > > +#include "remote/memory.h" > > > +#include "io/mpqemu-link.h" > > > +#include "qapi/error.h" > > > +#include "qemu/main-loop.h" > > > +#include "sysemu/cpus.h" > > > +#include "qemu-common.h" > > > +#include "hw/pci/pci.h" > > > +#include "qemu/thread.h" > > > +#include "qemu/main-loop.h" > > > +#include "qemu/config-file.h" > > > +#include "sysemu/sysemu.h" > > > +#include "block/block.h" > > > +#include "exec/ramlist.h" > > > + > > > +static MPQemuLinkState *mpqemu_link; > > > +PCIDevice *remote_pci_dev; > > > + > > > +static void process_msg(GIOCondition cond, MPQemuChannel *chan) > > > +{ > > > + MPQemuMsg *msg = NULL; > > > + Error *err = NULL; > > > + > > > + if ((cond & G_IO_HUP) || (cond & G_IO_ERR)) { > > > + goto finalize_loop; > > > + } > > > + > > > + msg = g_malloc0(sizeof(MPQemuMsg)); > > > + > > > + if (mpqemu_msg_recv(msg, chan) < 0) { > > > + error_setg(&err, "Failed to receive message"); > > > > Please give error messages more context, e.g. the device or process name > > or something like that so that; it helps when we get a user > > reporting a crash and they report 'Unknown command' in their log, but > > then we have to figure out where to point them. > > Ah OK, we'll add the exec name & PID of the QEMU process that spawned > this remote process in the error messages.
Great, if you can get something to say which process this particular one is it would be good; so if you've got multiple remote processes we know which one spat out the error. Dave > Thank you! > -- > Jag > > > > > > + goto finalize_loop; > > > + } > > > + > > > + switch (msg->cmd) { > > > + case INIT: > > > + break; > > > + case PCI_CONFIG_WRITE: > > > + break; > > > + case PCI_CONFIG_READ: > > > + break; > > > + default: > > > + error_setg(&err, "Unknown command"); > > > + goto finalize_loop; > > > + } > > > + > > > + g_free(msg->data2); > > > + g_free(msg); > > > + > > > + return; > > > + > > > +finalize_loop: > > > + if (err) { > > > + error_report_err(err); > > > + } > > > + g_free(msg); > > > + mpqemu_link_finalize(mpqemu_link); > > > + mpqemu_link = NULL; > > > +} > > > int main(int argc, char *argv[]) > > > { > > > + Error *err = NULL; > > > + > > > module_call_init(MODULE_INIT_QOM); > > > + bdrv_init_with_whitelist(); > > > + > > > + if (qemu_init_main_loop(&err)) { > > > + error_report_err(err); > > > + return -EBUSY; > > > + } > > > + > > > + qemu_init_cpu_loop(); > > > + > > > + page_size_init(); > > > + > > > + qemu_mutex_init(&ram_list.mutex); > > > + > > > > So these are some subset of the things from qemu_init; I guess > > we'll have to be careful when we add stuff to vl.c to think what should > > also be added here. > > > > Dave > > > > > current_machine = > > > MACHINE(REMOTE_MACHINE(object_new(TYPE_REMOTE_MACHINE))); > > > + mpqemu_link = mpqemu_link_create(); > > > + if (!mpqemu_link) { > > > + printf("Could not create MPQemu link\n"); > > > + return -1; > > > + } > > > + > > > + mpqemu_init_channel(mpqemu_link, &mpqemu_link->com, STDIN_FILENO); > > > + mpqemu_link_set_callback(mpqemu_link, process_msg); > > > + > > > + mpqemu_start_coms(mpqemu_link); > > > + > > > return 0; > > > } > > > -- > > > 1.8.3.1 > > > > > -- > > Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK > > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK