Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Oct 2016 07:10:12 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r307021 - in stable/10/sys/dev/hyperv: include netvsc vmbus
Message-ID:  <201610110710.u9B7ACqT099594@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Tue Oct 11 07:10:12 2016
New Revision: 307021
URL: https://svnweb.freebsd.org/changeset/base/307021

Log:
  MFC 302693-302697
  
  302693
      hyperv/vmbus: Make channel id a field of hv_vmbus_channel.
  
      This prepares to remove the unnecessary offer message embedding in
      hv_vmbus_channel.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7014
  
  302694
      hyperv/vmbus: Make subchan index a field of hv_vmbus_channel.
  
      This prepares to remove the unnecessary offer message embedding in
      hv_vmbus_channel.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7015
  
  302695
      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.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7019
  
  302696
      hyperv/vmbus: Add type/instance guid fields into hv_vmbus_channel
  
      This prepares to remove the unnecessary offer message embedding in
      hv_vmbus_channel.
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7020
  
  302697
      hyperv/vmbus: Remove the embedded offer message from hv_vmbus_channel
  
      Sponsored by:   Microsoft OSTC
      Differential Revision:  https://reviews.freebsd.org/D7021

Modified:
  stable/10/sys/dev/hyperv/include/hyperv.h
  stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  stable/10/sys/dev/hyperv/vmbus/hv_channel.c
  stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
  stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
  stable/10/sys/dev/hyperv/vmbus/vmbus.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/hyperv/include/hyperv.h
==============================================================================
--- stable/10/sys/dev/hyperv/include/hyperv.h	Tue Oct 11 07:00:43 2016	(r307020)
+++ stable/10/sys/dev/hyperv/include/hyperv.h	Tue Oct 11 07:10:12 2016	(r307021)
@@ -537,7 +537,8 @@ typedef struct hv_vmbus_channel {
 	struct hv_device*		device;
 	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.
 	 * Save it here for easy access.
@@ -628,12 +629,18 @@ typedef struct hv_vmbus_channel {
 
 	struct task			ch_detach_task;
 	TAILQ_ENTRY(hv_vmbus_channel)	ch_link;
+	uint32_t			ch_subidx;	/* subchan index */
+
+	struct hv_guid			ch_guid_type;
+	struct hv_guid			ch_guid_inst;
 
 	struct sysctl_ctx_list		ch_sysctl_ctx;
 } 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: stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Tue Oct 11 07:00:43 2016	(r307020)
+++ stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Tue Oct 11 07:10:12 2016	(r307021)
@@ -534,9 +534,9 @@ netvsc_attach(device_t dev)
 	 */
 	pri_chan = device_ctx->channel;
 	KASSERT(HV_VMBUS_CHAN_ISPRIMARY(pri_chan), ("not primary channel"));
-	KASSERT(pri_chan->offer_msg.offer.sub_channel_index == 0,
+	KASSERT(pri_chan->ch_subidx == 0,
 	    ("primary channel subidx %u",
-	     pri_chan->offer_msg.offer.sub_channel_index));
+	     pri_chan->ch_subidx));
 	hn_channel_attach(sc, pri_chan);
 
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
@@ -821,8 +821,8 @@ hn_tx_done(struct hv_vmbus_channel *chan
 	txr = txd->txr;
 	KASSERT(txr->hn_chan == chan,
 	    ("channel mismatch, on channel%u, should be channel%u",
-	     chan->offer_msg.offer.sub_channel_index,
-	     txr->hn_chan->offer_msg.offer.sub_channel_index));
+	     chan->ch_subidx,
+	     txr->hn_chan->ch_subidx));
 
 	txr->hn_has_txeof = 1;
 	hn_txdesc_put(txr, txd);
