On Wed, Jul 16, 2014 at 05:28:05PM -0700, K. Y. Srinivasan wrote: > Add code to poll the channel since we process only one message at a time and > the host may not interrupt us. Also increase the receive buffer size since > some KVP messages are close to 8K bytes in size. > > This patch failed to apply to the 3.15-stable tree. Here is the original > commit information: > > From 9bd2d0dfe4714dd5d7c09a93a5c9ea9e14ceb3fc Mon Sep 17 00:00:00 2001 > From: "K. Y. Srinivasan" <kys@xxxxxxxxxxxxx> > Date: Mon, 7 Jul 2014 16:34:25 -0700 > Subject: [PATCH] Drivers: hv: util: Fix a bug in the KVP code > > The patch has been backported to apply to 3.15-stable tree. > Thanks, I will use this backport for the 3.11 kernel as well. Cheers, -- Luís > Signed-off-by: K. Y. Srinivasan <kys@xxxxxxxxxxxxx> > --- > drivers/hv/hv_kvp.c | 14 ++++++++++++-- > drivers/hv/hv_util.c | 2 +- > 2 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/hv/hv_kvp.c b/drivers/hv/hv_kvp.c > index 09988b2..816782a 100644 > --- a/drivers/hv/hv_kvp.c > +++ b/drivers/hv/hv_kvp.c > @@ -127,6 +127,15 @@ kvp_work_func(struct work_struct *dummy) > kvp_respond_to_host(NULL, HV_E_FAIL); > } > > +static void poll_channel(struct vmbus_channel *channel) > +{ > + unsigned long flags; > + > + spin_lock_irqsave(&channel->inbound_lock, flags); > + hv_kvp_onchannelcallback(channel); > + spin_unlock_irqrestore(&channel->inbound_lock, flags); > +} > + > static int kvp_handle_handshake(struct hv_kvp_msg *msg) > { > int ret = 1; > @@ -155,7 +164,7 @@ static int kvp_handle_handshake(struct hv_kvp_msg *msg) > kvp_register(dm_reg_value); > kvp_transaction.active = false; > if (kvp_transaction.kvp_context) > - hv_kvp_onchannelcallback(kvp_transaction.kvp_context); > + poll_channel(kvp_transaction.kvp_context); > } > return ret; > } > @@ -568,6 +577,7 @@ response_done: > > vmbus_sendpacket(channel, recv_buffer, buf_len, req_id, > VM_PKT_DATA_INBAND, 0); > + poll_channel(channel); > > } > > @@ -603,7 +613,7 @@ void hv_kvp_onchannelcallback(void *context) > return; > } > > - vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 2, &recvlen, > + vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 4, &recvlen, > &requestid); > > if (recvlen > 0) { > diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c > index 62dfd246..d016be3 100644 > --- a/drivers/hv/hv_util.c > +++ b/drivers/hv/hv_util.c > @@ -312,7 +312,7 @@ static int util_probe(struct hv_device *dev, > (struct hv_util_service *)dev_id->driver_data; > int ret; > > - srv->recv_buffer = kmalloc(PAGE_SIZE * 2, GFP_KERNEL); > + srv->recv_buffer = kmalloc(PAGE_SIZE * 4, GFP_KERNEL); > if (!srv->recv_buffer) > return -ENOMEM; > if (srv->util_init) { > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html