qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Andrey Smetanin <asmetanin@virtuozzo.com>, kvm@vger.kernel.org
Cc: Gleb Natapov <gleb@kernel.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	qemu-devel@nongnu.org, Roman Kagan <rkagan@virtuozzo.com>,
	"Denis V. Lunev" <den@openvz.org>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	"K. Y. Srinivasan" <kys@microsoft.com>
Subject: Re: [Qemu-devel] [PATCH v1 2/7] drivers/hv: Move struct hv_message into UAPI Hyper-V x86 header
Date: Fri, 27 Nov 2015 10:34:51 +0100	[thread overview]
Message-ID: <565823BB.7060904@redhat.com> (raw)
In-Reply-To: <1448464821-8199-3-git-send-email-asmetanin@virtuozzo.com>



On 25/11/2015 16:20, Andrey Smetanin wrote:
> This struct is required for Hyper-V SynIC timers implementation inside KVM
> and for upcoming Hyper-V VMBus support by userspace(QEMU). So place it into
> Hyper-V UAPI header.
> 
> Signed-off-by: Andrey Smetanin <asmetanin@virtuozzo.com>
> Reviewed-by: Roman Kagan <rkagan@virtuozzo.com>
> CC: Gleb Natapov <gleb@kernel.org>
> CC: Paolo Bonzini <pbonzini@redhat.com>
> CC: "K. Y. Srinivasan" <kys@microsoft.com>
> CC: Haiyang Zhang <haiyangz@microsoft.com>
> CC: Vitaly Kuznetsov <vkuznets@redhat.com>
> CC: Roman Kagan <rkagan@virtuozzo.com>
> CC: Denis V. Lunev <den@openvz.org>
> CC: qemu-devel@nongnu.org
> ---
>  arch/x86/include/uapi/asm/hyperv.h | 91 ++++++++++++++++++++++++++++++++++++++
>  drivers/hv/hyperv_vmbus.h          | 91 --------------------------------------
>  2 files changed, 91 insertions(+), 91 deletions(-)
> 
> diff --git a/arch/x86/include/uapi/asm/hyperv.h b/arch/x86/include/uapi/asm/hyperv.h
> index 07981f0..e86d77e 100644
> --- a/arch/x86/include/uapi/asm/hyperv.h
> +++ b/arch/x86/include/uapi/asm/hyperv.h
> @@ -271,4 +271,95 @@ typedef struct _HV_REFERENCE_TSC_PAGE {
>  
>  #define HV_SYNIC_STIMER_COUNT		(4)
>  
> +/* Define synthetic interrupt controller message constants. */
> +#define HV_MESSAGE_SIZE			(256)
> +#define HV_MESSAGE_PAYLOAD_BYTE_COUNT	(240)
> +#define HV_MESSAGE_PAYLOAD_QWORD_COUNT	(30)
> +
> +/* Define hypervisor message types. */
> +enum hv_message_type {
> +	HVMSG_NONE			= 0x00000000,
> +
> +	/* Memory access messages. */
> +	HVMSG_UNMAPPED_GPA		= 0x80000000,
> +	HVMSG_GPA_INTERCEPT		= 0x80000001,
> +
> +	/* Timer notification messages. */
> +	HVMSG_TIMER_EXPIRED			= 0x80000010,
> +
> +	/* Error messages. */
> +	HVMSG_INVALID_VP_REGISTER_VALUE	= 0x80000020,
> +	HVMSG_UNRECOVERABLE_EXCEPTION	= 0x80000021,
> +	HVMSG_UNSUPPORTED_FEATURE		= 0x80000022,
> +
> +	/* Trace buffer complete messages. */
> +	HVMSG_EVENTLOG_BUFFERCOMPLETE	= 0x80000040,
> +
> +	/* Platform-specific processor intercept messages. */
> +	HVMSG_X64_IOPORT_INTERCEPT		= 0x80010000,
> +	HVMSG_X64_MSR_INTERCEPT		= 0x80010001,
> +	HVMSG_X64_CPUID_INTERCEPT		= 0x80010002,
> +	HVMSG_X64_EXCEPTION_INTERCEPT	= 0x80010003,
> +	HVMSG_X64_APIC_EOI			= 0x80010004,
> +	HVMSG_X64_LEGACY_FP_ERROR		= 0x80010005
> +};
> +
> +/* Define synthetic interrupt controller message flags. */
> +union hv_message_flags {
> +	__u8 asu8;
> +	struct {
> +		__u8 msg_pending:1;
> +		__u8 reserved:7;
> +	};
> +};
> +
> +/* Define port identifier type. */
> +union hv_port_id {
> +	__u32 asu32;
> +	struct {
> +		__u32 id:24;
> +		__u32 reserved:8;
> +	} u;
> +};
> +
> +/* Define port type. */
> +enum hv_port_type {
> +	HVPORT_MSG	= 1,
> +	HVPORT_EVENT		= 2,
> +	HVPORT_MONITOR	= 3
> +};
> +
> +/* Define synthetic interrupt controller message header. */
> +struct hv_message_header {
> +	enum hv_message_type message_type;

Do not declare this as an enum, declare it as __u32 to make the size
portable.  It can be a patch on top.

KY, can you ack these two patches?

Paolo

> +	__u8 payload_size;
> +	union hv_message_flags message_flags;
> +	__u8 reserved[2];
> +	union {
> +		__u64 sender;
> +		union hv_port_id port;
> +	};
> +};
> +
> +/* Define timer message payload structure. */
> +struct hv_timer_message_payload {
> +	__u32 timer_index;
> +	__u32 reserved;
> +	__u64 expiration_time;	/* When the timer expired */
> +	__u64 delivery_time;	/* When the message was delivered */
> +};
> +
> +/* Define synthetic interrupt controller message format. */
> +struct hv_message {
> +	struct hv_message_header header;
> +	union {
> +		__u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
> +	} u;
> +};
> +
> +/* Define the synthetic interrupt message page layout. */
> +struct hv_message_page {
> +	struct hv_message sint_message[HV_SYNIC_SINT_COUNT];
> +};
> +
>  #endif
> diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
> index 46e23d1..d22230c 100644
> --- a/drivers/hv/hyperv_vmbus.h
> +++ b/drivers/hv/hyperv_vmbus.h
> @@ -63,10 +63,6 @@ enum hv_cpuid_function {
>  /* Define version of the synthetic interrupt controller. */
>  #define HV_SYNIC_VERSION		(1)
>  
> -/* Define synthetic interrupt controller message constants. */
> -#define HV_MESSAGE_SIZE			(256)
> -#define HV_MESSAGE_PAYLOAD_BYTE_COUNT	(240)
> -#define HV_MESSAGE_PAYLOAD_QWORD_COUNT	(30)
>  #define HV_ANY_VP			(0xFFFFFFFF)
>  
>  /* Define synthetic interrupt controller flag constants. */
> @@ -74,53 +70,9 @@ enum hv_cpuid_function {
>  #define HV_EVENT_FLAGS_BYTE_COUNT	(256)
>  #define HV_EVENT_FLAGS_DWORD_COUNT	(256 / sizeof(u32))
>  
> -/* Define hypervisor message types. */
> -enum hv_message_type {
> -	HVMSG_NONE			= 0x00000000,
> -
> -	/* Memory access messages. */
> -	HVMSG_UNMAPPED_GPA		= 0x80000000,
> -	HVMSG_GPA_INTERCEPT		= 0x80000001,
> -
> -	/* Timer notification messages. */
> -	HVMSG_TIMER_EXPIRED			= 0x80000010,
> -
> -	/* Error messages. */
> -	HVMSG_INVALID_VP_REGISTER_VALUE	= 0x80000020,
> -	HVMSG_UNRECOVERABLE_EXCEPTION	= 0x80000021,
> -	HVMSG_UNSUPPORTED_FEATURE		= 0x80000022,
> -
> -	/* Trace buffer complete messages. */
> -	HVMSG_EVENTLOG_BUFFERCOMPLETE	= 0x80000040,
> -
> -	/* Platform-specific processor intercept messages. */
> -	HVMSG_X64_IOPORT_INTERCEPT		= 0x80010000,
> -	HVMSG_X64_MSR_INTERCEPT		= 0x80010001,
> -	HVMSG_X64_CPUID_INTERCEPT		= 0x80010002,
> -	HVMSG_X64_EXCEPTION_INTERCEPT	= 0x80010003,
> -	HVMSG_X64_APIC_EOI			= 0x80010004,
> -	HVMSG_X64_LEGACY_FP_ERROR		= 0x80010005
> -};
> -
>  /* Define invalid partition identifier. */
>  #define HV_PARTITION_ID_INVALID		((u64)0x0)
>  
> -/* Define port identifier type. */
> -union hv_port_id {
> -	u32 asu32;
> -	struct {
> -		u32 id:24;
> -		u32 reserved:8;
> -	} u ;
> -};
> -
> -/* Define port type. */
> -enum hv_port_type {
> -	HVPORT_MSG	= 1,
> -	HVPORT_EVENT		= 2,
> -	HVPORT_MONITOR	= 3
> -};
> -
>  /* Define port information structure. */
>  struct hv_port_info {
>  	enum hv_port_type port_type;
> @@ -161,27 +113,6 @@ struct hv_connection_info {
>  	};
>  };
>  
> -/* Define synthetic interrupt controller message flags. */
> -union hv_message_flags {
> -	u8 asu8;
> -	struct {
> -		u8 msg_pending:1;
> -		u8 reserved:7;
> -	};
> -};
> -
> -/* Define synthetic interrupt controller message header. */
> -struct hv_message_header {
> -	enum hv_message_type message_type;
> -	u8 payload_size;
> -	union hv_message_flags message_flags;
> -	u8 reserved[2];
> -	union {
> -		u64 sender;
> -		union hv_port_id port;
> -	};
> -};
> -
>  /*
>   * Timer configuration register.
>   */
> @@ -198,31 +129,9 @@ union hv_timer_config {
>  	};
>  };
>  
> -
> -/* Define timer message payload structure. */
> -struct hv_timer_message_payload {
> -	u32 timer_index;
> -	u32 reserved;
> -	u64 expiration_time;	/* When the timer expired */
> -	u64 delivery_time;	/* When the message was delivered */
> -};
> -
> -/* Define synthetic interrupt controller message format. */
> -struct hv_message {
> -	struct hv_message_header header;
> -	union {
> -		u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT];
> -	} u ;
> -};
> -
>  /* Define the number of message buffers associated with each port. */
>  #define HV_PORT_MESSAGE_BUFFER_COUNT	(16)
>  
> -/* Define the synthetic interrupt message page layout. */
> -struct hv_message_page {
> -	struct hv_message sint_message[HV_SYNIC_SINT_COUNT];
> -};
> -
>  /* Define the synthetic interrupt controller event flags format. */
>  union hv_synic_event_flags {
>  	u8 flags8[HV_EVENT_FLAGS_BYTE_COUNT];
> 

  reply	other threads:[~2015-11-27  9:34 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-25 15:20 [Qemu-devel] [PATCH v1 0/7] KVM: Hyper-V SynIC timers Andrey Smetanin
2015-11-25 15:20 ` [Qemu-devel] [PATCH v1 1/7] drivers/hv: Move HV_SYNIC_STIMER_COUNT into Hyper-V UAPI x86 header Andrey Smetanin
2015-11-27 17:27   ` KY Srinivasan
2015-11-25 15:20 ` [Qemu-devel] [PATCH v1 2/7] drivers/hv: Move struct hv_message into UAPI Hyper-V " Andrey Smetanin
2015-11-27  9:34   ` Paolo Bonzini [this message]
2015-11-27 11:21     ` Andrey Smetanin
2015-11-27 17:34     ` KY Srinivasan
2015-11-25 15:20 ` [Qemu-devel] [PATCH v1 3/7] kvm/x86: Rearrange func's declarations inside Hyper-V header Andrey Smetanin
2015-11-25 15:20 ` [Qemu-devel] [PATCH v1 4/7] kvm/x86: Added Hyper-V vcpu_to_hv_vcpu()/hv_vcpu_to_vcpu() helpers Andrey Smetanin
2015-11-25 15:20 ` [Qemu-devel] [PATCH v1 5/7] kvm/x86: Hyper-V internal helper to read MSR HV_X64_MSR_TIME_REF_COUNT Andrey Smetanin
2015-11-25 15:20 ` [Qemu-devel] [PATCH v1 6/7] kvm/x86: Hyper-V SynIC message slot pending clearing at SINT ack Andrey Smetanin
2015-11-25 16:52   ` Paolo Bonzini
2015-11-25 16:55     ` Andrey Smetanin
2015-11-25 17:14       ` Paolo Bonzini
2015-11-26  9:06         ` Andrey Smetanin
2015-11-26 14:43           ` Paolo Bonzini
2015-11-26 15:53             ` Andrey Smetanin
2015-11-26 15:56               ` Paolo Bonzini
2015-11-27  8:16   ` Roman Kagan
2015-11-25 15:20 ` [Qemu-devel] [PATCH v1 7/7] kvm/x86: Hyper-V SynIC timers Andrey Smetanin
2015-11-27  8:12   ` Roman Kagan
2015-11-27 10:49     ` Paolo Bonzini
2015-11-27 11:24       ` Andrey Smetanin
2015-11-30 12:17       ` Roman Kagan
2015-11-26  5:28 ` [Qemu-devel] [PATCH v1 0/7] KVM: " Wanpeng Li
2015-11-26  8:34   ` Andrey Smetanin
2015-11-26  9:03     ` Wanpeng Li
2015-12-01 10:12     ` Wanpeng Li
2015-12-01 10:28       ` Denis V. Lunev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=565823BB.7060904@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=asmetanin@virtuozzo.com \
    --cc=den@openvz.org \
    --cc=gleb@kernel.org \
    --cc=haiyangz@microsoft.com \
    --cc=kvm@vger.kernel.org \
    --cc=kys@microsoft.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rkagan@virtuozzo.com \
    --cc=vkuznets@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).