All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: "K. Y. Srinivasan" <kys@microsoft.com>, devel@linuxdriverproject.org
Cc: Haiyang Zhang <haiyangz@microsoft.com>,
	linux-kernel@vger.kernel.org, Dexuan Cui <decui@microsoft.com>,
	Radim Krcmar <rkrcmar@redhat.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-api@vger.kernel.org
Subject: [PATCH v3 04/21] Drivers: hv: fcopy: process deferred messages when we complete the transaction
Date: Thu,  9 Apr 2015 10:38:33 +0200	[thread overview]
Message-ID: <1428568730-6030-5-git-send-email-vkuznets@redhat.com> (raw)
In-Reply-To: <1428568730-6030-1-git-send-email-vkuznets@redhat.com>

In theory, the host is not supposed to issue any requests before be reply to
the previous one. In KVP we, however, support the following scenarios:
1) A message was received before userspace daemon registered;
2) A message was received while the previous one is still being processed.
In FCOPY we support only the former. Add support for the later, use
hv_poll_channel() to do the job.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
 drivers/hv/hv_fcopy.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/hv/hv_fcopy.c b/drivers/hv/hv_fcopy.c
index cd453e4..8bdf752 100644
--- a/drivers/hv/hv_fcopy.c
+++ b/drivers/hv/hv_fcopy.c
@@ -98,6 +98,8 @@ static void fcopy_work_func(struct work_struct *dummy)
 	if (down_trylock(&fcopy_transaction.read_sema))
 		;
 
+	hv_poll_channel(fcopy_transaction.fcopy_context,
+			hv_fcopy_onchannelcallback);
 }
 
 static int fcopy_handle_handshake(u32 version)
@@ -117,8 +119,8 @@ static int fcopy_handle_handshake(u32 version)
 	pr_info("FCP: user-mode registering done. Daemon version: %d\n",
 		version);
 	fcopy_transaction.active = false;
-	if (fcopy_transaction.fcopy_context)
-		hv_fcopy_onchannelcallback(fcopy_transaction.fcopy_context);
+	hv_poll_channel(fcopy_transaction.fcopy_context,
+			hv_fcopy_onchannelcallback);
 	in_hand_shake = false;
 	return 0;
 }
@@ -226,6 +228,7 @@ void hv_fcopy_onchannelcallback(void *context)
 		fcopy_transaction.fcopy_context = context;
 		return;
 	}
+	fcopy_transaction.fcopy_context = NULL;
 
 	vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 2, &recvlen,
 			 &requestid);
@@ -333,8 +336,11 @@ static ssize_t fcopy_write(struct file *file, const char __user *buf,
 	 * Complete the transaction by forwarding the result
 	 * to the host. But first, cancel the timeout.
 	 */
-	if (cancel_delayed_work_sync(&fcopy_work))
+	if (cancel_delayed_work_sync(&fcopy_work)) {
 		fcopy_respond_to_host(response);
+		hv_poll_channel(fcopy_transaction.fcopy_context,
+				hv_fcopy_onchannelcallback);
+	}
 
 	return sizeof(int);
 }
-- 
1.9.3


WARNING: multiple messages have this Message-ID (diff)
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: "K. Y. Srinivasan" <kys@microsoft.com>, devel@linuxdriverproject.org
Cc: Radim Krcmar <rkrcmar@redhat.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	linux-kernel@vger.kernel.org, linux-api@vger.kernel.org
Subject: [PATCH v3 04/21] Drivers: hv: fcopy: process deferred messages when we complete the transaction
Date: Thu,  9 Apr 2015 10:38:33 +0200	[thread overview]
Message-ID: <1428568730-6030-5-git-send-email-vkuznets@redhat.com> (raw)
In-Reply-To: <1428568730-6030-1-git-send-email-vkuznets@redhat.com>

In theory, the host is not supposed to issue any requests before be reply to
the previous one. In KVP we, however, support the following scenarios:
1) A message was received before userspace daemon registered;
2) A message was received while the previous one is still being processed.
In FCOPY we support only the former. Add support for the later, use
hv_poll_channel() to do the job.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
 drivers/hv/hv_fcopy.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/hv/hv_fcopy.c b/drivers/hv/hv_fcopy.c
