Message ID | 20240923145520.1323504-3-edgar.iglesias@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | hw/arm: xenpvh: Enable PCI for ARM PVH | expand |
On Mon, 23 Sep 2024, Edgar E. Iglesias wrote: > From: "Edgar E. Iglesias" <edgar.iglesias@amd.com> > > Add a way to enable/disable buffered IOREQs for PVH machines > and disable them for ARM. ARM does not support buffered > IOREQ's nor the legacy way to map IOREQ info pages. > > See the following for more details: > https://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=2fbd7e609e1803ac5e5c26e22aa8e4b5a6cddbb1 > https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/arch/arm/ioreq.c;h=2e829d2e7f3760401b96fa7c930e2015fb1cf463;hb=HEAD#l138 > > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@amd.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > hw/arm/xen-pvh.c | 3 +++ > hw/i386/xen/xen-pvh.c | 3 +++ > hw/xen/xen-pvh-common.c | 2 +- > include/hw/xen/xen-pvh-common.h | 3 +++ > 4 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/xen-pvh.c b/hw/arm/xen-pvh.c > index 04cb9855af..28af3910ea 100644 > --- a/hw/arm/xen-pvh.c > +++ b/hw/arm/xen-pvh.c > @@ -66,6 +66,9 @@ static void xen_arm_machine_class_init(ObjectClass *oc, void *data) > */ > mc->max_cpus = GUEST_MAX_VCPUS; > > + /* Xen/ARM does not use buffered IOREQs. */ > + xpc->handle_bufioreq = HVM_IOREQSRV_BUFIOREQ_OFF; > + > /* List of supported features known to work on PVH ARM. */ > xpc->has_tpm = true; > xpc->has_virtio_mmio = true; > diff --git a/hw/i386/xen/xen-pvh.c b/hw/i386/xen/xen-pvh.c > index 45645667e9..f1f02d3311 100644 > --- a/hw/i386/xen/xen-pvh.c > +++ b/hw/i386/xen/xen-pvh.c > @@ -89,6 +89,9 @@ static void xen_pvh_machine_class_init(ObjectClass *oc, void *data) > /* We have an implementation specific init to create CPU objects. */ > xpc->init = xen_pvh_init; > > + /* Enable buffered IOREQs. */ > + xpc->handle_bufioreq = HVM_IOREQSRV_BUFIOREQ_ATOMIC; > + > /* > * PCI INTX routing. > * > diff --git a/hw/xen/xen-pvh-common.c b/hw/xen/xen-pvh-common.c > index 08641fdcec..76a9b2b945 100644 > --- a/hw/xen/xen-pvh-common.c > +++ b/hw/xen/xen-pvh-common.c > @@ -195,7 +195,7 @@ static void xen_pvh_init(MachineState *ms) > > xen_pvh_init_ram(s, sysmem); > xen_register_ioreq(&s->ioreq, ms->smp.max_cpus, > - HVM_IOREQSRV_BUFIOREQ_ATOMIC, > + xpc->handle_bufioreq, > &xen_memory_listener); > > if (s->cfg.virtio_mmio_num) { > diff --git a/include/hw/xen/xen-pvh-common.h b/include/hw/xen/xen-pvh-common.h > index bc09eea936..5cdd23c2f4 100644 > --- a/include/hw/xen/xen-pvh-common.h > +++ b/include/hw/xen/xen-pvh-common.h > @@ -43,6 +43,9 @@ struct XenPVHMachineClass { > */ > int (*set_pci_link_route)(uint8_t line, uint8_t irq); > > + /* Allow implementations to optionally enable buffered ioreqs. */ > + uint8_t handle_bufioreq; > + > /* > * Each implementation can optionally enable features that it > * supports and are known to work. > -- > 2.43.0 >
diff --git a/hw/arm/xen-pvh.c b/hw/arm/xen-pvh.c index 04cb9855af..28af3910ea 100644 --- a/hw/arm/xen-pvh.c +++ b/hw/arm/xen-pvh.c @@ -66,6 +66,9 @@ static void xen_arm_machine_class_init(ObjectClass *oc, void *data) */ mc->max_cpus = GUEST_MAX_VCPUS; + /* Xen/ARM does not use buffered IOREQs. */ + xpc->handle_bufioreq = HVM_IOREQSRV_BUFIOREQ_OFF; + /* List of supported features known to work on PVH ARM. */ xpc->has_tpm = true; xpc->has_virtio_mmio = true; diff --git a/hw/i386/xen/xen-pvh.c b/hw/i386/xen/xen-pvh.c index 45645667e9..f1f02d3311 100644 --- a/hw/i386/xen/xen-pvh.c +++ b/hw/i386/xen/xen-pvh.c @@ -89,6 +89,9 @@ static void xen_pvh_machine_class_init(ObjectClass *oc, void *data) /* We have an implementation specific init to create CPU objects. */ xpc->init = xen_pvh_init; + /* Enable buffered IOREQs. */ + xpc->handle_bufioreq = HVM_IOREQSRV_BUFIOREQ_ATOMIC; + /* * PCI INTX routing. * diff --git a/hw/xen/xen-pvh-common.c b/hw/xen/xen-pvh-common.c index 08641fdcec..76a9b2b945 100644 --- a/hw/xen/xen-pvh-common.c +++ b/hw/xen/xen-pvh-common.c @@ -195,7 +195,7 @@ static void xen_pvh_init(MachineState *ms) xen_pvh_init_ram(s, sysmem); xen_register_ioreq(&s->ioreq, ms->smp.max_cpus, - HVM_IOREQSRV_BUFIOREQ_ATOMIC, + xpc->handle_bufioreq, &xen_memory_listener); if (s->cfg.virtio_mmio_num) { diff --git a/include/hw/xen/xen-pvh-common.h b/include/hw/xen/xen-pvh-common.h index bc09eea936..5cdd23c2f4 100644 --- a/include/hw/xen/xen-pvh-common.h +++ b/include/hw/xen/xen-pvh-common.h @@ -43,6 +43,9 @@ struct XenPVHMachineClass { */ int (*set_pci_link_route)(uint8_t line, uint8_t irq); + /* Allow implementations to optionally enable buffered ioreqs. */ + uint8_t handle_bufioreq; + /* * Each implementation can optionally enable features that it * supports and are known to work.