svn commit: r302706 - in head/sys/dev/hyperv: include vmbus

Sepherosa Ziehau sephe at FreeBSD.org
Wed Jul 13 06:17:17 UTC 2016


Author: sephe
Date: Wed Jul 13 06:17:15 2016
New Revision: 302706
URL: https://svnweb.freebsd.org/changeset/base/302706

Log:
  hyperv: Get rid of hv_device, which is unnecessary indirection.
  
  MFC after:	1 week
  Sponsored by:	Microsoft OSTC
  Differential Revision:	https://reviews.freebsd.org/D7034

Modified:
  head/sys/dev/hyperv/include/hyperv.h
  head/sys/dev/hyperv/vmbus/hv_channel.c
  head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
  head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
  head/sys/dev/hyperv/vmbus/vmbus.c

Modified: head/sys/dev/hyperv/include/hyperv.h
==============================================================================
--- head/sys/dev/hyperv/include/hyperv.h	Wed Jul 13 06:09:34 2016	(r302705)
+++ head/sys/dev/hyperv/include/hyperv.h	Wed Jul 13 06:17:15 2016	(r302706)
@@ -399,24 +399,6 @@ typedef struct {
 
 #define HW_MACADDR_LEN	6
 
-enum {
-	HV_VMBUS_IVAR_TYPE,
-	HV_VMBUS_IVAR_INSTANCE,
-	HV_VMBUS_IVAR_NODE,
-	HV_VMBUS_IVAR_DEVCTX,
-	HV_VMBUS_IVAR_CHAN,
-};
-
-#define HV_VMBUS_ACCESSOR(var, ivar, type) \
-		__BUS_ACCESSOR(vmbus, var, HV_VMBUS, ivar, type)
-
-struct hv_vmbus_channel;
-
-HV_VMBUS_ACCESSOR(type, TYPE,  const char *)
-HV_VMBUS_ACCESSOR(devctx, DEVCTX,  struct hv_device *)
-HV_VMBUS_ACCESSOR(channel, CHAN, struct hv_vmbus_channel *)
-
-
 /*
  * Common defines for Hyper-V ICs
  */
@@ -538,7 +520,6 @@ typedef union {
 } __packed hv_vmbus_connection_id;
 
 typedef struct hv_vmbus_channel {
-	struct hv_device*		device;
 	device_t			ch_dev;
 	struct vmbus_softc		*vmbus_sc;
 	hv_vmbus_channel_state		state;
@@ -652,15 +633,6 @@ hv_set_channel_read_state(hv_vmbus_chann
 	channel->batched_reading = state;
 }
 
-typedef struct hv_device {
-	hv_guid		    class_id;
-	hv_guid		    device_id;
-	device_t	    device;
-	hv_vmbus_channel*   channel;
-} hv_device;
-
-
-
 int		hv_vmbus_channel_recv_packet(
 				hv_vmbus_channel*	channel,
 				void*			buffer,
@@ -742,4 +714,10 @@ hv_get_phys_addr(void *virt)
 	return (ret);
 }
 
+static __inline struct hv_vmbus_channel *
+vmbus_get_channel(device_t dev)
+{
+	return device_get_ivars(dev);
+}
+
 #endif  /* __HYPERV_H__ */

Modified: head/sys/dev/hyperv/vmbus/hv_channel.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel.c	Wed Jul 13 06:09:34 2016	(r302705)
+++ head/sys/dev/hyperv/vmbus/hv_channel.c	Wed Jul 13 06:17:15 2016	(r302706)
@@ -106,10 +106,10 @@ vmbus_channel_sysctl_create(hv_vmbus_cha
 	hv_vmbus_channel* primary_ch = channel->primary_channel;
 
 	if (primary_ch == NULL) {
-		dev = channel->device->device;
+		dev = channel->ch_dev;
 		ch_id = channel->ch_id;
 	} else {
-		dev = primary_ch->device->device;
+		dev = primary_ch->ch_dev;
 		ch_id = primary_ch->ch_id;
 		sub_ch_id = channel->ch_subidx;
 	}

Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Wed Jul 13 06:09:34 2016	(r302705)
+++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c	Wed Jul 13 06:17:15 2016	(r302706)
@@ -162,7 +162,6 @@ vmbus_channel_process_offer(hv_vmbus_cha
 			 * It is a sub channel offer, process it.
 			 */
 			new_channel->primary_channel = channel;
-			new_channel->device = channel->device;
 			new_channel->ch_dev = channel->ch_dev;
 			mtx_lock(&channel->sc_lock);
 			TAILQ_INSERT_TAIL(&channel->sc_list_anchor,
@@ -207,13 +206,6 @@ vmbus_channel_process_offer(hv_vmbus_cha
 	new_channel->state = HV_CHANNEL_OPEN_STATE;
 
 	/*
-	 * Start the process of binding this offer to the driver
-	 * (We need to set the device field before calling
-	 * hv_vmbus_child_device_add())
-	 */
-	new_channel->device = hv_vmbus_child_device_create(new_channel);
-
-	/*
 	 * Add the new device to the bus. This will kick off device-driver
 	 * binding which eventually invokes the device driver's AddDevice()
 	 * method.

Modified: head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h	Wed Jul 13 06:09:34 2016	(r302705)
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h	Wed Jul 13 06:17:15 2016	(r302706)
@@ -212,9 +212,6 @@ void			hv_vmbus_free_vmbus_channel(hv_vm
 void			hv_vmbus_release_unattached_channels(
 			    struct vmbus_softc *);
 
-struct hv_device*	hv_vmbus_child_device_create(
-			    struct hv_vmbus_channel *channel);
-
 int			hv_vmbus_child_device_register(
 					struct hv_vmbus_channel *chan);
 int			hv_vmbus_child_device_unregister(

Modified: head/sys/dev/hyperv/vmbus/vmbus.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus.c	Wed Jul 13 06:09:34 2016	(r302705)
+++ head/sys/dev/hyperv/vmbus/vmbus.c	Wed Jul 13 06:17:15 2016	(r302706)
@@ -960,29 +960,6 @@ vmbus_intr_teardown(struct vmbus_softc *
 static int
 vmbus_read_ivar(device_t dev, device_t child, int index, uintptr_t *result)
 {
-	struct hv_device *child_dev_ctx = device_get_ivars(child);
-
-	switch (index) {
-	case HV_VMBUS_IVAR_TYPE:
-		*result = (uintptr_t)&child_dev_ctx->class_id;
-		return (0);
-
-	case HV_VMBUS_IVAR_INSTANCE:
-		*result = (uintptr_t)&child_dev_ctx->device_id;
-		return (0);
-
-	case HV_VMBUS_IVAR_DEVCTX:
-		*result = (uintptr_t)child_dev_ctx;
-		return (0);
-
-	case HV_VMBUS_IVAR_NODE:
-		*result = (uintptr_t)child_dev_ctx->device;
-		return (0);
-
-	case HV_VMBUS_IVAR_CHAN:
-		*result = (uintptr_t)child_dev_ctx->channel;
-		return (0);
-	}
 	return (ENOENT);
 }
 
@@ -992,11 +969,11 @@ vmbus_child_pnpinfo_str(device_t dev, de
 	const struct hv_vmbus_channel *chan;
 	char guidbuf[HYPERV_GUID_STRLEN];
 
-	if (device_get_ivars(child) == NULL) {
+	chan = vmbus_get_channel(child);
+	if (chan == NULL) {
 		/* Event timer device, which does not belong to a channel */
 		return (0);
 	}
-	chan = vmbus_get_channel(child);
 
 	strlcat(buf, "classid=", buflen);
 	hyperv_guid2str(&chan->ch_guid_type, guidbuf, sizeof(guidbuf));
@@ -1009,23 +986,6 @@ vmbus_child_pnpinfo_str(device_t dev, de
 	return (0);
 }
 
-struct hv_device *
-hv_vmbus_child_device_create(struct hv_vmbus_channel *channel)
-{
-	hv_device *child_dev;
-
-	/*
-	 * Allocate the new child device
-	 */
-	child_dev = malloc(sizeof(hv_device), M_DEVBUF, M_WAITOK | M_ZERO);
-
-	child_dev->channel = channel;
-	child_dev->class_id = channel->ch_guid_type;
-	child_dev->device_id = channel->ch_guid_inst;
-
-	return (child_dev);
-}
-
 int
 hv_vmbus_child_device_register(struct hv_vmbus_channel *chan)
 {
@@ -1040,8 +1000,7 @@ hv_vmbus_child_device_register(struct hv
 		error = ENXIO;
 		goto done;
 	}
-	chan->device->device = chan->ch_dev;
-	device_set_ivars(chan->ch_dev, chan->device);
+	device_set_ivars(chan->ch_dev, chan);
 
 done:
 	/* New device has been/should be added to vmbus. */


More information about the svn-src-head mailing list