Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Aug 2016 04:52:51 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r304784 - head/sys/dev/hyperv/netvsc
Message-ID:  <201608250452.u7P4qpA1092222@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Thu Aug 25 04:52:50 2016
New Revision: 304784
URL: https://svnweb.freebsd.org/changeset/base/304784

Log:
  hyperv/hn: Add compat code for RNDIS reorganization phase.
  
  MFC after:	1 week
  Sponsored by:	Microsoft
  Differential Revision:	https://reviews.freebsd.org/D7621

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

Modified: head/sys/dev/hyperv/netvsc/hv_rndis_filter.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_rndis_filter.c	Thu Aug 25 04:40:51 2016	(r304783)
+++ head/sys/dev/hyperv/netvsc/hv_rndis_filter.c	Thu Aug 25 04:52:50 2016	(r304784)
@@ -62,6 +62,9 @@ __FBSDID("$FreeBSD$");
 	 HV_RF_RECVINFO_HASHINF |	\
 	 HV_RF_RECVINFO_HASHVAL)
 
+#define HN_RNDIS_RID_COMPAT_MASK	0xffff
+#define HN_RNDIS_RID_COMPAT_MAX		HN_RNDIS_RID_COMPAT_MASK
+
 /*
  * Forward declarations
  */
@@ -202,9 +205,8 @@ hv_rndis_request(rndis_device *device, u
 	 * as a template.
 	 */
 	set = &rndis_mesg->msg.set_request;
-	set->request_id = atomic_fetchadd_int(&device->new_request_id, 1);
-	/* Increment to get the new value (call above returns old value) */
-	set->request_id += 1;
+	set->request_id = atomic_fetchadd_int(&device->new_request_id, 1) &
+	    HN_RNDIS_RID_COMPAT_MASK;
 
 	/* Add to the request list */
 	mtx_lock(&device->req_lock);
@@ -552,6 +554,7 @@ hv_rf_on_receive(struct hn_softc *sc, st
 {
 	rndis_device *rndis_dev;
 	const rndis_msg *rndis_hdr;
+	const struct rndis_comp_hdr *comp;
 
 	rndis_dev = sc->rndis_dev;
 	if (rndis_dev->state == RNDIS_DEV_UNINITIALIZED)
@@ -569,7 +572,11 @@ hv_rf_on_receive(struct hn_softc *sc, st
 	case REMOTE_NDIS_QUERY_CMPLT:
 	case REMOTE_NDIS_SET_CMPLT:
 	case REMOTE_NDIS_KEEPALIVE_CMPLT:
-		hv_rf_receive_response(rndis_dev, rndis_hdr);
+		comp = data;
+		if (comp->rm_rid <= HN_RNDIS_RID_COMPAT_MAX) {
+			/* Transition time compat code */
+			hv_rf_receive_response(rndis_dev, rndis_hdr);
+		}
 		break;
 
 	/* notification message */



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