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
>
>