@@ -2996,7 +2996,7 @@ hn_channel_attach(struct hn_softc *sc, s
 	struct hn_rx_ring *rxr;
 	int idx;
 
-	idx = chan->offer_msg.offer.sub_channel_index;
+	idx = chan->ch_subidx;
 
 	KASSERT(idx >= 0 && idx < sc->hn_rx_ring_inuse,
 	    ("invalid channel index %d, should > 0 && < %d",
@@ -3009,7 +3009,7 @@ hn_channel_attach(struct hn_softc *sc, s
 	chan->hv_chan_rxr = rxr;
 	if (bootverbose) {
 		if_printf(sc->hn_ifp, "link RX ring %d to channel%u\n",
-		    idx, chan->offer_msg.child_rel_id);
+		    idx, chan->ch_id);
 	}
 
 	if (idx < sc->hn_tx_ring_inuse) {
@@ -3023,7 +3023,7 @@ hn_channel_attach(struct hn_softc *sc, s
 		txr->hn_chan = chan;
 		if (bootverbose) {
 			if_printf(sc->hn_ifp, "link TX ring %d to channel%u\n",
-			    idx, chan->offer_msg.child_rel_id);
+			    idx, chan->ch_id);
 		}
 	}
 
@@ -3037,9 +3037,9 @@ hn_subchan_attach(struct hn_softc *sc, s
 
 	KASSERT(!HV_VMBUS_CHAN_ISPRIMARY(chan),
 	    ("subchannel callback on primary channel"));
-	KASSERT(chan->offer_msg.offer.sub_channel_index > 0,
+	KASSERT(chan->ch_subidx > 0,
 	    ("invalid channel subidx %u",
-	     chan->offer_msg.offer.sub_channel_index));
+	     chan->ch_subidx));
 	hn_channel_attach(sc, chan);
 }
 

Modified: stable/10/sys/dev/hyperv/vmbus/hv_channel.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_channel.c	Tue Oct 11 07:00:43 2016	(r307020)
+++ stable/10/sys/dev/hyperv/vmbus/hv_channel.c	Tue Oct 11 07:10:12 2016	(r307021)
@@ -62,12 +62,12 @@ static void
 vmbus_channel_set_event(hv_vmbus_channel *channel)
 {
 	struct vmbus_softc *sc = channel->vmbus_sc;
-	uint32_t chanid = channel->offer_msg.child_rel_id;
+	uint32_t chanid = channel->ch_id;
 
 	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);
 }
@@ -107,11 +107,11 @@ vmbus_channel_sysctl_create(hv_vmbus_cha
 
 	if (primary_ch == NULL) {
 		dev = channel->device->device;
-		ch_id = channel->offer_msg.child_rel_id;
+		ch_id = channel->ch_id;
 	} else {
 		dev = primary_ch->device->device;
-		ch_id = primary_ch->offer_msg.child_rel_id;
-		sub_ch_id = channel->offer_msg.offer.sub_channel_index;
+		ch_id = primary_ch->ch_id;
+		sub_ch_id = channel->ch_subidx;
 	}
 	ctx = &channel->ch_sysctl_ctx;
 	sysctl_ctx_init(ctx);
@@ -136,7 +136,7 @@ vmbus_channel_sysctl_create(hv_vmbus_cha
 
 		SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(devch_id_sysctl),
 		    OID_AUTO, "chanid", CTLFLAG_RD,
-		    &channel->offer_msg.child_rel_id, 0, "channel id");
+		    &channel->ch_id, 0, "channel id");
 	}
 	SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(devch_id_sysctl), OID_AUTO,
 	    "cpu", CTLFLAG_RD, &channel->target_cpu, 0, "owner CPU id");
@@ -190,7 +190,7 @@ hv_vmbus_channel_open(
 	if (user_data_len > VMBUS_CHANMSG_CHOPEN_UDATA_SIZE) {
 		device_printf(sc->vmbus_dev,
 		    "invalid udata len %u for chan%u\n",
-		    user_data_len, new_channel->offer_msg.child_rel_id);
+		    user_data_len, new_channel->ch_id);
 		return EINVAL;
 	}
 
@@ -261,14 +261,14 @@ hv_vmbus_channel_open(
 	if (mh == NULL) {
 		device_printf(sc->vmbus_dev,
 		    "can not get msg hypercall for chopen(chan%u)\n",
-		    new_channel->offer_msg.child_rel_id);
+		    new_channel->ch_id);
 		return ENXIO;
 	}
 
 	req = vmbus_msghc_dataptr(mh);
 	req->chm_hdr.chm_type = VMBUS_CHANMSG_TYPE_CHOPEN;
-	req->chm_chanid = new_channel->offer_msg.child_rel_id;
-	req->chm_openid = new_channel->offer_msg.child_rel_id;
+	req->chm_chanid = new_channel->ch_id;
+	req->chm_openid = new_channel->ch_id;
 	req->chm_gpadl = new_channel->ring_buffer_gpadl_handle;
 	req->chm_vcpuid = new_channel->target_vcpu;
 	req->chm_rxbr_pgofs = send_ring_buffer_size >> PAGE_SHIFT;
@@ -279,7 +279,7 @@ hv_vmbus_channel_open(
 	if (ret != 0) {
 		device_printf(sc->vmbus_dev,
 		    "chopen(chan%u) msg hypercall exec failed: %d\n",
-		    new_channel->offer_msg.child_rel_id, ret);
+		    new_channel->ch_id, ret);
 		vmbus_msghc_put(sc, mh);
 		return ret;
 	}
