> -----Original Message----- > From: Jiri Slaby [mailto:jirislaby@xxxxxxxxx] > Sent: Tuesday, February 15, 2011 4:21 AM > To: KY Srinivasan > Cc: gregkh@xxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; > devel@xxxxxxxxxxxxxxxxxxxxxx; virtualization@xxxxxxxxxxxxxx > Subject: Re: [PATCH 2/3]: Staging: hv: Use native wait primitives > > On 02/11/2011 06:59 PM, K. Y. Srinivasan wrote: > > In preperation for getting rid of the osd layer; change > > the code to use native wait interfaces. As part of this, > > fixed the buggy implementation in the osd_wait_primitive > > where the condition was cleared potentially after the > > condition was signalled. > ... > > @@ -566,7 +567,11 @@ int vmbus_establish_gpadl(struct vmbus_channel > *channel, void *kbuffer, > > > > } > > } > > - osd_waitevent_wait(msginfo->waitevent); > > + wait_event_timeout(msginfo->waitevent, > > + msginfo->wait_condition, > > + msecs_to_jiffies(1000)); > > + BUG_ON(msginfo->wait_condition == 0); > > The added BUG_ONs all over the code look scary. These shouldn't be > BUG_ONs at all. You should maybe warn and bail out, but not kill the > whole machine. This is Linux code running as a guest on a Windows host; and so the guest cannot tolerate a failure of the host. In the cases where I have chosen to BUG_ON, there is no reasonable recovery possible when the host is non-functional (as determined by a non-responsive host). > > And looking at the code, more appropriate would be completion instead of > wait events. > > And msecs_to_jiffies(1000) == HZ. Agreed. In this first round of cleanup, I chose to keep the primitives as they were in osd.c. Greg, if it is ok with you, I will send you a patch that fixes these issues on top of the patches I have already sent. Regards, K. Y > > > @@ -689,7 +693,8 @@ static void vmbus_ongpadl_torndown( > > memcpy(&msginfo->response.gpadl_torndown, > > gpadl_torndown, > > sizeof(struct > vmbus_channel_gpadl_torndown)); > > - osd_waitevent_set(msginfo->waitevent); > > + msginfo->wait_condition = 1; > > + wake_up(&msginfo->waitevent); > > break; > > } > > } > > @@ -730,7 +735,8 @@ static void vmbus_onversion_response( > > memcpy(&msginfo->response.version_response, > > version_response, > > sizeof(struct vmbus_channel_version_response)); > > - osd_waitevent_set(msginfo->waitevent); > > + msginfo->wait_condition = 1; > > + wake_up(&msginfo->waitevent); > > } > > } > > spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); > > regards, > -- > js _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel