Author: sephe
Date: Wed Jul 13 03:35:22 2016
New Revision: 302694
URL: https://svnweb.freebsd.org/changeset/base/302694

Log:
  hyperv/vmbus: Make subchan index a field of hv_vmbus_channel.
  
  This prepares to remove the unnecessary offer message embedding in
  hv_vmbus_channel.
  
  MFC after:    1 week
  Sponsored by: Microsoft OSTC
  Differential Revision:        https://reviews.freebsd.org/D7015

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

Modified: head/sys/dev/hyperv/include/hyperv.h
==============================================================================
--- head/sys/dev/hyperv/include/hyperv.h        Wed Jul 13 03:24:29 2016        
(r302693)
+++ head/sys/dev/hyperv/include/hyperv.h        Wed Jul 13 03:35:22 2016        
(r302694)
@@ -629,6 +629,7 @@ typedef struct hv_vmbus_channel {
 
        struct task                     ch_detach_task;
        TAILQ_ENTRY(hv_vmbus_channel)   ch_link;
+       uint32_t                        ch_subidx;      /* subchan index */
 
        struct sysctl_ctx_list          ch_sysctl_ctx;
 } hv_vmbus_channel;

Modified: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c  Wed Jul 13 03:24:29 
2016        (r302693)
+++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c  Wed Jul 13 03:35:22 
2016        (r302694)
@@ -518,9 +518,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;
@@ -809,8 +809,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);
@@ -2940,7 +2940,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",
@@ -2981,9 +2981,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: head/sys/dev/hyperv/vmbus/hv_channel.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel.c      Wed Jul 13 03:24:29 2016        
(r302693)
+++ head/sys/dev/hyperv/vmbus/hv_channel.c      Wed Jul 13 03:35:22 2016        
(r302694)
@@ -111,7 +111,7 @@ vmbus_channel_sysctl_create(hv_vmbus_cha
        } else {
                dev = primary_ch->device->device;
                ch_id = primary_ch->ch_id;
-               sub_ch_id = channel->offer_msg.offer.sub_channel_index;
+               sub_ch_id = channel->ch_subidx;
        }
        ctx = &channel->ch_sysctl_ctx;
        sysctl_ctx_init(ctx);

Modified: head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Wed Jul 13 03:24:29 2016        
(r302693)
+++ head/sys/dev/hyperv/vmbus/hv_channel_mgmt.c Wed Jul 13 03:35:22 2016        
(r302694)
@@ -152,14 +152,14 @@ vmbus_channel_process_offer(hv_vmbus_cha
                }
                device_printf(sc->vmbus_dev, "chan%u subchanid%u offer%s\n",
                    new_channel->ch_id,
-                   new_channel->offer_msg.offer.sub_channel_index, logstr);
+                   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.
                         */
@@ -293,6 +293,7 @@ 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;
 
        /*
         * By default we setup state to enable batched
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to