Author: sephe
Date: Thu Jan  5 05:41:33 2017
New Revision: 311366
URL: https://svnweb.freebsd.org/changeset/base/311366

Log:
  MFC 309236,309237
  
  309236
      hyperv/vmbus: Make sure that the allocated GPADL is not zero.
  
      Sponsored by:   Microsoft
      Differential Revision:  https://reviews.freebsd.org/D8631
  
  309237
      hyperv/vmbus: Stringent GPADL parameter assertion.
  
      Sponsored by:   Microsoft
      Differential Revision:  https://reviews.freebsd.org/D8632

Modified:
  stable/11/sys/dev/hyperv/vmbus/vmbus.c
  stable/11/sys/dev/hyperv/vmbus/vmbus_chan.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/hyperv/vmbus/vmbus.c
==============================================================================
--- stable/11/sys/dev/hyperv/vmbus/vmbus.c      Thu Jan  5 05:29:51 2017        
(r311365)
+++ stable/11/sys/dev/hyperv/vmbus/vmbus.c      Thu Jan  5 05:41:33 2017        
(r311366)
@@ -328,7 +328,13 @@ vmbus_msghc_wakeup(struct vmbus_softc *s
 uint32_t
 vmbus_gpadl_alloc(struct vmbus_softc *sc)
 {
-       return atomic_fetchadd_int(&sc->vmbus_gpadl, 1);
+       uint32_t gpadl;
+
+again:
+       gpadl = atomic_fetchadd_int(&sc->vmbus_gpadl, 1); 
+       if (gpadl == 0)
+               goto again;
+       return (gpadl);
 }
 
 static int

Modified: stable/11/sys/dev/hyperv/vmbus/vmbus_chan.c
==============================================================================
--- stable/11/sys/dev/hyperv/vmbus/vmbus_chan.c Thu Jan  5 05:29:51 2017        
(r311365)
+++ stable/11/sys/dev/hyperv/vmbus/vmbus_chan.c Thu Jan  5 05:41:33 2017        
(r311366)
@@ -502,11 +502,7 @@ vmbus_chan_gpadl_connect(struct vmbus_ch
        int page_count, range_len, i, cnt, error;
        uint64_t page_id;
 
-       /*
-        * Reset GPADL, so that the result would consistent, if error
-        * happened later on.
-        */
-       *gpadl0 = 0;
+       KASSERT(*gpadl0 == 0, ("GPADL is not zero"));
 
        /*
         * Preliminary checks.
@@ -652,6 +648,8 @@ vmbus_chan_gpadl_disconnect(struct vmbus
        struct vmbus_chanmsg_gpadl_disconn *req;
        int error;
 
+       KASSERT(gpadl != 0, ("GPADL is zero"));
+
        mh = vmbus_msghc_get(sc, sizeof(*req));
        if (mh == NULL) {
                vmbus_chan_printf(chan,
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to