Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1548713

[PATCH 09/18] Drivers: hv: vmbus: Move the code to signal end of message

From kys@exchange.microsoft.com
Newsgroups linux.kernel
Subject [PATCH 09/18] Drivers: hv: vmbus: Move the code to signal end of message
Date 2016-12-30 20:50 +0100
Message-ID <sUblD-cG-21@gated-at.bofh.it> (permalink)
References <sUbbX-9d-15@gated-at.bofh.it> <sUbbX-9d-17@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: K. Y. Srinivasan <kys@microsoft.com>

As part of the effort to separate out architecture specific code, move the
code for signaling end of message.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
---
 arch/x86/include/asm/mshyperv.h |   37 +++++++++++++++++++++++++++++++++++++
 drivers/hv/channel_mgmt.c       |    1 +
 drivers/hv/hyperv_vmbus.h       |   35 -----------------------------------
 3 files changed, 38 insertions(+), 35 deletions(-)

diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index c843ef6..b57b470 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -99,6 +99,43 @@ static inline  __u64 generate_guest_id(__u64 d_info1, __u64 kernel_version,
 	return guest_id;
 }
 
+
+/* Free the message slot and signal end-of-message if required */
+static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type)
+{
+	/*
+	 * On crash we're reading some other CPU's message page and we need
+	 * to be careful: this other CPU may already had cleared the header
+	 * and the host may already had delivered some other message there.
+	 * In case we blindly write msg->header.message_type we're going
+	 * to lose it. We can still lose a message of the same type but
+	 * we count on the fact that there can only be one
+	 * CHANNELMSG_UNLOAD_RESPONSE and we don't care about other messages
+	 * on crash.
+	 */
+	if (cmpxchg(&msg->header.message_type, old_msg_type,
+		    HVMSG_NONE) != old_msg_type)
+		return;
+
+	/*
+	 * Make sure the write to MessageType (ie set to
+	 * HVMSG_NONE) happens before we read the
+	 * MessagePending and EOMing. Otherwise, the EOMing
+	 * will not deliver any more messages since there is
+	 * no empty slot
+	 */
+	mb();
+
+	if (msg->header.message_flags.msg_pending) {
+		/*
+		 * This will cause message queue rescan to
+		 * possibly deliver another msg from the
+		 * hypervisor
+		 */
+		wrmsrl(HV_X64_MSR_EOM, 0);
+	}
+}
+
 void hyperv_callback_vector(void);
 #ifdef CONFIG_TRACING
 #define trace_hyperv_callback_vector hyperv_callback_vector
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index 0af7e39..49d77be 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -31,6 +31,7 @@
 #include <linux/completion.h>
 #include <linux/delay.h>
 #include <linux/hyperv.h>
+#include <asm/mshyperv.h>
 
 #include "hyperv_vmbus.h"
 
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
index 59eb28c..e9f5d2c 100644
--- a/drivers/hv/hyperv_vmbus.h
+++ b/drivers/hv/hyperv_vmbus.h
@@ -521,41 +521,6 @@ struct vmbus_channel_message_table_entry {
 extern struct vmbus_channel_message_table_entry
 	channel_message_table[CHANNELMSG_COUNT];
 
-/* Free the message slot and signal end-of-message if required */
-static inline void vmbus_signal_eom(struct hv_message *msg, u32 old_msg_type)
-{
-	/*
-	 * On crash we're reading some other CPU's message page and we need
-	 * to be careful: this other CPU may already had cleared the header
-	 * and the host may already had delivered some other message there.
-	 * In case we blindly write msg->header.message_type we're going
-	 * to lose it. We can still lose a message of the same type but
-	 * we count on the fact that there can only be one
-	 * CHANNELMSG_UNLOAD_RESPONSE and we don't care about other messages
-	 * on crash.
-	 */
-	if (cmpxchg(&msg->header.message_type, old_msg_type,
-		    HVMSG_NONE) != old_msg_type)
-		return;
-
-	/*
-	 * Make sure the write to MessageType (ie set to
-	 * HVMSG_NONE) happens before we read the
-	 * MessagePending and EOMing. Otherwise, the EOMing
-	 * will not deliver any more messages since there is
-	 * no empty slot
-	 */
-	mb();
-
-	if (msg->header.message_flags.msg_pending) {
-		/*
-		 * This will cause message queue rescan to
-		 * possibly deliver another msg from the
-		 * hypervisor
-		 */
-		wrmsrl(HV_X64_MSR_EOM, 0);
-	}
-}
 
 /* General vmbus interface */
 
-- 
1.7.4.1

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/18] Drivers: hv: vmbus: Restructure architecture specific code  kys@exchange.microsoft.com - 2016-12-30 20:40 +0100
  [PATCH 08/18] Drivers: hv: vmbus: Move the check for hypercall page setup kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
  [PATCH 05/18] Drivers: hv: vmbus: Consolidate all Hyper-V specific clocksource code kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
  [PATCH 03/18] Drivers: hv vmbus: Move Hypercall page setup out of common code kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
  [PATCH 02/18] Drivers: hv: vmbus: Move the definition of generate_guest_id() kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
  [PATCH 01/18] Drivers: hv: vmbus: Move the definition of hv_x64_msr_hypercall_contents kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 15/18] Drivers: hv: vmbus: Define APIs to manipulate the synthetic interrupt controller kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 04/18] Drivers: hv: vmbus: Move Hypercall invocation code out of common code kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 09/18] Drivers: hv: vmbus: Move the code to signal end of message kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 18/18] Drivers: hv: vmbus: Cleanup hyperv_vmbus.h kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 14/18] Drivers: hv: vmbus: Define APIs to manipulate the event page kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 06/18] Drivers: hv: vmbus: Move the extracting of Hypervisor version information kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 10/18] Drivers: hv: vmbus: Restructure the clockevents code kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 17/18] Drivers: hv: vmbus: Define an APIs to manage interrupt state kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 11/18] Drivers: hv: util: Use hv_get_current_tick() to get current tick kys@exchange.microsoft.com - 2016-12-30 20:50 +0100
    [PATCH 12/18] Drivers: hv: vmbus: Get rid of an unsused variable kys@exchange.microsoft.com - 2016-12-30 21:00 +0100
    [PATCH 13/18] Drivers: hv: vmbus: Define APIs to manipulate the message page kys@exchange.microsoft.com - 2016-12-30 21:00 +0100
    [PATCH 07/18] Drivers: hv: vmbus: Move the crash notification function kys@exchange.microsoft.com - 2016-12-30 21:00 +0100

csiph-web