Skip to content

Commit

Permalink
Staging: hv: Fix vmbus event handler bug
Browse files Browse the repository at this point in the history
The flag ENABLE_POLLING is always enabled in original Makefile, but
accidently removed during porting to mainline kernel. The patch fixes
this bug which can cause stalled network communication.  Credit needs to
go to Eric Sesterhenn <eric.sesterhenn@lsexperts.de> For pointing out a
typo in the original code as well.

Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Haiyang Zhang authored and Greg Kroah-Hartman committed Dec 1, 2009
1 parent 8c960e4 commit 5996b3d
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 13 deletions.
16 changes: 4 additions & 12 deletions drivers/staging/hv/Channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,7 @@ void VmbusChannelClose(struct vmbus_channel *Channel)

/* Stop callback and cancel the timer asap */
Channel->OnChannelCallback = NULL;
del_timer(&Channel->poll_timer);
del_timer_sync(&Channel->poll_timer);

/* Send a closing message */
info = kmalloc(sizeof(*info) +
Expand Down Expand Up @@ -978,14 +978,10 @@ void VmbusChannelOnChannelEvent(struct vmbus_channel *Channel)
{
DumpVmbusChannel(Channel);
ASSERT(Channel->OnChannelCallback);
#ifdef ENABLE_POLLING
del_timer(&Channel->poll_timer);
Channel->OnChannelCallback(Channel->ChannelCallbackContext);
channel->poll_timer.expires(jiffies + usecs_to_jiffies(100);
add_timer(&channel->poll_timer);
#else

Channel->OnChannelCallback(Channel->ChannelCallbackContext);
#endif

mod_timer(&Channel->poll_timer, jiffies + usecs_to_jiffies(100));
}

/**
Expand All @@ -997,10 +993,6 @@ void VmbusChannelOnTimer(unsigned long data)

if (channel->OnChannelCallback) {
channel->OnChannelCallback(channel->ChannelCallbackContext);
#ifdef ENABLE_POLLING
channel->poll_timer.expires(jiffies + usecs_to_jiffies(100);
add_timer(&channel->poll_timer);
#endif
}
}

Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/hv/ChannelMgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ static inline void ReleaseVmbusChannel(void *context)
*/
void FreeVmbusChannel(struct vmbus_channel *Channel)
{
del_timer(&Channel->poll_timer);
del_timer_sync(&Channel->poll_timer);

/*
* We have to release the channel's workqueue/thread in the vmbus's
Expand Down

0 comments on commit 5996b3d

Please sign in to comment.