svn commit: r305761 - head/sys/dev/hyperv/netvsc

Sepherosa Ziehau sephe at FreeBSD.org
Tue Sep 13 05:41:14 UTC 2016


Author: sephe
Date: Tue Sep 13 05:41:13 2016
New Revision: 305761
URL: https://svnweb.freebsd.org/changeset/base/305761

Log:
  hyperv/hn: Regroup synthetic parts attach code.
  
  MFC after:	1 week
  Sponsored by:	Microsoft
  Differential Revision:	https://reviews.freebsd.org/D7859

Modified:
  head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c

Modified: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Tue Sep 13 05:27:36 2016	(r305760)
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Tue Sep 13 05:41:13 2016	(r305761)
@@ -523,12 +523,40 @@ netvsc_attach(device_t dev)
 		goto failed;
 
 	/*
+	 * Create transaction context for NVS and RNDIS transactions.
+	 */
+	sc->hn_xact = vmbus_xact_ctx_create(bus_get_dma_tag(dev),
+	    HN_XACT_REQ_SIZE, HN_XACT_RESP_SIZE, 0);
+	if (sc->hn_xact == NULL)
+		goto failed;
+
+	/*
 	 * Attach the primary channel before attaching NVS and RNDIS.
 	 */
 	error = hn_chan_attach(sc, sc->hn_prichan);
 	if (error)
 		goto failed;
 
+	/*
+	 * Attach NVS and RNDIS (synthetic parts).
+	 */
+	error = hv_rf_on_device_add(sc, &ring_cnt, ETHERMTU);
+	if (error)
+		goto failed;
+
+	/*
+	 * Set the # of TX/RX rings that could be used according to
+	 * the # of channels that host offered.
+	 */
+	hn_set_ring_inuse(sc, ring_cnt);
+
+	/*
+	 * Attach the sub-channels, if any.
+	 */
+	error = hn_attach_subchans(sc);
+	if (error)
+		goto failed;
+
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = hn_ioctl;
 	ifp->if_init = hn_ifinit;
@@ -563,31 +591,6 @@ netvsc_attach(device_t dev)
 	    IFCAP_LRO;
 	ifp->if_hwassist = sc->hn_tx_ring[0].hn_csum_assist | CSUM_TSO;
 
-	sc->hn_xact = vmbus_xact_ctx_create(bus_get_dma_tag(dev),
-	    HN_XACT_REQ_SIZE, HN_XACT_RESP_SIZE, 0);
-	if (sc->hn_xact == NULL)
-		goto failed;
-
-	error = hv_rf_on_device_add(sc, &ring_cnt, ETHERMTU);
-	if (error)
-		goto failed;
-	KASSERT(ring_cnt > 0 && ring_cnt <= sc->hn_rx_ring_inuse,
-	    ("invalid channel count %d, should be less than %d",
-	     ring_cnt, sc->hn_rx_ring_inuse));
-
-	/*
-	 * Set the # of TX/RX rings that could be used according to
-	 * the # of channels that host offered.
-	 */
-	hn_set_ring_inuse(sc, ring_cnt);
-
-	/*
-	 * Attach the sub-channels, if any.
-	 */
-	error = hn_attach_subchans(sc);
-	if (error)
-		goto failed;
-
 #if __FreeBSD_version >= 1100099
 	if (sc->hn_rx_ring_inuse > 1) {
 		/*


More information about the svn-src-all mailing list