Long Li <lon...@exchange.microsoft.com> writes: > From: Long Li <lon...@microsoft.com> > > The host keeps sending heartbeat packets independent of guest responding to > them. In some situations, there might be multiple heartbeat packets pending > in the ring buffer. Don't lose them, read them all. > > Signed-off-by: Long Li <lon...@microsoft.com>
Long, K. Y., it seems this patch didn't make it to char-misc tree and it looks like an important fix. A couple of nitpicks below, > --- > drivers/hv/hv_util.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c > index d5acaa2..9dc6372 100644 > --- a/drivers/hv/hv_util.c > +++ b/drivers/hv/hv_util.c > @@ -283,10 +283,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); We should check vmbus_recvpacket() return value as well. E.g. hv_ringbuffer_read() may return -EAGAIN in case we didn't receive the whole packet (and we do this check in other drivers, see storvsc_on_channel_callback() for example). > + > + if (!recvlen) so this should be 'if (ret || !recvlen)' > + break; > > - if (recvlen > 0) { > icmsghdrp = (struct icmsg_hdr *)&hbeat_txf_buf[ > sizeof(struct vmbuspipe_hdr)]; -- Vitaly _______________________________________________ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel