Message ID | 20230125085407.7144-7-vikram.garhwal@amd.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Introduce xenpvh machine for arm architecture | expand |
On Wed, 25 Jan 2023, Vikram Garhwal wrote: > From: Stefano Stabellini <stefano.stabellini@amd.com> > > On ARM it is possible to have a functioning xenpv machine with only the > PV backends and no IOREQ server. If the IOREQ server creation fails continue > to the PV backends initialization. > > Also, moved the IOREQ registration and mapping subroutine to new function > xen_do_ioreq_register(). > > Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com> > Signed-off-by: Vikram Garhwal <vikram.garhwal@amd.com> as per my previous reply, even though I am listed as co-author, for tracking that I did review this version of the patch: Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > hw/xen/xen-hvm-common.c | 53 ++++++++++++++++++++++++++++------------- > 1 file changed, 36 insertions(+), 17 deletions(-) > > diff --git a/hw/xen/xen-hvm-common.c b/hw/xen/xen-hvm-common.c > index e748d8d423..94dbbe97ed 100644 > --- a/hw/xen/xen-hvm-common.c > +++ b/hw/xen/xen-hvm-common.c > @@ -777,25 +777,12 @@ err: > exit(1); > } > > -void xen_register_ioreq(XenIOState *state, unsigned int max_cpus, > - MemoryListener xen_memory_listener) > +static void xen_do_ioreq_register(XenIOState *state, > + unsigned int max_cpus, > + MemoryListener xen_memory_listener) > { > int i, rc; > > - state->xce_handle = xenevtchn_open(NULL, 0); > - if (state->xce_handle == NULL) { > - perror("xen: event channel open"); > - goto err; > - } > - > - state->xenstore = xs_daemon_open(); > - if (state->xenstore == NULL) { > - perror("xen: xenstore open"); > - goto err; > - } > - > - xen_create_ioreq_server(xen_domid, &state->ioservid); > - > state->exit.notify = xen_exit_notifier; > qemu_add_exit_notifier(&state->exit); > > @@ -859,12 +846,44 @@ void xen_register_ioreq(XenIOState *state, unsigned int max_cpus, > QLIST_INIT(&state->dev_list); > device_listener_register(&state->device_listener); > > + return; > + > +err: > + error_report("xen hardware virtual machine initialisation failed"); > + exit(1); > +} > + > +void xen_register_ioreq(XenIOState *state, unsigned int max_cpus, > + MemoryListener xen_memory_listener) > +{ > + int rc; > + > + state->xce_handle = xenevtchn_open(NULL, 0); > + if (state->xce_handle == NULL) { > + perror("xen: event channel open"); > + goto err; > + } > + > + state->xenstore = xs_daemon_open(); > + if (state->xenstore == NULL) { > + perror("xen: xenstore open"); > + goto err; > + } > + > + rc = xen_create_ioreq_server(xen_domid, &state->ioservid); > + if (!rc) { > + xen_do_ioreq_register(state, max_cpus, xen_memory_listener); > + } else { > + warn_report("xen: failed to create ioreq server"); > + } > + > xen_bus_init(); > > xen_register_backend(state); > > return; > + > err: > - error_report("xen hardware virtual machine initialisation failed"); > + error_report("xen hardware virtual machine backend registration failed"); > exit(1); > } > -- > 2.17.0 > >
diff --git a/hw/xen/xen-hvm-common.c b/hw/xen/xen-hvm-common.c index e748d8d423..94dbbe97ed 100644 --- a/hw/xen/xen-hvm-common.c +++ b/hw/xen/xen-hvm-common.c @@ -777,25 +777,12 @@ err: exit(1); } -void xen_register_ioreq(XenIOState *state, unsigned int max_cpus, - MemoryListener xen_memory_listener) +static void xen_do_ioreq_register(XenIOState *state, + unsigned int max_cpus, + MemoryListener xen_memory_listener) { int i, rc; - state->xce_handle = xenevtchn_open(NULL, 0); - if (state->xce_handle == NULL) { - perror("xen: event channel open"); - goto err; - } - - state->xenstore = xs_daemon_open(); - if (state->xenstore == NULL) { - perror("xen: xenstore open"); - goto err; - } - - xen_create_ioreq_server(xen_domid, &state->ioservid); - state->exit.notify = xen_exit_notifier; qemu_add_exit_notifier(&state->exit); @@ -859,12 +846,44 @@ void xen_register_ioreq(XenIOState *state, unsigned int max_cpus, QLIST_INIT(&state->dev_list); device_listener_register(&state->device_listener); + return; + +err: + error_report("xen hardware virtual machine initialisation failed"); + exit(1); +} + +void xen_register_ioreq(XenIOState *state, unsigned int max_cpus, + MemoryListener xen_memory_listener) +{ + int rc; + + state->xce_handle = xenevtchn_open(NULL, 0); + if (state->xce_handle == NULL) { + perror("xen: event channel open"); + goto err; + } + + state->xenstore = xs_daemon_open(); + if (state->xenstore == NULL) { + perror("xen: xenstore open"); + goto err; + } + + rc = xen_create_ioreq_server(xen_domid, &state->ioservid); + if (!rc) { + xen_do_ioreq_register(state, max_cpus, xen_memory_listener); + } else { + warn_report("xen: failed to create ioreq server"); + } + xen_bus_init(); xen_register_backend(state); return; + err: - error_report("xen hardware virtual machine initialisation failed"); + error_report("xen hardware virtual machine backend registration failed"); exit(1); }