|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 07/16] x86/hvm: unify dpci portio intercept with standard portio intercept
On 30/06/15 14:05, Paul Durrant wrote:
> This patch re-works the dpci portio intercepts so that they can be unified
> with standard portio handling thereby removing a substantial amount of
> code duplication.
>
> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
> Cc: Keir Fraser <keir@xxxxxxx>
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> xen/arch/x86/hvm/hvm.c | 2 +
> xen/arch/x86/hvm/intercept.c | 22 ++--
> xen/arch/x86/hvm/io.c | 220
> ++++++++++++----------------------------
> xen/include/asm-x86/hvm/io.h | 5 +
> xen/include/asm-x86/hvm/vcpu.h | 2 +
> xen/include/xen/iommu.h | 1 -
> 6 files changed, 80 insertions(+), 172 deletions(-)
>
> diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
> index 60f8972..6643e0c 100644
> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -1486,6 +1486,8 @@ int hvm_domain_initialise(struct domain *d)
> else
> d->arch.hvm_domain.io_bitmap = hvm_io_bitmap;
>
> + register_dpci_portio_handler(d);
> +
> if ( is_pvh_domain(d) )
> {
> register_portio_handler(d, 0, 0x10003, handle_pvh_io);
> diff --git a/xen/arch/x86/hvm/intercept.c b/xen/arch/x86/hvm/intercept.c
> index 42050f4..a613865 100644
> --- a/xen/arch/x86/hvm/intercept.c
> +++ b/xen/arch/x86/hvm/intercept.c
> @@ -124,10 +124,7 @@ static int hvm_process_io_intercept(const struct
> hvm_io_handler *handler,
> {
> struct vcpu *curr = current;
> struct hvm_vcpu_io *vio = &curr->arch.hvm_vcpu.hvm_io;
> - const struct hvm_io_ops *ops =
> - (p->type == IOREQ_TYPE_COPY) ?
> - &mmio_ops :
> - &portio_ops;
> + const struct hvm_io_ops *ops = handler->ops;
> int rc = X86EMUL_OKAY, i, step = p->df ? -p->size : p->size;
> uint64_t data;
> uint64_t addr;
> @@ -247,10 +244,6 @@ static int hvm_process_io_intercept(const struct
> hvm_io_handler *handler,
> static const struct hvm_io_handler *hvm_find_io_handler(ioreq_t *p)
> {
> struct domain *curr_d = current->domain;
> - const struct hvm_io_ops *ops =
> - (p->type == IOREQ_TYPE_COPY) ?
> - &mmio_ops :
> - &portio_ops;
> unsigned int i;
>
> BUG_ON((p->type != IOREQ_TYPE_PIO) &&
> @@ -260,6 +253,7 @@ static const struct hvm_io_handler
> *hvm_find_io_handler(ioreq_t *p)
> {
> const struct hvm_io_handler *handler =
> &curr_d->arch.hvm_domain.io_handler[i];
> + const struct hvm_io_ops *ops = handler->ops;
>
> if ( handler->type != p->type )
> continue;
> @@ -275,13 +269,7 @@ int hvm_io_intercept(ioreq_t *p)
> {
> const struct hvm_io_handler *handler;
>
> - if ( p->type == IOREQ_TYPE_PIO )
> - {
> - int rc = dpci_ioport_intercept(p);
> - if ( (rc == X86EMUL_OKAY) || (rc == X86EMUL_RETRY) )
> - return rc;
> - }
> - else if ( p->type == IOREQ_TYPE_COPY )
> + if ( p->type == IOREQ_TYPE_COPY )
> {
> int rc = stdvga_intercept_mmio(p);
> if ( (rc == X86EMUL_OKAY) || (rc == X86EMUL_RETRY) )
> @@ -296,7 +284,7 @@ int hvm_io_intercept(ioreq_t *p)
> return hvm_process_io_intercept(handler, p);
> }
>
> -static struct hvm_io_handler *hvm_next_io_handler(struct domain *d)
> +struct hvm_io_handler *hvm_next_io_handler(struct domain *d)
Instead of introducing this as a static in patch 5, then modifying it
here to export it, introduce it directly as an exported function in 5.
Otherwise, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |