svn commit: r302803 - head/sys/dev/hyperv/vmbus

Sepherosa Ziehau sephe at FreeBSD.org
Thu Jul 14 05:33:34 UTC 2016


Author: sephe
Date: Thu Jul 14 05:33:33 2016
New Revision: 302803
URL: https://svnweb.freebsd.org/changeset/base/302803

Log:
  hyperv/vmbus: Move channel offer message definition to vmbus_reg.h
  
  - Avoid bit fields.
  - Avoid unnecessary indirection.
  
  MFC after:	1 week
  Sponsored by:	Microsoft OSTC
  Differential Revision:	https://reviews.freebsd.org/D7093

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

Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Thu Jul 14 05:25:31 2016	(r302802)
+++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Thu Jul 14 05:33:33 2016	(r302803)
@@ -42,7 +42,7 @@ typedef void	(*vmbus_chanmsg_proc_t)
 
 static struct hv_vmbus_channel *hv_vmbus_allocate_channel(struct vmbus_softc *);
 static void	vmbus_channel_on_offer_internal(struct vmbus_softc *,
-		    const hv_vmbus_channel_offer_channel *offer);
+		    const struct vmbus_chanmsg_choffer *);
 static void	vmbus_chan_detach_task(void *, int);
 
 static void	vmbus_channel_on_offer(struct vmbus_softc *,
@@ -267,18 +267,16 @@ vmbus_channel_select_defcpu(struct hv_vm
 static void
 vmbus_channel_on_offer(struct vmbus_softc *sc, const struct vmbus_message *msg)
 {
-	const hv_vmbus_channel_offer_channel *offer;
-
 	/* New channel is offered by vmbus */
 	vmbus_scan_newchan(sc);
 
-	offer = (const hv_vmbus_channel_offer_channel *)msg->msg_data;
-	vmbus_channel_on_offer_internal(sc, offer);
+	vmbus_channel_on_offer_internal(sc,
+	    (const struct vmbus_chanmsg_choffer *)msg->msg_data);
 }
 
 static void
 vmbus_channel_on_offer_internal(struct vmbus_softc *sc,
-    const hv_vmbus_channel_offer_channel *offer)
+    const struct vmbus_chanmsg_choffer *offer)
 {
 	hv_vmbus_channel* new_channel;
 
@@ -286,14 +284,14 @@ vmbus_channel_on_offer_internal(struct v
 	 * Allocate the channel object and save this offer
 	 */
 	new_channel = hv_vmbus_allocate_channel(sc);
-	new_channel->ch_id = offer->child_rel_id;
-	new_channel->ch_subidx = offer->offer.sub_channel_index;
-	new_channel->ch_guid_type = offer->offer.interface_type;
-	new_channel->ch_guid_inst = offer->offer.interface_instance;
+	new_channel->ch_id = offer->chm_chanid;
+	new_channel->ch_subidx = offer->chm_subidx;
+	new_channel->ch_guid_type = offer->chm_chtype;
+	new_channel->ch_guid_inst = offer->chm_chinst;
 
 	/* Batch reading is on by default */
 	new_channel->ch_flags |= VMBUS_CHAN_FLAG_BATCHREAD;
-	if (offer->monitor_allocated)
+	if (offer->chm_flags1 & VMBUS_CHOFFER_FLAG1_HASMNF)
 		new_channel->ch_flags |= VMBUS_CHAN_FLAG_HASMNF;
 
 	new_channel->ch_monprm = hyperv_dmamem_alloc(
@@ -309,15 +307,15 @@ vmbus_channel_on_offer_internal(struct v
 	}
 	new_channel->ch_monprm->mp_connid = VMBUS_CONNID_EVENT;
 	if (sc->vmbus_version != VMBUS_VERSION_WS2008)
-		new_channel->ch_monprm->mp_connid = offer->connection_id;
+		new_channel->ch_monprm->mp_connid = offer->chm_connid;
 
 	if (new_channel->ch_flags & VMBUS_CHAN_FLAG_HASMNF) {
 		new_channel->ch_montrig_idx =
-		    offer->monitor_id / VMBUS_MONTRIG_LEN;
+		    offer->chm_montrig / VMBUS_MONTRIG_LEN;
 		if (new_channel->ch_montrig_idx >= VMBUS_MONTRIGS_MAX)
-			panic("invalid monitor id %u", offer->monitor_id);
+			panic("invalid monitor trigger %u", offer->chm_montrig);
 		new_channel->ch_montrig_mask =
-		    1 << (offer->monitor_id % VMBUS_MONTRIG_LEN);
+		    1 << (offer->chm_montrig % VMBUS_MONTRIG_LEN);
 	}
 
 	/* Select default cpu for this channel. */

Modified: head/sys/dev/hyperv/vmbus/vmbus_reg.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_reg.h	Thu Jul 14 05:25:31 2016	(r302802)
+++ head/sys/dev/hyperv/vmbus/vmbus_reg.h	Thu Jul 14 05:33:33 2016	(r302803)
@@ -31,6 +31,7 @@
 
 #include <sys/param.h>
 #include <dev/hyperv/vmbus/hyperv_reg.h>
+#include <dev/hyperv/include/hyperv.h> /* XXX for hyperv_guid */
 
 /*
  * Hyper-V SynIC message format.
@@ -121,6 +122,7 @@ struct vmbus_gpa_range {
  * - Embedded in hypercall_postmsg_in.hc_data, e.g. request.
  */
 
+#define VMBUS_CHANMSG_TYPE_CHOFFER		1	/* NOTE */
 #define VMBUS_CHANMSG_TYPE_CHRESCIND		2	/* NOTE */
 #define VMBUS_CHANMSG_TYPE_CHREQUEST		3	/* REQ */
 #define VMBUS_CHANMSG_TYPE_CHOPEN		5	/* REQ */
@@ -248,4 +250,27 @@ struct vmbus_chanmsg_chrescind {
 	uint32_t	chm_chanid;
 } __packed;
 
+/* VMBUS_CHANMSG_TYPE_CHOFFER */
+struct vmbus_chanmsg_choffer {
+	struct vmbus_chanmsg_hdr chm_hdr;
+	struct hyperv_guid chm_chtype;
+	struct hyperv_guid chm_chinst;
+	uint64_t	chm_chlat;	/* unit: 100ns */
+	uint32_t	chm_chrev;
+	uint32_t	chm_svrctx_sz;
+	uint16_t	chm_chflags;
+	uint16_t	chm_mmio_sz;	/* unit: MB */
+	uint8_t		chm_udata[120];
+	uint16_t	chm_subidx;
+	uint16_t	chm_rsvd;
+	uint32_t	chm_chanid;
+	uint8_t		chm_montrig;
+	uint8_t		chm_flags1;	/* VMBUS_CHOFFER_FLAG1_ */
+	uint16_t	chm_flags2;
+	uint32_t	chm_connid;
+} __packed;
+CTASSERT(sizeof(struct vmbus_chanmsg_choffer) <= VMBUS_MSG_DSIZE_MAX);
+
+#define VMBUS_CHOFFER_FLAG1_HASMNF	0x01
+
 #endif	/* !_VMBUS_REG_H_ */


More information about the svn-src-all mailing list