From: Andrey Smetanin <asmetanin@virtuozzo.com>
To: Paolo Bonzini <pbonzini@redhat.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 14:21:58 +0300 [thread overview]
Message-ID: <56583CD6.8030001@virtuozzo.com> (raw)
In-Reply-To: <565823BB.7060904@redhat.com>
On 11/27/2015 12:34 PM, Paolo Bonzini wrote:
>
>
> 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.
Ok, I'll prepare such patch.
>
> 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];
>>
next prev parent reply other threads:[~2015-11-27 11:22 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
2015-11-27 11:21 ` Andrey Smetanin [this message]
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=56583CD6.8030001@virtuozzo.com \
--to=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=pbonzini@redhat.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).