index cd453e4..8bdf752 100644
--- a/drivers/hv/hv_fcopy.c
+++ b/drivers/hv/hv_fcopy.c
@@ -98,6 +98,8 @@ static void fcopy_work_func(struct work_struct *dummy)
 	if (down_trylock(&fcopy_transaction.read_sema))
 		;
 
+	hv_poll_channel(fcopy_transaction.fcopy_context,
+			hv_fcopy_onchannelcallback);
 }
 
 static int fcopy_handle_handshake(u32 version)
@@ -117,8 +119,8 @@ static int fcopy_handle_handshake(u32 version)
 	pr_info("FCP: user-mode registering done. Daemon version: %d\n",
 		version);
 	fcopy_transaction.active = false;
-	if (fcopy_transaction.fcopy_context)
-		hv_fcopy_onchannelcallback(fcopy_transaction.fcopy_context);
+	hv_poll_channel(fcopy_transaction.fcopy_context,
+			hv_fcopy_onchannelcallback);
 	in_hand_shake = false;
 	return 0;
 }
@@ -226,6 +228,7 @@ void hv_fcopy_onchannelcallback(void *context)
 		fcopy_transaction.fcopy_context = context;
 		return;
 	}
+	fcopy_transaction.fcopy_context = NULL;
 
 	vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 2, &recvlen,
 			 &requestid);
@@ -333,8 +336,11 @@ static ssize_t fcopy_write(struct file *file, const char __user *buf,
 	 * Complete the transaction by forwarding the result
 	 * to the host. But first, cancel the timeout.
 	 */
-	if (cancel_delayed_work_sync(&fcopy_work))
+	if (cancel_delayed_work_sync(&fcopy_work)) {
 		fcopy_respond_to_host(response);
+		hv_poll_channel(fcopy_transaction.fcopy_context,
+				hv_fcopy_onchannelcallback);
+	}
 
 	return sizeof(int);
 }
-- 
1.9.3

  parent reply	other threads:[~2015-04-09  8:45 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-09  8:38 [PATCH v3 00/21] Drivers: hv: utils: re-implement the kernel/userspace communication layer Vitaly Kuznetsov
2015-04-09  8:38 ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 01/21] Drivers: hv: util: move kvp/vss function declarations to hyperv_vmbus.h Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 02/21] Drivers: hv: kvp: reset kvp_context Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 03/21] Drivers: hv: kvp: move poll_channel() to hyperv_vmbus.h Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-10 18:27   ` Dan Carpenter
2015-04-10 18:27     ` Dan Carpenter
2015-04-13  8:36     ` Vitaly Kuznetsov
2015-04-13  8:36       ` Vitaly Kuznetsov
2015-04-09  8:38 ` Vitaly Kuznetsov [this message]
2015-04-09  8:38   ` [PATCH v3 04/21] Drivers: hv: fcopy: process deferred messages when we complete the transaction Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 05/21] Drivers: hv: vss: " Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 06/21] Drivers: hv: kvp: rename kvp_work -> kvp_timeout_work Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 07/21] Drivers: hv: fcopy: rename fcopy_work -> fcopy_timeout_work Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 08/21] Drivers: hv: util: introduce state machine for util drivers Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 09/21] Drivers: hv: kvp: switch to using the hvutil_device_state state machine Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 10/21] Drivers: hv: vss: " Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 11/21] Drivers: hv: fcopy: " Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 12/21] Drivers: hv: fcopy: set .owner reference for file operations Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 13/21] Drivers: hv: util: introduce hv_utils_transport abstraction Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 14/21] Drivers: hv: vss: convert to hv_utils_transport Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 15/21] Drivers: hv: fcopy: " Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 16/21] Drivers: hv: kvp: " Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 17/21] Tools: hv: kvp: use misc char device to communicate with kernel Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 18/21] Tools: hv: vss: " Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 19/21] Drivers: hv: vss: full handshake support Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 20/21] Drivers: hv: fcopy: " Vitaly Kuznetsov
2015-04-09  8:38   ` Vitaly Kuznetsov
2015-04-09  8:38 ` [PATCH v3 21/21] Drivers: hv: utils: unify driver registration reporting Vitaly Kuznetsov

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=1428568730-6030-5-git-send-email-vkuznets@redhat.com \
    --to=vkuznets@redhat.com \
    --cc=decui@microsoft.com \
    --cc=devel@linuxdriverproject.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=haiyangz@microsoft.com \
    --cc=kys@microsoft.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rkrcmar@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 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.