Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1291649
| From | "K. Y. Srinivasan" <kys@microsoft.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH RESEND 23/27] Drivers: hv: vmbus: Fix a Host signaling bug |
| Date | 2015-12-14 23:40 +0100 |
| Message-ID | <qFJWI-3Ss-69@gated-at.bofh.it> (permalink) |
| References | <qFJN1-3NK-19@gated-at.bofh.it> <qFJN1-3NK-17@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Currently we have two policies for deciding when to signal the host:
One based on the ring buffer state and the other based on what the
VMBUS client driver wants to do. Consider the case when the client
wants to explicitly control when to signal the host. In this case,
if the client were to defer signaling, we will not be able to signal
the host subsequently when the client does want to signal since the
ring buffer state will prevent the signaling. Implement logic to
have only one signaling policy in force for a given channel.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Tested-by: Haiyang Zhang <haiyangz@microsoft.com>
Cc: <stable@vger.kernel.org> # v4.2+
---
drivers/hv/channel.c | 18 ++++++++++++++++++
include/linux/hyperv.h | 18 ++++++++++++++++++
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 77d2579..2889d97 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -653,10 +653,19 @@ int vmbus_sendpacket_ctl(struct vmbus_channel *channel, void *buffer,
* on the ring. We will not signal if more data is
* to be placed.
*
+ * Based on the channel signal state, we will decide
+ * which signaling policy will be applied.
+ *
* If we cannot write to the ring-buffer; signal the host
* even if we may not have written anything. This is a rare
* enough condition that it should not matter.
*/
+
+ if (channel->signal_policy)
+ signal = true;
+ else
+ kick_q = true;
+
if (((ret == 0) && kick_q && signal) || (ret))
vmbus_setevent(channel);
@@ -756,10 +765,19 @@ int vmbus_sendpacket_pagebuffer_ctl(struct vmbus_channel *channel,
* on the ring. We will not signal if more data is
* to be placed.
*
+ * Based on the channel signal state, we will decide
+ * which signaling policy will be applied.
+ *
* If we cannot write to the ring-buffer; signal the host
* even if we may not have written anything. This is a rare
* enough condition that it should not matter.
*/
+
+ if (channel->signal_policy)
+ signal = true;
+ else
+ kick_q = true;
+
if (((ret == 0) && kick_q && signal) || (ret))
vmbus_setevent(channel);
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index f773a68..acd995b 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -630,6 +630,11 @@ struct hv_input_signal_event_buffer {
struct hv_input_signal_event event;
};
+enum hv_signal_policy {
+ HV_SIGNAL_POLICY_DEFAULT = 0,
+ HV_SIGNAL_POLICY_EXPLICIT,
+};
+
struct vmbus_channel {
/* Unique channel id */
int id;
@@ -757,8 +762,21 @@ struct vmbus_channel {
* link up channels based on their CPU affinity.
*/
struct list_head percpu_list;
+ /*
+ * Host signaling policy: The default policy will be
+ * based on the ring buffer state. We will also support
+ * a policy where the client driver can have explicit
+ * signaling control.
+ */
+ enum hv_signal_policy signal_policy;
};
+static inline void set_channel_signal_state(struct vmbus_channel *c,
+ enum hv_signal_policy policy)
+{
+ c->signal_policy = policy;
+}
+
static inline void set_channel_read_state(struct vmbus_channel *c, bool state)
{
c->batched_reading = state;
--
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH RESEND 01/27] Drivers: hv: util: Increase the timeout for util services "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:30 +0100
[PATCH RESEND 02/27] Drivers: hv: utils: run polling callback always in interrupt context "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:30 +0100
[PATCH RESEND 03/27] tools: hv: report ENOSPC errors in hv_fcopy_daemon "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:30 +0100
[PATCH RESEND 06/27] Drivers: hv: utils: use memdup_user in hvt_op_write "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:30 +0100
[PATCH RESEND 04/27] tools: hv: remove repeated HV_FCOPY string "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:30 +0100
[PATCH RESEND 10/27] drivers:hv: Define the channel type for Hyper-V PCI Express pass-through "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 09/27] drivers:hv: Export the API to invoke a hypercall on Hyper-V "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
Re: [PATCH RESEND 09/27] drivers:hv: Export the API to invoke a hypercall on Hyper-V Greg KH <gregkh@linuxfoundation.org> - 2015-12-15 04:10 +0100
RE: [PATCH RESEND 09/27] drivers:hv: Export the API to invoke a hypercall on Hyper-V KY Srinivasan <kys@microsoft.com> - 2015-12-15 05:20 +0100
[PATCH RESEND 14/27] Drivers: hv: vmbus: Get rid of the unused macro "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 20/27] Drivers: hv: vmbus: channge vmbus_connection.channel_lock to mutex "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 26/27] Drivers: hv: utils: Invoke the poll function after handshake "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 05/27] Drivers: hv: util: catch allocation errors "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 08/27] drivers:hv: Export a function that maps Linux CPU num onto Hyper-V proc num "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 07/27] drivers/hv: cleanup synic msrs if vmbus connect failed "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 22/27] tools/hv: Use include/uapi with __EXPORTED_HEADERS__ "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
Re: [PATCH RESEND 22/27] tools/hv: Use include/uapi with __EXPORTED_HEADERS__ Greg KH <gregkh@linuxfoundation.org> - 2015-12-15 04:20 +0100
Re: [PATCH RESEND 22/27] tools/hv: Use include/uapi with __EXPORTED_HEADERS__ Kamal Mostafa <kamal@canonical.com> - 2015-12-15 19:20 +0100
[PATCH v2] tools/hv: Use include/uapi with __EXPORTED_HEADERS__ Kamal Mostafa <kamal@canonical.com> - 2015-12-15 19:30 +0100
Re: [PATCH v2] tools/hv: Use include/uapi with __EXPORTED_HEADERS__ Greg KH <gregkh@linuxfoundation.org> - 2015-12-15 19:50 +0100
[PATCH RESEND 25/27] Drivers: hv: vmbus: Force all channel messages to be delivered on CPU 0 "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 21/27] drivers:hv: Allow for MMIO claims that span ACPI _CRS records "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 24/27] drivers/hv: correct tsc page sequence invalid value "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 11/27] Drivers: hv: vss: run only on supported host versions "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 27/27] tools: hv: vss: fix the write()'s argument: error -> vss_msg "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 16/27] Drivers: hv: vmbus: serialize process_chn_event() and vmbus_close_internal() "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 18/27] Drivers: hv: vmbus: fix rescind-offer handling for device without a driver "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 19/27] Drivers: hv: vmbus: release relid on error in vmbus_process_offer() "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 23/27] Drivers: hv: vmbus: Fix a Host signaling bug "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:40 +0100
[PATCH RESEND 17/27] Drivers: hv: vmbus: do sanity check of channel state in vmbus_close_internal() "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:50 +0100
[PATCH RESEND 13/27] Drivers: hv: vmbus: Use uuid_le_cmp() for comparing GUIDs "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:50 +0100
[PATCH RESEND 12/27] Drivers: hv: vmbus: Use uuid_le type consistently "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:50 +0100
[PATCH RESEND 15/27] Drivers: hv: vmbus: Get rid of the unused irq variable "K. Y. Srinivasan" <kys@microsoft.com> - 2015-12-14 23:50 +0100
csiph-web