Author: glebius
Date: Wed Feb  3 22:02:36 2016
New Revision: 295221
URL: https://svnweb.freebsd.org/changeset/base/295221

Log:
  Move uma_dbg_alloc() and uma_dbg_free() into uma_core.c, which allows
  to make uma_dbg.h not depend on uma_int.h, which allows to uninclude
  uma_int.h from the mbuf(9) allocator.

Modified:
  head/sys/kern/kern_mbuf.c
  head/sys/vm/uma_core.c
  head/sys/vm/uma_dbg.c
  head/sys/vm/uma_dbg.h

Modified: head/sys/kern/kern_mbuf.c
==============================================================================
--- head/sys/kern/kern_mbuf.c   Wed Feb  3 21:56:51 2016        (r295220)
+++ head/sys/kern/kern_mbuf.c   Wed Feb  3 22:02:36 2016        (r295221)
@@ -52,7 +52,6 @@ __FBSDID("$FreeBSD$");
 #include <vm/vm_page.h>
 #include <vm/vm_map.h>
 #include <vm/uma.h>
-#include <vm/uma_int.h>
 #include <vm/uma_dbg.h>
 
 /*

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c      Wed Feb  3 21:56:51 2016        (r295220)
+++ head/sys/vm/uma_core.c      Wed Feb  3 22:02:36 2016        (r295221)
@@ -275,6 +275,11 @@ void uma_print_stats(void);
 static int sysctl_vm_zone_count(SYSCTL_HANDLER_ARGS);
 static int sysctl_vm_zone_stats(SYSCTL_HANDLER_ARGS);
 
+#ifdef INVARIANTS
+static void uma_dbg_free(uma_zone_t zone, uma_slab_t slab, void *item);
+static void uma_dbg_alloc(uma_zone_t zone, uma_slab_t slab, void *item);
+#endif
+
 SYSINIT(uma_startup3, SI_SUB_VM_CONF, SI_ORDER_SECOND, uma_startup3, NULL);
 
 SYSCTL_PROC(_vm, OID_AUTO, zone_count, CTLFLAG_RD|CTLTYPE_INT,
@@ -3607,6 +3612,102 @@ sysctl_handle_uma_zone_cur(SYSCTL_HANDLE
        return (sysctl_handle_int(oidp, &cur, 0, req));
 }
 
+#ifdef INVARIANTS
+static uma_slab_t
+uma_dbg_getslab(uma_zone_t zone, void *item)
+{
+       uma_slab_t slab;
+       uma_keg_t keg;
+       uint8_t *mem;
+
+       mem = (uint8_t *)((uintptr_t)item & (~UMA_SLAB_MASK));
+       if (zone->uz_flags & UMA_ZONE_VTOSLAB) {
+               slab = vtoslab((vm_offset_t)mem);
+       } else {
+               /*
+                * It is safe to return the slab here even though the
+                * zone is unlocked because the item's allocation state
+                * essentially holds a reference.
+                */
+               ZONE_LOCK(zone);
+               keg = LIST_FIRST(&zone->uz_kegs)->kl_keg;
+               if (keg->uk_flags & UMA_ZONE_HASH)
+                       slab = hash_sfind(&keg->uk_hash, mem);
+               else
+                       slab = (uma_slab_t)(mem + keg->uk_pgoff);
+               ZONE_UNLOCK(zone);
+       }
+
+       return (slab);
+}
+
+/*
+ * Set up the slab's freei data such that uma_dbg_free can function.
+ *
+ */
+static void
+uma_dbg_alloc(uma_zone_t zone, uma_slab_t slab, void *item)
+{
+       uma_keg_t keg;
+       int freei;
+
+       if (zone_first_keg(zone) == NULL)
+               return;
+       if (slab == NULL) {
+               slab = uma_dbg_getslab(zone, item);
+               if (slab == NULL) 
+                       panic("uma: item %p did not belong to zone %s\n",
+                           item, zone->uz_name);
+       }
+       keg = slab->us_keg;
+       freei = ((uintptr_t)item - (uintptr_t)slab->us_data) / keg->uk_rsize;
+
+       if (BIT_ISSET(SLAB_SETSIZE, freei, &slab->us_debugfree))
+               panic("Duplicate alloc of %p from zone %p(%s) slab %p(%d)\n",
+                   item, zone, zone->uz_name, slab, freei);
+       BIT_SET_ATOMIC(SLAB_SETSIZE, freei, &slab->us_debugfree);
+
+       return;
+}
+
+/*
+ * Verifies freed addresses.  Checks for alignment, valid slab membership
+ * and duplicate frees.
+ *
+ */
+static void
+uma_dbg_free(uma_zone_t zone, uma_slab_t slab, void *item)
+{
+       uma_keg_t keg;
+       int freei;
+
+       if (zone_first_keg(zone) == NULL)
+               return;
+       if (slab == NULL) {
+               slab = uma_dbg_getslab(zone, item);
+               if (slab == NULL) 
+                       panic("uma: Freed item %p did not belong to zone %s\n",
+                           item, zone->uz_name);
+       }
+       keg = slab->us_keg;
+       freei = ((uintptr_t)item - (uintptr_t)slab->us_data) / keg->uk_rsize;
+
+       if (freei >= keg->uk_ipers)
+               panic("Invalid free of %p from zone %p(%s) slab %p(%d)\n",
+                   item, zone, zone->uz_name, slab, freei);
+
+       if (((freei * keg->uk_rsize) + slab->us_data) != item) 
+               panic("Unaligned free of %p from zone %p(%s) slab %p(%d)\n",
+                   item, zone, zone->uz_name, slab, freei);
+
+       if (!BIT_ISSET(SLAB_SETSIZE, freei, &slab->us_debugfree))
+               panic("Duplicate free of %p from zone %p(%s) slab %p(%d)\n",
+                   item, zone, zone->uz_name, slab, freei);
+
+       BIT_CLR_ATOMIC(SLAB_SETSIZE, freei, &slab->us_debugfree);
+}
+#endif /* INVARIANTS */
+
 #ifdef DDB
 DB_SHOW_COMMAND(uma, db_show_uma)
 {
@@ -3664,4 +3765,4 @@ DB_SHOW_COMMAND(umacache, db_show_umacac
                        return;
        }
 }
