From: Roman Kagan <rkagan@virtuozzo.com> To: "Paolo Bonzini" <pbonzini@redhat.com>, "Radim Krčmář" <rkrcmar@redhat.com>, "K. Y. Srinivasan" <kys@microsoft.com>, "Vitaly Kuznetsov" <vkuznets@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>, <x86@kernel.org>, Haiyang Zhang <haiyangz@microsoft.com>, <kvm@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <devel@linuxdriverproject.org>, "Denis V . Lunev" <den@openvz.org>, Roman Kagan <rkagan@virtuozzo.com> Subject: [PATCH 10/15] hyperv: uapi-fy PostMessage and SignalEvent hypercall structures Date: Tue, 20 Dec 2016 18:55:57 +0300 [thread overview] Message-ID: <20161220155602.6298-11-rkagan@virtuozzo.com> (raw) In-Reply-To: <20161220155602.6298-1-rkagan@virtuozzo.com> Expose structures used for PostMessage and SignalEvent hypercalls in a uapi header. While doing so, simplify alignment handling and drop unnecessary complications in the connectionid field. Signed-off-by: Roman Kagan <rkagan@virtuozzo.com> --- arch/x86/include/uapi/asm/hyperv.h | 18 ++++++++++++++++++ drivers/hv/hyperv_vmbus.h | 16 ++-------------- include/linux/hyperv.h | 24 +----------------------- drivers/hv/channel_mgmt.c | 14 ++++---------- drivers/hv/connection.c | 9 +++------ drivers/hv/hv.c | 2 +- drivers/hv/vmbus_drv.c | 2 +- 7 files changed, 30 insertions(+), 55 deletions(-) diff --git a/arch/x86/include/uapi/asm/hyperv.h b/arch/x86/include/uapi/asm/hyperv.h index 749fbb25..eb8d42a 100644 --- a/arch/x86/include/uapi/asm/hyperv.h +++ b/arch/x86/include/uapi/asm/hyperv.h @@ -378,4 +378,22 @@ struct hv_synic_event_flags_page { struct hv_synic_event_flags sintevent_flags[HV_SYNIC_SINT_COUNT]; }; +#define HV_HYPERCALL_PARAM_ALIGN 8 + +/* Definition of the hv_post_message hypercall input structure. */ +struct hv_input_post_message { + __u32 connectionid; + __u32 reserved; + __u32 message_type; + __u32 payload_size; + __u64 payload[HV_MESSAGE_PAYLOAD_BYTE_COUNT]; +} __attribute__((aligned(HV_HYPERCALL_PARAM_ALIGN))); + +/* Definition of the hv_signal_event hypercall input structure. */ +struct hv_input_signal_event { + __u32 connectionid; + __u16 flag_number; + __u16 rsvdz; +} __attribute__((aligned(HV_HYPERCALL_PARAM_ALIGN))); + #endif diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h index ac73832..a96f021 100644 --- a/drivers/hv/hyperv_vmbus.h +++ b/drivers/hv/hyperv_vmbus.h @@ -104,7 +104,7 @@ union hv_monitor_trigger_group { }; struct hv_monitor_parameter { - union hv_connection_id connectionid; + u32 connectionid; u16 flagnumber; u16 rsvdz; }; @@ -154,15 +154,6 @@ struct hv_monitor_page { u8 rsvdz4[1984]; }; -/* Definition of the hv_post_message hypercall input structure. */ -struct hv_input_post_message { - union hv_connection_id connectionid; - u32 reserved; - u32 message_type; - u32 payload_size; - u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT]; -}; - /* * Versioning definitions used for guests reporting themselves to the * hypervisor, and visa versa. @@ -248,9 +239,6 @@ static inline __u64 generate_guest_id(__u8 d_info1, __u32 kernel_version, #define HV_CAPS_MAX 8 -#define HV_HYPERCALL_PARAM_ALIGN sizeof(u64) - - /* Service definitions */ #define HV_SERVICE_PARENT_PORT (0) @@ -351,7 +339,7 @@ extern int hv_init(void); extern void hv_cleanup(bool crash); -extern int hv_post_message(union hv_connection_id connection_id, +extern int hv_post_message(u32 connection_id, enum hv_message_type message_type, void *payload, size_t payload_size); diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 42fe43f..e92446e 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h @@ -648,27 +648,6 @@ struct vmbus_close_msg { struct vmbus_channel_close_channel msg; }; -/* Define connection identifier type. */ -union hv_connection_id { - u32 asu32; - struct { - u32 id:24; - u32 reserved:8; - } u; -}; - -/* Definition of the hv_signal_event hypercall input structure. */ -struct hv_input_signal_event { - union hv_connection_id connectionid; - u16 flag_number; - u16 rsvdz; -}; - -struct hv_input_signal_event_buffer { - u64 align8; - struct hv_input_signal_event event; -}; - enum hv_signal_policy { HV_SIGNAL_POLICY_DEFAULT = 0, HV_SIGNAL_POLICY_EXPLICIT, @@ -755,8 +734,7 @@ struct vmbus_channel { bool batched_reading; bool is_dedicated_interrupt; - struct hv_input_signal_event_buffer sig_buf; - struct hv_input_signal_event *sig_event; + struct hv_input_signal_event sig_event; /* * Starting with win8, this field will be used to specify diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index 49eaae2..4a5cc11 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -766,20 +766,14 @@ static void vmbus_onoffer(struct vmbus_channel_message_header *hdr) /* * Setup state for signalling the host. */ - newchannel->sig_event = (struct hv_input_signal_event *) - (ALIGN((unsigned long) - &newchannel->sig_buf, - HV_HYPERCALL_PARAM_ALIGN)); - - newchannel->sig_event->connectionid.asu32 = 0; - newchannel->sig_event->connectionid.u.id = VMBUS_EVENT_CONNECTION_ID; - newchannel->sig_event->flag_number = 0; - newchannel->sig_event->rsvdz = 0; + newchannel->sig_event.connectionid = VMBUS_EVENT_CONNECTION_ID; + newchannel->sig_event.flag_number = 0; + newchannel->sig_event.rsvdz = 0; if (vmbus_proto_version != VERSION_WS2008) { newchannel->is_dedicated_interrupt = (offer->is_dedicated_interrupt != 0); - newchannel->sig_event->connectionid.u.id = + newchannel->sig_event.connectionid = offer->connection_id; } diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c index d38b27f..16ae977 100644 --- a/drivers/hv/connection.c +++ b/drivers/hv/connection.c @@ -418,21 +418,18 @@ void vmbus_on_event(unsigned long data) */ int vmbus_post_msg(void *buffer, size_t buflen) { - union hv_connection_id conn_id; int ret = 0; int retries = 0; u32 usec = 1; - conn_id.asu32 = 0; - conn_id.u.id = VMBUS_MESSAGE_CONNECTION_ID; - /* * hv_post_message() can have transient failures because of * insufficient resources. Retry the operation a couple of * times before giving up. */ while (retries < 20) { - ret = hv_post_message(conn_id, HVMSG_VMBUS, buffer, buflen); + ret = hv_post_message(VMBUS_MESSAGE_CONNECTION_ID, HVMSG_VMBUS, + buffer, buflen); switch (ret) { case HV_STATUS_INVALID_CONNECTION_ID: @@ -472,6 +469,6 @@ void vmbus_set_event(struct vmbus_channel *channel) set_bit(child_relid, (unsigned long *)vmbus_connection.send_int_page); - hv_do_hypercall(HVCALL_SIGNAL_EVENT, channel->sig_event, NULL); + hv_do_hypercall(HVCALL_SIGNAL_EVENT, &channel->sig_event, NULL); } EXPORT_SYMBOL_GPL(vmbus_set_event); diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index 7d2a3d1..b9f50de 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -297,7 +297,7 @@ void hv_cleanup(bool crash) * * This involves a hypercall. */ -int hv_post_message(union hv_connection_id connection_id, +int hv_post_message(u32 connection_id, enum hv_message_type message_type, void *payload, size_t payload_size) { diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 7564a7b..f6b626b 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -159,7 +159,7 @@ static u32 channel_conn_id(struct vmbus_channel *channel, { u8 monitor_group = channel_monitor_group(channel); u8 monitor_offset = channel_monitor_offset(channel); - return monitor_page->parameter[monitor_group][monitor_offset].connectionid.u.id; + return monitor_page->parameter[monitor_group][monitor_offset].connectionid; } static ssize_t id_show(struct device *dev, struct device_attribute *dev_attr, -- 2.9.3
WARNING: multiple messages have this Message-ID (diff)
From: Roman Kagan <rkagan@virtuozzo.com> To: "Paolo Bonzini" <pbonzini@redhat.com>, "Radim Krčmář" <rkrcmar@redhat.com>, "K. Y. Srinivasan" <kys@microsoft.com>, "Vitaly Kuznetsov" <vkuznets@redhat.com> Cc: kvm@vger.kernel.org, "Denis V . Lunev" <den@openvz.org>, Haiyang Zhang <haiyangz@microsoft.com>, x86@kernel.org, linux-kernel@vger.kernel.org, Ingo Molnar <mingo@redhat.com>, Roman Kagan <rkagan@virtuozzo.com>, "H. Peter Anvin" <hpa@zytor.com>, devel@linuxdriverproject.org, Thomas Gleixner <tglx@linutronix.de> Subject: [PATCH 10/15] hyperv: uapi-fy PostMessage and SignalEvent hypercall structures Date: Tue, 20 Dec 2016 18:55:57 +0300 [thread overview] Message-ID: <20161220155602.6298-11-rkagan@virtuozzo.com> (raw) In-Reply-To: <20161220155602.6298-1-rkagan@virtuozzo.com> Expose structures used for PostMessage and SignalEvent hypercalls in a uapi header. While doing so, simplify alignment handling and drop unnecessary complications in the connectionid field. Signed-off-by: Roman Kagan <rkagan@virtuozzo.com> --- arch/x86/include/uapi/asm/hyperv.h | 18 ++++++++++++++++++ drivers/hv/hyperv_vmbus.h | 16 ++-------------- include/linux/hyperv.h | 24 +----------------------- drivers/hv/channel_mgmt.c | 14 ++++---------- drivers/hv/connection.c | 9 +++------ drivers/hv/hv.c | 2 +- drivers/hv/vmbus_drv.c | 2 +- 7 files changed, 30 insertions(+), 55 deletions(-) diff --git a/arch/x86/include/uapi/asm/hyperv.h b/arch/x86/include/uapi/asm/hyperv.h index 749fbb25..eb8d42a 100644 --- a/arch/x86/include/uapi/asm/hyperv.h +++ b/arch/x86/include/uapi/asm/hyperv.h @@ -378,4 +378,22 @@ struct hv_synic_event_flags_page { struct hv_synic_event_flags sintevent_flags[HV_SYNIC_SINT_COUNT]; }; +#define HV_HYPERCALL_PARAM_ALIGN 8 + +/* Definition of the hv_post_message hypercall input structure. */ +struct hv_input_post_message { + __u32 connectionid; + __u32 reserved; + __u32 message_type; + __u32 payload_size; + __u64 payload[HV_MESSAGE_PAYLOAD_BYTE_COUNT]; +} __attribute__((aligned(HV_HYPERCALL_PARAM_ALIGN))); + +/* Definition of the hv_signal_event hypercall input structure. */ +struct hv_input_signal_event { + __u32 connectionid; + __u16 flag_number; + __u16 rsvdz; +} __attribute__((aligned(HV_HYPERCALL_PARAM_ALIGN))); + #endif diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h index ac73832..a96f021 100644 --- a/drivers/hv/hyperv_vmbus.h +++ b/drivers/hv/hyperv_vmbus.h @@ -104,7 +104,7 @@ union hv_monitor_trigger_group { }; struct hv_monitor_parameter { - union hv_connection_id connectionid; + u32 connectionid; u16 flagnumber; u16 rsvdz; }; @@ -154,15 +154,6 @@ struct hv_monitor_page { u8 rsvdz4[1984]; }; -/* Definition of the hv_post_message hypercall input structure. */ -struct hv_input_post_message { - union hv_connection_id connectionid; - u32 reserved; - u32 message_type; - u32 payload_size; - u64 payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT]; -}; - /* * Versioning definitions used for guests reporting themselves to the * hypervisor, and visa versa. @@ -248,9 +239,6 @@ static inline __u64 generate_guest_id(__u8 d_info1, __u32 kernel_version, #define HV_CAPS_MAX 8 -#define HV_HYPERCALL_PARAM_ALIGN sizeof(u64) - - /* Service definitions */ #define HV_SERVICE_PARENT_PORT (0) @@ -351,7 +339,7 @@ extern int hv_init(void); extern void hv_cleanup(bool crash); -extern int hv_post_message(union hv_connection_id connection_id, +extern int hv_post_message(u32 connection_id, enum hv_message_type message_type, void *payload, size_t payload_size); diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 42fe43f..e92446e 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h @@ -648,27 +648,6 @@ struct vmbus_close_msg { struct vmbus_channel_close_channel msg; }; -/* Define connection identifier type. */ -union hv_connection_id { - u32 asu32; - struct { - u32 id:24; - u32 reserved:8; - } u; -}; - -/* Definition of the hv_signal_event hypercall input structure. */ -struct hv_input_signal_event { - union hv_connection_id connectionid; - u16 flag_number; - u16 rsvdz; -}; - -struct hv_input_signal_event_buffer { - u64 align8; - struct hv_input_signal_event event; -}; - enum hv_signal_policy { HV_SIGNAL_POLICY_DEFAULT = 0, HV_SIGNAL_POLICY_EXPLICIT, @@ -755,8 +734,7 @@ struct vmbus_channel { bool batched_reading; bool is_dedicated_interrupt; - struct hv_input_signal_event_buffer sig_buf; - struct hv_input_signal_event *sig_event; + struct hv_input_signal_event sig_event; /* * Starting with win8, this field will be used to specify diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index 49eaae2..4a5cc11 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -766,20 +766,14 @@ static void vmbus_onoffer(struct vmbus_channel_message_header *hdr) /* * Setup state for signalling the host. */ - newchannel->sig_event = (struct hv_input_signal_event *) - (ALIGN((unsigned long) - &newchannel->sig_buf, - HV_HYPERCALL_PARAM_ALIGN)); - - newchannel->sig_event->connectionid.asu32 = 0; - newchannel->sig_event->connectionid.u.id = VMBUS_EVENT_CONNECTION_ID; - newchannel->sig_event->flag_number = 0; - newchannel->sig_event->rsvdz = 0; + newchannel->sig_event.connectionid = VMBUS_EVENT_CONNECTION_ID; + newchannel->sig_event.flag_number = 0; + newchannel->sig_event.rsvdz = 0; if (vmbus_proto_version != VERSION_WS2008) { newchannel->is_dedicated_interrupt = (offer->is_dedicated_interrupt != 0); - newchannel->sig_event->connectionid.u.id = + newchannel->sig_event.connectionid = offer->connection_id; } diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c index d38b27f..16ae977 100644 --- a/drivers/hv/connection.c +++ b/drivers/hv/connection.c @@ -418,21 +418,18 @@ void vmbus_on_event(unsigned long data) */ int vmbus_post_msg(void *buffer, size_t buflen) { - union hv_connection_id conn_id; int ret = 0; int retries = 0; u32 usec = 1; - conn_id.asu32 = 0; - conn_id.u.id = VMBUS_MESSAGE_CONNECTION_ID; - /* * hv_post_message() can have transient failures because of * insufficient resources. Retry the operation a couple of * times before giving up. */ while (retries < 20) { - ret = hv_post_message(conn_id, HVMSG_VMBUS, buffer, buflen); + ret = hv_post_message(VMBUS_MESSAGE_CONNECTION_ID, HVMSG_VMBUS, + buffer, buflen); switch (ret) { case HV_STATUS_INVALID_CONNECTION_ID: @@ -472,6 +469,6 @@ void vmbus_set_event(struct vmbus_channel *channel) set_bit(child_relid, (unsigned long *)vmbus_connection.send_int_page); - hv_do_hypercall(HVCALL_SIGNAL_EVENT, channel->sig_event, NULL); + hv_do_hypercall(HVCALL_SIGNAL_EVENT, &channel->sig_event, NULL); } EXPORT_SYMBOL_GPL(vmbus_set_event); diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index 7d2a3d1..b9f50de 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -297,7 +297,7 @@ void hv_cleanup(bool crash) * * This involves a hypercall. */ -int hv_post_message(union hv_connection_id connection_id, +int hv_post_message(u32 connection_id, enum hv_message_type message_type, void *payload, size_t payload_size) { diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 7564a7b..f6b626b 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -159,7 +159,7 @@ static u32 channel_conn_id(struct vmbus_channel *channel, { u8 monitor_group = channel_monitor_group(channel); u8 monitor_offset = channel_monitor_offset(channel); - return monitor_page->parameter[monitor_group][monitor_offset].connectionid.u.id; + return monitor_page->parameter[monitor_group][monitor_offset].connectionid; } static ssize_t id_show(struct device *dev, struct device_attribute *dev_attr, -- 2.9.3
next prev parent reply other threads:[~2016-12-20 19:13 UTC|newest] Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-12-20 15:55 [PATCH 00/15] hyperv: more stuff to uapi + cleanup Roman Kagan 2016-12-20 15:55 ` [PATCH 01/15] hyperv: consolidate TSC ref page definitions Roman Kagan 2016-12-20 20:57 ` KY Srinivasan 2016-12-21 6:25 ` Roman Kagan 2016-12-21 6:25 ` Roman Kagan 2016-12-20 15:55 ` [PATCH 02/15] hyperv: uapi-fy synic event flags definitions Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-20 17:24 ` Stephen Hemminger 2016-12-20 17:24 ` Stephen Hemminger 2016-12-21 6:33 ` Roman Kagan 2016-12-21 6:33 ` Roman Kagan 2016-12-21 10:58 ` kbuild test robot 2016-12-21 18:58 ` KY Srinivasan 2016-12-21 18:58 ` KY Srinivasan 2016-12-20 15:55 ` [PATCH 03/15] hyperv: use standard bitops Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-21 12:00 ` Olaf Hering 2016-12-21 13:23 ` Roman Kagan 2016-12-22 12:33 ` Paolo Bonzini 2016-12-21 19:08 ` KY Srinivasan 2016-12-21 19:08 ` KY Srinivasan 2016-12-20 15:55 ` [PATCH 04/15] hyperv: define VMBus message type Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-20 15:55 ` [PATCH 05/15] hyperv: GFP_ATOMIC -> GFP_KERNEL Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-20 15:55 ` [PATCH 06/15] hyperv: avoid unnecessary vmalloc Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-21 19:19 ` KY Srinivasan 2016-12-20 15:55 ` [PATCH 07/15] hyperv: dedup cpuid definitions Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-20 15:55 ` [PATCH 08/15] hyperv: dedup crash msr related definitions Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-20 15:55 ` [PATCH 09/15] hyperv: unify Hyper-V msr definitions Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-20 15:55 ` Roman Kagan [this message] 2016-12-20 15:55 ` [PATCH 10/15] hyperv: uapi-fy PostMessage and SignalEvent hypercall structures Roman Kagan 2016-12-21 19:27 ` KY Srinivasan 2016-12-20 15:55 ` [PATCH 11/15] hyperv: uapi-fy monitored notification structures Roman Kagan 2016-12-20 15:55 ` Roman Kagan 2016-12-20 15:55 ` [PATCH 12/15] hyperv: move VMBus connection ids to uapi Roman Kagan 2016-12-20 17:25 ` Stephen Hemminger 2016-12-21 6:29 ` Roman Kagan 2016-12-21 6:29 ` Roman Kagan 2016-12-21 12:18 ` Christoph Hellwig 2016-12-21 12:59 ` Roman Kagan 2016-12-21 12:59 ` Roman Kagan 2016-12-21 14:26 ` Christoph Hellwig 2016-12-21 14:39 ` Roman Kagan 2016-12-21 14:39 ` Roman Kagan 2016-12-21 15:39 ` Paolo Bonzini 2016-12-21 15:43 ` Christoph Hellwig 2016-12-21 15:43 ` Christoph Hellwig 2016-12-21 17:25 ` Paolo Bonzini 2016-12-21 17:50 ` Stephen Hemminger 2016-12-21 17:50 ` Stephen Hemminger 2016-12-21 17:53 ` Paolo Bonzini 2016-12-21 17:53 ` Paolo Bonzini 2016-12-21 17:58 ` Christoph Hellwig 2016-12-21 17:58 ` Christoph Hellwig 2016-12-21 18:02 ` Stephen Hemminger 2016-12-21 18:02 ` Stephen Hemminger 2016-12-21 19:54 ` KY Srinivasan 2016-12-21 19:54 ` KY Srinivasan 2016-12-28 17:09 ` Roman Kagan 2016-12-28 17:09 ` Roman Kagan 2016-12-29 18:29 ` Stephen Hemminger 2016-12-29 18:29 ` Stephen Hemminger 2017-01-02 8:19 ` Paolo Bonzini 2017-01-09 8:32 ` Roman Kagan 2017-01-09 8:40 ` hpa 2017-01-09 8:58 ` Roman Kagan 2017-01-09 8:58 ` Roman Kagan 2017-01-09 9:02 ` Paolo Bonzini 2017-01-02 19:39 ` Stephen Hemminger 2017-01-02 19:39 ` Stephen Hemminger 2017-01-03 9:32 ` Paolo Bonzini 2016-12-20 15:56 ` [PATCH 13/15] hyperv: move function close to its only callsite Roman Kagan 2016-12-20 15:56 ` [PATCH 14/15] hyperv_vmbus: drop unused definitions Roman Kagan 2016-12-20 15:56 ` [PATCH 15/15] hyperv: redefine hv_message without bitfields Roman Kagan 2016-12-21 18:00 ` [PATCH 00/15] hyperv: more stuff to uapi + cleanup KY Srinivasan 2016-12-28 16:57 ` Roman Kagan 2016-12-28 16:57 ` Roman Kagan 2016-12-30 19:45 ` KY Srinivasan 2016-12-30 19:45 ` KY Srinivasan
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=20161220155602.6298-11-rkagan@virtuozzo.com \ --to=rkagan@virtuozzo.com \ --cc=den@openvz.org \ --cc=devel@linuxdriverproject.org \ --cc=haiyangz@microsoft.com \ --cc=hpa@zytor.com \ --cc=kvm@vger.kernel.org \ --cc=kys@microsoft.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=pbonzini@redhat.com \ --cc=rkrcmar@redhat.com \ --cc=tglx@linutronix.de \ --cc=vkuznets@redhat.com \ --cc=x86@kernel.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.