svn commit: r302695 - in head/sys/dev/hyperv: include vmbus

Sepherosa Ziehau sephe at FreeBSD.org
Wed Jul 13 04:31:10 UTC 2016


Author: sephe
Date: Wed Jul 13 04:31:08 2016
New Revision: 302695
URL: https://svnweb.freebsd.org/changeset/base/302695

Log:
  hyperv/vmbus: Add flags field into hv_vmbus_channel for MNF indication
  
  This prepares to remove the unnecessary offer message embedding in
  hv_vmbus_channel.
  
  MFC after:	1 week
  Sponsored by:	Microsoft OSTC
  Differential Revision:	https://reviews.freebsd.org/D7019

Modified:
  head/sys/dev/hyperv/include/hyperv.h
  head/sys/dev/hyperv/vmbus/hv_channel.c
  head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c

Modified: head/sys/dev/hyperv/include/hyperv.h
==============================================================================
--- head/sys/dev/hyperv/include/hyperv.h	Wed Jul 13 03:35:22 2016	(r302694)
+++ head/sys/dev/hyperv/include/hyperv.h	Wed Jul 13 04:31:08 2016	(r302695)
@@ -538,6 +538,7 @@ typedef struct hv_vmbus_channel {
 	struct vmbus_softc		*vmbus_sc;
 	hv_vmbus_channel_state		state;
 	hv_vmbus_channel_offer_channel	offer_msg;
+	uint32_t			ch_flags;	/* VMBUS_CHAN_FLAG_ */
 	uint32_t			ch_id;		/* channel id */
 	/*
 	 * These are based on the offer_msg.monitor_id.
@@ -636,6 +637,8 @@ typedef struct hv_vmbus_channel {
 
 #define HV_VMBUS_CHAN_ISPRIMARY(chan)	((chan)->primary_channel == NULL)
 
+#define VMBUS_CHAN_FLAG_HASMNF		0x0001
+
 static inline void
 hv_set_channel_read_state(hv_vmbus_channel* channel, boolean_t state)
 {

Modified: head/sys/dev/hyperv/vmbus/hv_channel.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel.c	Wed Jul 13 03:35:22 2016	(r302694)
+++ head/sys/dev/hyperv/vmbus/hv_channel.c	Wed Jul 13 04:31:08 2016	(r302695)
@@ -67,7 +67,7 @@ vmbus_channel_set_event(hv_vmbus_channel
 	atomic_set_long(&sc->vmbus_tx_evtflags[chanid >> VMBUS_EVTFLAG_SHIFT],
 	    1UL << (chanid & VMBUS_EVTFLAG_MASK));
 
-	if (channel->offer_msg.monitor_allocated) {
+	if (channel->ch_flags & VMBUS_CHAN_FLAG_HASMNF) {
 		hv_vmbus_monitor_page *monitor_page;
 
 		monitor_page = sc->vmbus_mnf2;
@@ -86,7 +86,7 @@ vmbus_channel_sysctl_monalloc(SYSCTL_HAN
 	struct hv_vmbus_channel *chan = arg1;
 	int alloc = 0;
 
-	if (chan->offer_msg.monitor_allocated)
+	if (chan->ch_flags & VMBUS_CHAN_FLAG_HASMNF)
 		alloc = 1;
 	return sysctl_handle_int(oidp, &alloc, 0, req);
 }

Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Wed Jul 13 03:35:22 2016	(r302694)
+++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Wed Jul 13 04:31:08 2016	(r302695)
@@ -294,6 +294,8 @@ vmbus_channel_on_offer_internal(struct v
 	new_channel = hv_vmbus_allocate_channel(sc);
 	new_channel->ch_id = offer->child_rel_id;
 	new_channel->ch_subidx = offer->offer.sub_channel_index;
+	if (offer->monitor_allocated)
+		new_channel->ch_flags |= VMBUS_CHAN_FLAG_HASMNF;
 
 	/*
 	 * By default we setup state to enable batched


More information about the svn-src-all mailing list