Message ID | 73241ca8e613a00d89f86d214bf586cad658a616.1586165556.git.elena.ufimtseva@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Initial support for multi-process qemu | expand |
* elena.ufimtseva@oracle.com (elena.ufimtseva@oracle.com) wrote: > From: Jagannathan Raman <jag.raman@oracle.com> > > 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.johnson@oracle.com> > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> > --- > remote/remote-main.c | 87 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 87 insertions(+) > > diff --git a/remote/remote-main.c b/remote/remote-main.c > index ecf30e0cba..51595f3141 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,98 @@ > #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; > + > +static void process_msg(GIOCondition cond, MPQemuLinkState *link, > + 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"); > + goto finalize_loop; > + } > + > + switch (msg->cmd) { > + case INIT: > + break; > + default: > + error_setg(&err, "Unknown command"); Again this doesn't seem to have changed since my 4th March review where I asked for better error messages. Dave > + 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); > + > 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); > + > + qdev_machine_creation_done(); > + qemu_mutex_lock_iothread(); > + qemu_run_machine_init_done_notifiers(); > + qemu_mutex_unlock_iothread(); > + > + mpqemu_start_coms(mpqemu_link, mpqemu_link->com); > + > return 0; > } > -- > 2.25.GIT > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
On Thu, Apr 09, 2020 at 07:00:02PM +0100, Dr. David Alan Gilbert wrote: > * elena.ufimtseva@oracle.com (elena.ufimtseva@oracle.com) wrote: > > From: Jagannathan Raman <jag.raman@oracle.com> > > > > 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.johnson@oracle.com> > > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> > > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> > > --- > > remote/remote-main.c | 87 ++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 87 insertions(+) > > > > diff --git a/remote/remote-main.c b/remote/remote-main.c > > index ecf30e0cba..51595f3141 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,98 @@ > > #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; > > + > > +static void process_msg(GIOCondition cond, MPQemuLinkState *link, > > + 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"); > > + goto finalize_loop; > > + } > > + > > + switch (msg->cmd) { > > + case INIT: > > + break; > > + default: > > + error_setg(&err, "Unknown command"); > > Again this doesn't seem to have changed since my 4th March review where > I asked for better error messages. > Hi Dave Apologies, we have omitted it (and other patches you have commented on). We will re-send the series with these addressed shortly plus the test build error fix. Elena > Dave > > > + 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); > > + > > 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); > > + > > + qdev_machine_creation_done(); > > + qemu_mutex_lock_iothread(); > > + qemu_run_machine_init_done_notifiers(); > > + qemu_mutex_unlock_iothread(); > > + > > + mpqemu_start_coms(mpqemu_link, mpqemu_link->com); > > + > > return 0; > > } > > -- > > 2.25.GIT > > > -- > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK >
diff --git a/remote/remote-main.c b/remote/remote-main.c index ecf30e0cba..51595f3141 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,98 @@ #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; + +static void process_msg(GIOCondition cond, MPQemuLinkState *link, + 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"); + goto finalize_loop; + } + + switch (msg->cmd) { + case INIT: + 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); + 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); + + qdev_machine_creation_done(); + qemu_mutex_lock_iothread(); + qemu_run_machine_init_done_notifiers(); + qemu_mutex_unlock_iothread(); + + mpqemu_start_coms(mpqemu_link, mpqemu_link->com); + return 0; }