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

Re: [Xen-devel] [PATCH] x86: Update HVM_PARAM_CALLBACK_IRQ



On Mon, Feb 29, 2016 at 03:39:36PM -0500, Konrad Rzeszutek Wilk wrote:
> Couple of updates:
>  - Add an macro to make it easier to use the vector callback.
> 
>  - Fix the odditity in Xen internal usage of an enum which offset
>    by one compared to the #defines. Make it the same.
> 
>  - This also clears up the printing of the Callback in the
>    irq_dump() to match up with the #defines.
> 
> Reported-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>

CC-ing Stefano.
> ---
>  xen/arch/x86/hvm/irq.c          |  2 +-
>  xen/include/asm-x86/hvm/irq.h   | 12 ++++++++----
>  xen/include/public/hvm/hvm_op.h |  3 ++-
>  xen/include/public/hvm/params.h | 15 +++++++++++++++
>  4 files changed, 26 insertions(+), 6 deletions(-)
> 
> diff --git a/xen/arch/x86/hvm/irq.c b/xen/arch/x86/hvm/irq.c
> index 5323d7c..0c6ead4 100644
> --- a/xen/arch/x86/hvm/irq.c
> +++ b/xen/arch/x86/hvm/irq.c
> @@ -325,7 +325,7 @@ void hvm_set_callback_via(struct domain *d, uint64_t via)
>      unsigned int gsi=0, pdev=0, pintx=0;
>      uint8_t via_type;
>  
> -    via_type = (uint8_t)(via >> 56) + 1;
> +    via_type = (uint8_t)(via >> HVM_PARAM_CALLBACK_TYPE_SHIFT);
>      if ( ((via_type == HVMIRQ_callback_gsi) && (via == 0)) ||
>           (via_type > HVMIRQ_callback_vector) )
>          via_type = HVMIRQ_callback_none;
> diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/include/asm-x86/hvm/irq.h
> index 73b8fb0..2a301db 100644
> --- a/xen/include/asm-x86/hvm/irq.h
> +++ b/xen/include/asm-x86/hvm/irq.h
> @@ -26,6 +26,8 @@
>  #include <asm/hvm/vpic.h>
>  #include <asm/hvm/vioapic.h>
>  
> +#include <public/hvm/params.h>
> +
>  struct hvm_irq {
>      /*
>       * Virtual interrupt wires for a single PCI bus.
> @@ -50,11 +52,13 @@ struct hvm_irq {
>      /* Virtual interrupt and via-link for paravirtual platform driver. */
>      uint32_t callback_via_asserted;
>      union {
> +        /* These MUST match with HVM_PARAM_CALLBACK_IRQ types. */
>          enum {
> -            HVMIRQ_callback_none,
> -            HVMIRQ_callback_gsi,
> -            HVMIRQ_callback_pci_intx,
> -            HVMIRQ_callback_vector
> +            HVMIRQ_callback_gsi = HVM_PARAM_CALLBACK_TYPE_GSI,
> +            HVMIRQ_callback_pci_intx = HVM_PARAM_CALLBACK_TYPE_PCI_INTX,
> +            HVMIRQ_callback_vector = HVM_PARAM_CALLBACK_TYPE_VECTOR,
> +            /* Will change if we add more types. */
> +            HVMIRQ_callback_none = HVM_PARAM_CALLBACK_TYPE_NUM,
>          } callback_via_type;
>      };
>      union {
> diff --git a/xen/include/public/hvm/hvm_op.h b/xen/include/public/hvm/hvm_op.h
> index 1606185..5908f39 100644
> --- a/xen/include/public/hvm/hvm_op.h
> +++ b/xen/include/public/hvm/hvm_op.h
> @@ -386,7 +386,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_ioreq_server_state_t);
>   *                                 channel upcalls on the specified <vcpu>. 
> If set,
>   *                                 this vector will be used in preference to 
> the
>   *                                 domain global callback via (see
> - *                                 HVM_PARAM_CALLBACK_IRQ).
> + *                                 HVM_PARAM_CALLBACK_IRQ and
> + *                                 HVM_PARAM_CALLBACK_VECTOR).
>   */
>  #define HVMOP_set_evtchn_upcall_vector 23
>  struct xen_hvm_evtchn_upcall_vector {
> diff --git a/xen/include/public/hvm/params.h b/xen/include/public/hvm/params.h
> index 73d4718..5c7fbc5 100644
> --- a/xen/include/public/hvm/params.h
> +++ b/xen/include/public/hvm/params.h
> @@ -56,6 +56,21 @@
>   */
>  
>  /*
> + * In the future this may change.
> + */
> +#define HVM_PARAM_CALLBACK_TYPE_NUM      HVM_PARAM_CALLBACK_TYPE_VECTOR + 1
> +/*
> + * The val[63:56] convenience shift.
> + */
> +#define HVM_PARAM_CALLBACK_TYPE_SHIFT 56
> +
> +/*
> + * Wrapper around for HVM_PARAM_CALLBACK_TYPE_VECTOR.
> + */
> +#define HVM_PARAM_CALLBACK_VECTOR(x) \
> +            (((uint64_t)HVM_PARAM_CALLBACK_TYPE_VECTOR) << \
> +                        HVM_PARAM_CALLBACK_TYPE_SHIFT | (x))
> +/*
>   * These are not used by Xen. They are here for convenience of HVM-guest
>   * xenbus implementations.
>   */
> -- 
> 2.4.3
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.