-#endif
+#endif /* DDB */

Modified: head/sys/vm/uma_dbg.c
==============================================================================
--- head/sys/vm/uma_dbg.c       Wed Feb  3 21:56:51 2016        (r295220)
+++ head/sys/vm/uma_dbg.c       Wed Feb  3 22:02:36 2016        (r295221)
@@ -196,100 +196,3 @@ mtrash_fini(void *mem, int size)
 {
        (void)mtrash_ctor(mem, size, NULL, 0);
 }
-
-#ifdef INVARIANTS
-static uma_slab_t
-uma_dbg_getslab(uma_zone_t zone, void *item)
-{
-       uma_slab_t slab;
-       uma_keg_t keg;
-       uint8_t *mem;
-
-       mem = (uint8_t *)((uintptr_t)item & (~UMA_SLAB_MASK));
-       if (zone->uz_flags & UMA_ZONE_VTOSLAB) {
-               slab = vtoslab((vm_offset_t)mem);
-       } else {
-               /*
-                * It is safe to return the slab here even though the
-                * zone is unlocked because the item's allocation state
-                * essentially holds a reference.
-                */
-               ZONE_LOCK(zone);
-               keg = LIST_FIRST(&zone->uz_kegs)->kl_keg;
-               if (keg->uk_flags & UMA_ZONE_HASH)
-                       slab = hash_sfind(&keg->uk_hash, mem);
-               else
-                       slab = (uma_slab_t)(mem + keg->uk_pgoff);
-               ZONE_UNLOCK(zone);
-       }
-
-       return (slab);
-}
-
-/*
- * Set up the slab's freei data such that uma_dbg_free can function.
- *
- */
-void
-uma_dbg_alloc(uma_zone_t zone, uma_slab_t slab, void *item)
-{
-       uma_keg_t keg;
-       int freei;
-
-       if (zone_first_keg(zone) == NULL)
-               return;
-       if (slab == NULL) {
-               slab = uma_dbg_getslab(zone, item);
-               if (slab == NULL) 
-                       panic("uma: item %p did not belong to zone %s\n",
-                           item, zone->uz_name);
-       }
-       keg = slab->us_keg;
-       freei = ((uintptr_t)item - (uintptr_t)slab->us_data) / keg->uk_rsize;
-
-       if (BIT_ISSET(SLAB_SETSIZE, freei, &slab->us_debugfree))
-               panic("Duplicate alloc of %p from zone %p(%s) slab %p(%d)\n",
-                   item, zone, zone->uz_name, slab, freei);
-       BIT_SET_ATOMIC(SLAB_SETSIZE, freei, &slab->us_debugfree);
-
-       return;
-}
-
-/*
- * Verifies freed addresses.  Checks for alignment, valid slab membership
- * and duplicate frees.
- *
- */
-void
-uma_dbg_free(uma_zone_t zone, uma_slab_t slab, void *item)
-{
-       uma_keg_t keg;
-       int freei;
-
-       if (zone_first_keg(zone) == NULL)
-               return;
-       if (slab == NULL) {
-               slab = uma_dbg_getslab(zone, item);
-               if (slab == NULL) 
-                       panic("uma: Freed item %p did not belong to zone %s\n",
-                           item, zone->uz_name);
-       }
-       keg = slab->us_keg;
-       freei = ((uintptr_t)item - (uintptr_t)slab->us_data) / keg->uk_rsize;
-
-       if (freei >= keg->uk_ipers)
-               panic("Invalid free of %p from zone %p(%s) slab %p(%d)\n",
-                   item, zone, zone->uz_name, slab, freei);
-
-       if (((freei * keg->uk_rsize) + slab->us_data) != item) 
-               panic("Unaligned free of %p from zone %p(%s) slab %p(%d)\n",
-                   item, zone, zone->uz_name, slab, freei);
-
-       if (!BIT_ISSET(SLAB_SETSIZE, freei, &slab->us_debugfree))
-               panic("Duplicate free of %p from zone %p(%s) slab %p(%d)\n",
-                   item, zone, zone->uz_name, slab, freei);
-
-       BIT_CLR_ATOMIC(SLAB_SETSIZE, freei, &slab->us_debugfree);
-}
-
-#endif /* INVARIANTS */

Modified: head/sys/vm/uma_dbg.h
==============================================================================
--- head/sys/vm/uma_dbg.h       Wed Feb  3 21:56:51 2016        (r295220)
+++ head/sys/vm/uma_dbg.h       Wed Feb  3 22:02:36 2016        (r295221)
@@ -49,7 +49,4 @@ void mtrash_dtor(void *mem, int size, vo
 int mtrash_init(void *mem, int size, int flags);
 void mtrash_fini(void *mem, int size);
 
-void uma_dbg_free(uma_zone_t zone, uma_slab_t slab, void *item);
-void uma_dbg_alloc(uma_zone_t zone, uma_slab_t slab, void *item);
-
 #endif /* VM_UMA_DBG_H */
_______________________________________________
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