@@ -294,11 +294,11 @@ hv_vmbus_channel_open(
 		new_channel->state = HV_CHANNEL_OPENED_STATE;
 		if (bootverbose) {
 			device_printf(sc->vmbus_dev, "chan%u opened\n",
-			    new_channel->offer_msg.child_rel_id);
+			    new_channel->ch_id);
 		}
 	} else {
 		device_printf(sc->vmbus_dev, "failed to open chan%u\n",
-		    new_channel->offer_msg.child_rel_id);
+		    new_channel->ch_id);
 		ret = ENXIO;
 	}
 	return (ret);
@@ -369,13 +369,13 @@ hv_vmbus_channel_establish_gpadl(struct 
 	if (mh == NULL) {
 		device_printf(sc->vmbus_dev,
 		    "can not get msg hypercall for gpadl->chan%u\n",
-		    channel->offer_msg.child_rel_id);
+		    channel->ch_id);
 		return EIO;
 	}
 
 	req = vmbus_msghc_dataptr(mh);
 	req->chm_hdr.chm_type = VMBUS_CHANMSG_TYPE_GPADL_CONN;
-	req->chm_chanid = channel->offer_msg.child_rel_id;
+	req->chm_chanid = channel->ch_id;
 	req->chm_gpadl = gpadl;
 	req->chm_range_len = range_len;
 	req->chm_range_cnt = 1;
@@ -388,7 +388,7 @@ hv_vmbus_channel_establish_gpadl(struct 
 	if (error) {
 		device_printf(sc->vmbus_dev,
 		    "gpadl->chan%u msg hypercall exec failed: %d\n",
-		    channel->offer_msg.child_rel_id, error);
+		    channel->ch_id, error);
 		vmbus_msghc_put(sc, mh);
 		return error;
 	}
@@ -424,12 +424,12 @@ hv_vmbus_channel_establish_gpadl(struct 
 
 	if (status != 0) {
 		device_printf(sc->vmbus_dev, "gpadl->chan%u failed: "
-		    "status %u\n", channel->offer_msg.child_rel_id, status);
+		    "status %u\n", channel->ch_id, status);
 		return EIO;
 	} else {
 		if (bootverbose) {
 			device_printf(sc->vmbus_dev, "gpadl->chan%u "
-			    "succeeded\n", channel->offer_msg.child_rel_id);
+			    "succeeded\n", channel->ch_id);
 		}
 	}
 	return 0;
@@ -450,20 +450,20 @@ hv_vmbus_channel_teardown_gpdal(struct h
 	if (mh == NULL) {
 		device_printf(sc->vmbus_dev,
 		    "can not get msg hypercall for gpa x->chan%u\n",
-		    chan->offer_msg.child_rel_id);
+		    chan->ch_id);
 		return EBUSY;
 	}
 
 	req = vmbus_msghc_dataptr(mh);
 	req->chm_hdr.chm_type = VMBUS_CHANMSG_TYPE_GPADL_DISCONN;
-	req->chm_chanid = chan->offer_msg.child_rel_id;
+	req->chm_chanid = chan->ch_id;
 	req->chm_gpadl = gpadl;
 
 	error = vmbus_msghc_exec(sc, mh);
 	if (error) {
 		device_printf(sc->vmbus_dev,
 		    "gpa x->chan%u msg hypercall exec failed: %d\n",
-		    chan->offer_msg.child_rel_id, error);
+		    chan->ch_id, error);
 		vmbus_msghc_put(sc, mh);
 		return error;
 	}
@@ -502,13 +502,13 @@ hv_vmbus_channel_close_internal(hv_vmbus
 	if (mh == NULL) {
 		device_printf(sc->vmbus_dev,
 		    "can not get msg hypercall for chclose(chan%u)\n",
-		    channel->offer_msg.child_rel_id);
+		    channel->ch_id);
 		return;
 	}
 
 	req = vmbus_msghc_dataptr(mh);
 	req->chm_hdr.chm_type = VMBUS_CHANMSG_TYPE_CHCLOSE;
-	req->chm_chanid = channel->offer_msg.child_rel_id;
+	req->chm_chanid = channel->ch_id;
 
 	error = vmbus_msghc_exec_noresult(mh);
 	vmbus_msghc_put(sc, mh);
