Message ID | 1610488352-18494-4-git-send-email-olekstysh@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | IOREQ feature (+ virtio-mmio) on Arm | expand |
Oleksandr Tyshchenko <olekstysh@gmail.com> writes: > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> > > The IOREQ is about to be common feature and Arm will have its own > implementation. > > But the name of the function is pretty generic and can be confusing > on Arm (we already have a try_handle_mmio()). > > In order not to rename the function (which is used for a varying > set of purposes on x86) globally and get non-confusing variant on Arm > provide a wrapper arch_ioreq_complete_mmio() to be used on common > and Arm code. > > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> > Reviewed-by: Jan Beulich <jbeulich@suse.com> > CC: Julien Grall <julien.grall@arm.com> > [On Arm only] > Tested-by: Wei Chen <Wei.Chen@arm.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Hi Oleksandr, On 12/01/2021 21:52, Oleksandr Tyshchenko wrote: > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> > > The IOREQ is about to be common feature and Arm will have its own > implementation. > > But the name of the function is pretty generic and can be confusing > on Arm (we already have a try_handle_mmio()). > > In order not to rename the function (which is used for a varying > set of purposes on x86) globally and get non-confusing variant on Arm > provide a wrapper arch_ioreq_complete_mmio() to be used on common > and Arm code. > > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> > Reviewed-by: Jan Beulich <jbeulich@suse.com> > CC: Julien Grall <julien.grall@arm.com> > [On Arm only] > Tested-by: Wei Chen <Wei.Chen@arm.com> Reviewed-by: Julien Grall <jgrall@amazon.com> Cheers,
> -----Original Message----- > From: Xen-devel <xen-devel-bounces@lists.xenproject.org> On Behalf Of Oleksandr Tyshchenko > Sent: 12 January 2021 21:52 > To: xen-devel@lists.xenproject.org > Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>; Paul Durrant <paul@xen.org>; Jan Beulich > <jbeulich@suse.com>; Andrew Cooper <andrew.cooper3@citrix.com>; Roger Pau Monné > <roger.pau@citrix.com>; Wei Liu <wl@xen.org>; Julien Grall <julien@xen.org>; Stefano Stabellini > <sstabellini@kernel.org>; Julien Grall <julien.grall@arm.com> > Subject: [PATCH V4 03/24] x86/ioreq: Provide out-of-line wrapper for the handle_mmio() > > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> > > The IOREQ is about to be common feature and Arm will have its own > implementation. > > But the name of the function is pretty generic and can be confusing > on Arm (we already have a try_handle_mmio()). > > In order not to rename the function (which is used for a varying > set of purposes on x86) globally and get non-confusing variant on Arm > provide a wrapper arch_ioreq_complete_mmio() to be used on common > and Arm code. > > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Reviewed-by: Paul Durrant <paul@xen.org> > Reviewed-by: Jan Beulich <jbeulich@suse.com> > CC: Julien Grall <julien.grall@arm.com> > [On Arm only] > Tested-by: Wei Chen <Wei.Chen@arm.com> > > --- > Please note, this is a split/cleanup/hardening of Julien's PoC: > "Add support for Guest IO forwarding to a device emulator" > > Changes RFC -> V1: > - new patch > > Changes V1 -> V2: > - remove "handle" > - add Jan's A-b > > Changes V2 -> V3: > - remove Jan's A-b > - update patch subject/description > - use out-of-line function instead of #define > - put earlier in the series to avoid breakage > > Changes V3 -> V4: > - add Jan's R-b > - rename ioreq_complete_mmio() to arch_ioreq_complete_mmio() > --- > xen/arch/x86/hvm/ioreq.c | 7 ++++++- > xen/include/asm-x86/hvm/ioreq.h | 1 + > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/xen/arch/x86/hvm/ioreq.c b/xen/arch/x86/hvm/ioreq.c > index ff9a546..00c68f5 100644 > --- a/xen/arch/x86/hvm/ioreq.c > +++ b/xen/arch/x86/hvm/ioreq.c > @@ -35,6 +35,11 @@ > #include <public/hvm/ioreq.h> > #include <public/hvm/params.h> > > +bool arch_ioreq_complete_mmio(void) > +{ > + return handle_mmio(); > +} > + > static void set_ioreq_server(struct domain *d, unsigned int id, > struct hvm_ioreq_server *s) > { > @@ -225,7 +230,7 @@ bool handle_hvm_io_completion(struct vcpu *v) > break; > > case HVMIO_mmio_completion: > - return handle_mmio(); > + return arch_ioreq_complete_mmio(); > > case HVMIO_pio_completion: > return handle_pio(vio->io_req.addr, vio->io_req.size, > diff --git a/xen/include/asm-x86/hvm/ioreq.h b/xen/include/asm-x86/hvm/ioreq.h > index f140ef4..0e64e76 100644 > --- a/xen/include/asm-x86/hvm/ioreq.h > +++ b/xen/include/asm-x86/hvm/ioreq.h > @@ -58,6 +58,7 @@ unsigned int hvm_broadcast_ioreq(ioreq_t *p, bool buffered); > > void hvm_ioreq_init(struct domain *d); > > +bool arch_ioreq_complete_mmio(void); > bool arch_vcpu_ioreq_completion(enum hvm_io_completion io_completion); > int arch_ioreq_server_map_pages(struct hvm_ioreq_server *s); > void arch_ioreq_server_unmap_pages(struct hvm_ioreq_server *s); > -- > 2.7.4 >
diff --git a/xen/arch/x86/hvm/ioreq.c b/xen/arch/x86/hvm/ioreq.c index ff9a546..00c68f5 100644 --- a/xen/arch/x86/hvm/ioreq.c +++ b/xen/arch/x86/hvm/ioreq.c @@ -35,6 +35,11 @@ #include <public/hvm/ioreq.h> #include <public/hvm/params.h> +bool arch_ioreq_complete_mmio(void) +{ + return handle_mmio(); +} + static void set_ioreq_server(struct domain *d, unsigned int id, struct hvm_ioreq_server *s) { @@ -225,7 +230,7 @@ bool handle_hvm_io_completion(struct vcpu *v) break; case HVMIO_mmio_completion: - return handle_mmio(); + return arch_ioreq_complete_mmio(); case HVMIO_pio_completion: return handle_pio(vio->io_req.addr, vio->io_req.size, diff --git a/xen/include/asm-x86/hvm/ioreq.h b/xen/include/asm-x86/hvm/ioreq.h index f140ef4..0e64e76 100644 --- a/xen/include/asm-x86/hvm/ioreq.h +++ b/xen/include/asm-x86/hvm/ioreq.h @@ -58,6 +58,7 @@ unsigned int hvm_broadcast_ioreq(ioreq_t *p, bool buffered); void hvm_ioreq_init(struct domain *d); +bool arch_ioreq_complete_mmio(void); bool arch_vcpu_ioreq_completion(enum hvm_io_completion io_completion); int arch_ioreq_server_map_pages(struct hvm_ioreq_server *s); void arch_ioreq_server_unmap_pages(struct hvm_ioreq_server *s);