* 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. > + 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