@@ -516,11 +516,11 @@ hv_vmbus_channel_close_internal(hv_vmbus
 	if (error) {
 		device_printf(sc->vmbus_dev,
 		    "chclose(chan%u) msg hypercall exec failed: %d\n",
-		    channel->offer_msg.child_rel_id, error);
+		    channel->ch_id, error);
 		return;
 	} else if (bootverbose) {
 		device_printf(sc->vmbus_dev, "close chan%u\n",
-		    channel->offer_msg.child_rel_id);
+		    channel->ch_id);
 	}
 
 	/* Tear down the gpadl for the channel's ring buffer */
@@ -957,7 +957,7 @@ vmbus_chan_update_evtflagcnt(struct vmbu
 	volatile int *flag_cnt_ptr;
 	int flag_cnt;
 
-	flag_cnt = (chan->offer_msg.child_rel_id / VMBUS_EVTFLAG_LEN) + 1;
+	flag_cnt = (chan->ch_id / VMBUS_EVTFLAG_LEN) + 1;
 	flag_cnt_ptr = VMBUS_PCPU_PTR(sc, event_flags_cnt, chan->target_cpu);
 
 	for (;;) {
@@ -970,7 +970,7 @@ vmbus_chan_update_evtflagcnt(struct vmbu
 			if (bootverbose) {
 				device_printf(sc->vmbus_dev,
 				    "channel%u update cpu%d flag_cnt to %d\n",
-				    chan->offer_msg.child_rel_id,
+				    chan->ch_id,
 				    chan->target_cpu, flag_cnt);
 			}
 			break;

Modified: stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Tue Oct 11 07:00:43 2016	(r307020)
+++ stable/10/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Tue Oct 11 07:10:12 2016	(r307021)
@@ -115,7 +115,7 @@ vmbus_channel_process_offer(hv_vmbus_cha
 	hv_vmbus_channel*	channel;
 	uint32_t                relid;
 
-	relid = new_channel->offer_msg.child_rel_id;
+	relid = new_channel->ch_id;
 	/*
 	 * Make sure this is a new offer
 	 */
@@ -130,11 +130,9 @@ vmbus_channel_process_offer(hv_vmbus_cha
 	}
 
 	TAILQ_FOREACH(channel, &sc->vmbus_chlist, ch_link) {
-		if (memcmp(&channel->offer_msg.offer.interface_type,
-		    &new_channel->offer_msg.offer.interface_type,
+		if (memcmp(&channel->ch_guid_type, &new_channel->ch_guid_type,
 		    sizeof(hv_guid)) == 0 &&
-		    memcmp(&channel->offer_msg.offer.interface_instance,
-		    &new_channel->offer_msg.offer.interface_instance,
+		    memcmp(&channel->ch_guid_inst, &new_channel->ch_guid_inst,
 		    sizeof(hv_guid)) == 0)
 			break;
 	}
@@ -151,18 +149,18 @@ vmbus_channel_process_offer(hv_vmbus_cha
 		logstr[0] = '\0';
 		if (channel != NULL) {
 			snprintf(logstr, sizeof(logstr), ", primary chan%u",
-			    channel->offer_msg.child_rel_id);
+			    channel->ch_id);
 		}
 		device_printf(sc->vmbus_dev, "chan%u subchanid%u offer%s\n",
-		    new_channel->offer_msg.child_rel_id,
-		    new_channel->offer_msg.offer.sub_channel_index, logstr);
+		    new_channel->ch_id,
+		    new_channel->ch_subidx, logstr);
 	}
 
 	if (channel != NULL) {
 		/*
 		 * Check if this is a sub channel.
 		 */
-		if (new_channel->offer_msg.offer.sub_channel_index != 0) {
+		if (new_channel->ch_subidx != 0) {
 			/*
 			 * It is a sub channel offer, process it.
 			 */
@@ -203,7 +201,7 @@ vmbus_channel_process_offer(hv_vmbus_cha
 		}
 
 		printf("VMBUS: duplicated primary channel%u\n",
-		    new_channel->offer_msg.child_rel_id);
+		    new_channel->ch_id);
 		hv_vmbus_free_vmbus_channel(new_channel);
 		return;
 	}
@@ -215,9 +213,7 @@ vmbus_channel_process_offer(hv_vmbus_cha
 	 * (We need to set the device field before calling
 	 * hv_vmbus_child_device_add())
 	 */
-	new_channel->device = hv_vmbus_child_device_create(
-	    new_channel->offer_msg.offer.interface_type,
-	    new_channel->offer_msg.offer.interface_instance, new_channel);
+	new_channel->device = hv_vmbus_child_device_create(new_channel);
 
 	/*
 	 * Add the new device to the bus. This will kick off device-driver
@@ -244,7 +240,7 @@ vmbus_channel_cpu_set(struct hv_vmbus_ch
 
 	if (bootverbose) {
 		printf("vmbus_chan%u: assigned to cpu%u [vcpu%u]\n",
-		    chan->offer_msg.child_rel_id,
+		    chan->ch_id,
 		    chan->target_cpu, chan->target_vcpu);
 	}
 }
@@ -295,6 +291,12 @@ 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;
+	if (offer->monitor_allocated)
+		new_channel->ch_flags |= VMBUS_CHAN_FLAG_HASMNF;
+	new_channel->ch_guid_type = offer->offer.interface_type;
+	new_channel->ch_guid_inst = offer->offer.interface_instance;
 
 	/*
 	 * By default we setup state to enable batched
@@ -322,8 +324,6 @@ vmbus_channel_on_offer_internal(struct v
 		new_channel->ch_sigevt->hc_connid = offer->connection_id;
 	}
 
-	memcpy(&new_channel->offer_msg, offer,
-	    sizeof(hv_vmbus_channel_offer_channel));
 	new_channel->monitor_group = (uint8_t) offer->monitor_id / 32;
 	new_channel->monitor_bit = (uint8_t) offer->monitor_id % 32;
 
@@ -382,13 +382,13 @@ vmbus_chan_detach_task(void *xchan, int 
 		if (mh == NULL) {
 			device_printf(sc->vmbus_dev,
 			    "can not get msg hypercall for chfree(chan%u)\n",
-			    chan->offer_msg.child_rel_id);
+			    chan->ch_id);
 			goto remove;
 		}
 
 		req = vmbus_msghc_dataptr(mh);
 		req->chm_hdr.chm_type = VMBUS_CHANMSG_TYPE_CHFREE;
-		req->chm_chanid = chan->offer_msg.child_rel_id;
+		req->chm_chanid = chan->ch_id;
 
 		error = vmbus_msghc_exec_noresult(mh);
 		vmbus_msghc_put(sc, mh);
@@ -396,12 +396,12 @@ vmbus_chan_detach_task(void *xchan, int 
 		if (error) {
 			device_printf(sc->vmbus_dev,
 			    "chfree(chan%u) failed: %d",
-			    chan->offer_msg.child_rel_id, error);
+			    chan->ch_id, error);
 			/* NOTE: Move on! */
 		} else {
 			if (bootverbose) {
 				device_printf(sc->vmbus_dev, "chan%u freed\n",
-				    chan->offer_msg.child_rel_id);
+				    chan->ch_id);
 			}
 		}
 remove:

Modified: stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h	Tue Oct 11 07:00:43 2016	(r307020)
+++ stable/10/sys/dev/hyperv/vmbus/hv_vmbus_priv.h	Tue Oct 11 07:10:12 2016	(r307021)
@@ -213,9 +213,7 @@ void			hv_vmbus_release_unattached_chann
 			    struct vmbus_softc *);
 
 struct hv_device*	hv_vmbus_child_device_create(
-				hv_guid			device_type,
-				hv_guid			device_instance,
-				hv_vmbus_channel	*channel);
+			    struct hv_vmbus_channel *channel);
 
 void			hv_vmbus_child_device_register(struct vmbus_softc *,
 					struct hv_device *child_dev);

Modified: stable/10/sys/dev/hyperv/vmbus/vmbus.c
==============================================================================
--- stable/10/sys/dev/hyperv/vmbus/vmbus.c	Tue Oct 11 07:00:43 2016	(r307020)
+++ stable/10/sys/dev/hyperv/vmbus/vmbus.c	Tue Oct 11 07:10:12 2016	(r307021)
@@ -1097,8 +1097,7 @@ vmbus_child_pnpinfo_str(device_t dev, de
 }
 
 struct hv_device *
-hv_vmbus_child_device_create(hv_guid type, hv_guid instance,
-    hv_vmbus_channel *channel)
+hv_vmbus_child_device_create(struct hv_vmbus_channel *channel)
 {
 	hv_device *child_dev;
 
@@ -1108,8 +1107,8 @@ hv_vmbus_child_device_create(hv_guid typ
 	child_dev = malloc(sizeof(hv_device), M_DEVBUF, M_WAITOK | M_ZERO);
 
 	child_dev->channel = channel;
-	memcpy(&child_dev->class_id, &type, sizeof(hv_guid));
-	memcpy(&child_dev->device_id, &instance, sizeof(hv_guid));
+	child_dev->class_id = channel->ch_guid_type;
+	child_dev->device_id = channel->ch_guid_inst;
 
 	return (child_dev);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201610110710.u9B7ACqT099594>