|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] [PATCH] xen: introduce HVM_PARAM_BUFIOREQ_EVTCHN
On 15/11/2011 13:53, "Stefano Stabellini" <Stefano.Stabellini@xxxxxxxxxxxxx>
wrote:
> From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
>
> Introduce an event channel for buffered io event notifications,
> advertise the port number using an hvm param.
> This way the device model is not forced to check the buffered io page
> for data several times a second for the entire life of the VM (buffered
> io is mostly used for stdvga emulation in Xen that is switched off after
> the guest goes into graphical mode).
It doesn't look like this evtchn can be allocated and specified from outside
the hypervisor. Hence HVMOP_set_param(BUFIOREQ_EVTCHN) should fail with
-EINVAL or similar.
-- Keir
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> ---
> xen/arch/x86/hvm/hvm.c | 10 ++++++++++
> xen/arch/x86/hvm/io.c | 2 ++
> xen/include/public/hvm/params.h | 3 ++-
> 3 files changed, 14 insertions(+), 1 deletions(-)
>
> diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
> index ab7763b..dc01537 100644
> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -972,6 +972,16 @@ int hvm_vcpu_initialise(struct vcpu *v)
>
> /* Register ioreq event channel. */
> v->arch.hvm_vcpu.xen_port = rc;
> +
> + if ( v->vcpu_id == 0 )
> + {
> + /* Create bufioreq event channel. */
> + rc = alloc_unbound_xen_event_channel(v, 0);
> + if ( rc < 0 )
> + goto fail2;
> + v->domain->arch.hvm_domain.params[HVM_PARAM_BUFIOREQ_EVTCHN] = rc;
> + }
> +
> spin_lock(&v->domain->arch.hvm_domain.ioreq.lock);
> if ( v->domain->arch.hvm_domain.ioreq.va != NULL )
> get_ioreq(v)->vp_eport = v->arch.hvm_vcpu.xen_port;
> diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c
> index 7ebefc7..41a2ede 100644
> --- a/xen/arch/x86/hvm/io.c
> +++ b/xen/arch/x86/hvm/io.c
> @@ -118,6 +118,8 @@ int hvm_buffered_io_send(ioreq_t *p)
> wmb();
> pg->write_pointer += qw ? 2 : 1;
>
> + notify_via_xen_event_channel(v->domain,
> + v->domain->arch.hvm_domain.params[HVM_PARAM_BUFIOREQ_EVTCHN]);
> spin_unlock(&iorp->lock);
>
> return 1;
> diff --git a/xen/include/public/hvm/params.h b/xen/include/public/hvm/params.h
> index 1c5a1a9..6699788 100644
> --- a/xen/include/public/hvm/params.h
> +++ b/xen/include/public/hvm/params.h
> @@ -52,6 +52,7 @@
> #define HVM_PARAM_IOREQ_PFN 5
>
> #define HVM_PARAM_BUFIOREQ_PFN 6
> +#define HVM_PARAM_BUFIOREQ_EVTCHN 26
>
> #ifdef __ia64__
>
> @@ -141,6 +142,6 @@
> /* Boolean: Enable nestedhvm (hvm only) */
> #define HVM_PARAM_NESTEDHVM 24
>
> -#define HVM_NR_PARAMS 26
> +#define HVM_NR_PARAMS 27
>
> #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|