Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Nov 2016 05:03:45 +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: r309030 - in head/sys/dev/hyperv: include vmbus
Message-ID:  <201611230503.uAN53juA041626@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Wed Nov 23 05:03:44 2016
New Revision: 309030
URL: https://svnweb.freebsd.org/changeset/base/309030

Log:
  hyperv/vmbus: Set a mark on the revoked channel.
  
  This will be used to fix device detach DEVMETHOD for revoked primary
  channel.
  
  MFC after:	1 week
  Sponsored by:	Microsoft
  Differential Revision:	https://reviews.freebsd.org/D8522

Modified:
  head/sys/dev/hyperv/include/vmbus.h
  head/sys/dev/hyperv/vmbus/vmbus_chan.c
  head/sys/dev/hyperv/vmbus/vmbus_chanvar.h

Modified: head/sys/dev/hyperv/include/vmbus.h
==============================================================================
--- head/sys/dev/hyperv/include/vmbus.h	Wed Nov 23 01:44:28 2016	(r309029)
+++ head/sys/dev/hyperv/include/vmbus.h	Wed Nov 23 05:03:44 2016	(r309030)
@@ -172,6 +172,7 @@ int		vmbus_chan_send_prplist(struct vmbu
 uint32_t	vmbus_chan_id(const struct vmbus_channel *chan);
 uint32_t	vmbus_chan_subidx(const struct vmbus_channel *chan);
 bool		vmbus_chan_is_primary(const struct vmbus_channel *chan);
+bool		vmbus_chan_is_revoked(const struct vmbus_channel *chan);
 const struct hyperv_guid *
 		vmbus_chan_guid_inst(const struct vmbus_channel *chan);
 int		vmbus_chan_prplist_nelem(int br_size, int prpcnt_max,

Modified: head/sys/dev/hyperv/vmbus/vmbus_chan.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_chan.c	Wed Nov 23 01:44:28 2016	(r309029)
+++ head/sys/dev/hyperv/vmbus/vmbus_chan.c	Wed Nov 23 05:03:44 2016	(r309030)
@@ -1220,7 +1220,7 @@ vmbus_chan_add(struct vmbus_channel *new
 	wakeup(prichan);
 done:
 	/*
-	 * Hook this channel up for later rescind.
+	 * Hook this channel up for later revocation.
 	 */
 	mtx_lock(&sc->vmbus_chan_lock);
 	vmbus_chan_ins_list(sc, newchan);
@@ -1368,7 +1368,7 @@ vmbus_chan_msgproc_chrescind(struct vmbu
 
 	note = (const struct vmbus_chanmsg_chrescind *)msg->msg_data;
 	if (note->chm_chanid > VMBUS_CHAN_MAX) {
-		device_printf(sc->vmbus_dev, "invalid rescinded chan%u\n",
+		device_printf(sc->vmbus_dev, "invalid revoked chan%u\n",
 		    note->chm_chanid);
 		return;
 	}
@@ -1403,8 +1403,12 @@ vmbus_chan_msgproc_chrescind(struct vmbu
 		mtx_unlock(&sc->vmbus_prichan_lock);
 	}
 
+	if (atomic_testandset_int(&chan->ch_stflags,
+	    VMBUS_CHAN_ST_REVOKED_SHIFT))
+		panic("channel has already been revoked");
+
 	if (bootverbose)
-		vmbus_chan_printf(chan, "chan%u rescinded\n", note->chm_chanid);
+		vmbus_chan_printf(chan, "chan%u revoked\n", note->chm_chanid);
 
 	/* Detach the target channel. */
 	taskqueue_enqueue(chan->ch_mgmt_tq, &chan->ch_detach_task);
@@ -1695,3 +1699,12 @@ vmbus_chan_mgmt_tq(const struct vmbus_ch
 
 	return (chan->ch_mgmt_tq);
 }
+
+bool
+vmbus_chan_is_revoked(const struct vmbus_channel *chan)
+{
+
+	if (chan->ch_stflags & VMBUS_CHAN_ST_REVOKED)
+		return (true);
+	return (false);
+}

Modified: head/sys/dev/hyperv/vmbus/vmbus_chanvar.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_chanvar.h	Wed Nov 23 01:44:28 2016	(r309029)
+++ head/sys/dev/hyperv/vmbus/vmbus_chanvar.h	Wed Nov 23 05:03:44 2016	(r309030)
@@ -159,10 +159,12 @@ struct vmbus_channel {
 #define VMBUS_CHAN_ST_ONPRIL_SHIFT	1
 #define VMBUS_CHAN_ST_ONSUBL_SHIFT	2
 #define VMBUS_CHAN_ST_ONLIST_SHIFT	3
+#define VMBUS_CHAN_ST_REVOKED_SHIFT	4	/* sticky */
 #define VMBUS_CHAN_ST_OPENED		(1 << VMBUS_CHAN_ST_OPENED_SHIFT)
 #define VMBUS_CHAN_ST_ONPRIL		(1 << VMBUS_CHAN_ST_ONPRIL_SHIFT)
 #define VMBUS_CHAN_ST_ONSUBL		(1 << VMBUS_CHAN_ST_ONSUBL_SHIFT)
 #define VMBUS_CHAN_ST_ONLIST		(1 << VMBUS_CHAN_ST_ONLIST_SHIFT)
+#define VMBUS_CHAN_ST_REVOKED		(1 << VMBUS_CHAN_ST_REVOKED_SHIFT)
 
 struct vmbus_softc;
 struct vmbus_message;



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