/* * vmbus_setevent- Trigger an event notification on the specified * channel. */ static void vmbus_setevent(struct vmbus_channel *channel) { struct hv_monitor_page *monitorpage; if (channel->offermsg.monitor_allocated) { /* Each u32 represents 32 channels */ sync_set_bit(channel->offermsg.child_relid & 31, (unsigned long *) vmbus_connection.send_int_page + (channel->offermsg.child_relid >> 5)); monitorpage = vmbus_connection.monitor_pages; monitorpage++; /* Get the child to parent monitor page */ sync_set_bit(channel->monitor_bit, (unsigned long *)&monitorpage->trigger_group [channel->monitor_grp].pending); } else {
/* * VmbusChannelSetEvent - Trigger an event notification on the specified * channel. */ static void VmbusChannelSetEvent(struct vmbus_channel *Channel) { struct hv_monitor_page *monitorPage; DPRINT_ENTER(VMBUS); if (Channel->OfferMsg.MonitorAllocated) { /* Each u32 represents 32 channels */ sync_set_bit(Channel->OfferMsg.ChildRelId & 31, (unsigned long *) gVmbusConnection.SendInterruptPage + (Channel->OfferMsg.ChildRelId >> 5)); monitorPage = gVmbusConnection.MonitorPages; monitorPage++; /* Get the child to parent monitor page */ sync_set_bit(Channel->MonitorBit, (unsigned long *)&monitorPage->TriggerGroup [Channel->MonitorGroup].Pending); } else {
/* * vmbus_setevent- Trigger an event notification on the specified * channel. */ static void vmbus_setevent(struct vmbus_channel *channel) { struct hv_monitor_page *monitorpage; /* * For channels marked as in "low latency" mode * bypass the monitor page mechanism. */ if ((channel->offermsg.monitor_allocated) && (!channel->low_latency)) { /* Each u32 represents 32 channels */ sync_set_bit(channel->offermsg.child_relid & 31, (unsigned long *) vmbus_connection.send_int_page + (channel->offermsg.child_relid >> 5)); /* Get the child to parent monitor page */ monitorpage = vmbus_connection.monitor_pages[1]; sync_set_bit(channel->monitor_bit, (unsigned long *)&monitorpage->trigger_group [channel->monitor_grp].pending); } else {