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
next prev 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: 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.