From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754225AbcJEV1L (ORCPT ); Wed, 5 Oct 2016 17:27:11 -0400 Received: from p3plsmtps2ded04.prod.phx3.secureserver.net ([208.109.80.198]:50104 "EHLO p3plsmtps2ded04.prod.phx3.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751647AbcJEV1J (ORCPT ); Wed, 5 Oct 2016 17:27:09 -0400 x-originating-ip: 72.167.245.219 From: kys@exchange.microsoft.com To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com, vkuznets@redhat.com, jasowang@redhat.com, leann.ogasawara@canonical.com Cc: Long Li , "K. Y. Srinivasan" Subject: [PATCH 1/1] hv: do not lose pending heartbeat vmbus packets Date: Wed, 5 Oct 2016 16:18:25 -0700 Message-Id: <1475709505-25022-1-git-send-email-kys@exchange.microsoft.com> X-Mailer: git-send-email 1.7.4.1 Reply-To: kys@microsoft.com X-CMAE-Envelope: MS4wfAU3FCTI28tvXwIz4KPJSQ3e/3IttAYsIBs6PbHXV8lT+bKmx69vnEWx4DVyhrVl7CTr8G55tLAKPQ1hlp9GkLnV0r6KZ6Oza4PyxHOWNdLMXXPNeT5P rp6s3uOjqpJJW06il0BLXQsP+7m78BfCRpLdK62CgXOwUF5qH12yt4r30+q1f/CuU7Sa4xEPLGKwVqDVOxfq0WQG5Kai2Twxg41BB4mZqZfhFdXhtpV7au7m bf2RkNgH3JD1Ff/GEndTiazu7k7XLf0gkzcOEEcBhyGxvsLdcnFJCR6jbJA8VXCfrVOGLPBWHlKuJ1KXtrChjgIR4jiHu/7Kp8f1S4aZQqRTBK+4EhfAVDpg TDfnYw0C/rrg7rg9y6WzmH41PWyMdU0ISZEX3mmkkig7hS/xRCqdqme3OqCCdrP2zL5B0zoORD/WYNmqsJmF8AFqbtv2QqFzriihNaiI5TSPyHPeI5K3MfhC kEsQF8qE/XLT6dKJ Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Long Li The host keeps sending heartbeat packets independent of the guest responding to them. Even though we respond to the heartbeat messages at interrupt level, we can have situations where there maybe multiple heartbeat messages pending that have not been responded to. For instance this occurs when the VM is paused and the host continues to send the heartbeat messages. Address this issue by draining and responding to all the heartbeat messages that maybe pending. Signed-off-by: Long Li Signed-off-by: K. Y. Srinivasan --- drivers/hv/hv_util.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c index 4aa3cb6..bcd0630 100644 --- a/drivers/hv/hv_util.c +++ b/drivers/hv/hv_util.c @@ -314,10 +314,14 @@ static void heartbeat_onchannelcallback(void *context) u8 *hbeat_txf_buf = util_heartbeat.recv_buffer; struct icmsg_negotiate *negop = NULL; - vmbus_recvpacket(channel, hbeat_txf_buf, - PAGE_SIZE, &recvlen, &requestid); + while (1) { + + vmbus_recvpacket(channel, hbeat_txf_buf, + PAGE_SIZE, &recvlen, &requestid); + + if (!recvlen) + break; - if (recvlen > 0) { icmsghdrp = (struct icmsg_hdr *)&hbeat_txf_buf[ sizeof(struct vmbuspipe_hdr)]; -- 1.7.4.1