qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] xen: Fix event channel interface for XenDevice-


From: Paul Durrant
Subject: Re: [Qemu-devel] [PATCH] xen: Fix event channel interface for XenDevice-s
Date: Fri, 11 Jan 2019 20:16:53 +0000

> -----Original Message-----
> From: Anthony PERARD [mailto:address@hidden
> Sent: 11 January 2019 18:10
> To: address@hidden
> Cc: Anthony Perard <address@hidden>; Stefano Stabellini
> <address@hidden>; Paul Durrant <address@hidden>; open
> list:X86 <address@hidden>
> Subject: [PATCH] xen: Fix event channel interface for XenDevice-s
> 
> Patch "xen: add event channel interface for XenDevice-s" makes use of
> the type xenevtchn_port_or_error_t, but this isn't avaiable before Xen
> 4.7. Also the function xen_device_bind_event_channel assign the return
> value of xenevtchn_bind_interdomain to channel->local_port but check the
> result for error with xendev->local_port.
> 
> Fix by:
> - removing local_port from struct XenDevice as it isn't use anywere.
> - adding a compatibility typedef for xenevtchn_port_or_error_t for Xen
>   4.6 and earlier.
> 
> As extra, replace the type of XenEventChannel->local_port by
> evtchn_port_t.
> 
> Signed-off-by: Anthony PERARD <address@hidden>

Reviewed-by: Paul Durrant <address@hidden>

> ---
>  hw/xen/xen-bus.c            | 12 +++++++-----
>  include/hw/xen/xen-bus.h    |  1 -
>  include/hw/xen/xen_common.h |  1 +
>  3 files changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c
> index f90bcf2342..3aeccec69c 100644
> --- a/hw/xen/xen-bus.c
> +++ b/hw/xen/xen-bus.c
> @@ -917,7 +917,7 @@ void xen_device_copy_grant_refs(XenDevice *xendev,
> bool to_domain,
>  }
> 
>  struct XenEventChannel {
> -    unsigned int local_port;
> +    evtchn_port_t local_port;
>      XenEventHandler handler;
>      void *opaque;
>      Notifier notifier;
> @@ -939,17 +939,19 @@ XenEventChannel
> *xen_device_bind_event_channel(XenDevice *xendev,
>                                                 void *opaque, Error
> **errp)
>  {
>      XenEventChannel *channel = g_new0(XenEventChannel, 1);
> +    xenevtchn_port_or_error_t local_port;
> 
> -    channel->local_port = xenevtchn_bind_interdomain(xendev->xeh,
> -                                                     xendev->frontend_id,
> -                                                     port);
> -    if (xendev->local_port < 0) {
> +    local_port = xenevtchn_bind_interdomain(xendev->xeh,
> +                                            xendev->frontend_id,
> +                                            port);
> +    if (local_port < 0) {
>          error_setg_errno(errp, errno, "xenevtchn_bind_interdomain
> failed");
> 
>          g_free(channel);
>          return NULL;
>      }
> 
> +    channel->local_port = local_port;
>      channel->handler = handler;
>      channel->opaque = opaque;
>      channel->notifier.notify = event_notify;
> diff --git a/include/hw/xen/xen-bus.h b/include/hw/xen/xen-bus.h
> index e55a5de5f1..3183f10e3c 100644
> --- a/include/hw/xen/xen-bus.h
> +++ b/include/hw/xen/xen-bus.h
> @@ -29,7 +29,6 @@ typedef struct XenDevice {
>      xengnttab_handle *xgth;
>      bool feature_grant_copy;
>      xenevtchn_handle *xeh;
> -    xenevtchn_port_or_error_t local_port;
>      NotifierList event_notifiers;
>  } XenDevice;
> 
> diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h
> index 2b91d199a1..9a8155e172 100644
> --- a/include/hw/xen/xen_common.h
> +++ b/include/hw/xen/xen_common.h
> @@ -32,6 +32,7 @@ extern xc_interface *xen_xc;
>  typedef xc_interface xenforeignmemory_handle;
>  typedef xc_evtchn xenevtchn_handle;
>  typedef xc_gnttab xengnttab_handle;
> +typedef evtchn_port_or_error_t xenevtchn_port_or_error_t;
> 
>  #define xenevtchn_open(l, f) xc_evtchn_open(l, f);
>  #define xenevtchn_close(h) xc_evtchn_close(h)
> --
> Anthony PERARD




reply via email to

[Prev in Thread] Current Thread [Next in Thread]