Author: markj
Date: Tue Apr 24 20:05:45 2018
New Revision: 332968
URL: https://svnweb.freebsd.org/changeset/base/332968

Log:
  Add a UMA zone flag to disable the use of buckets.
  
  This allows the creation of zones which don't do any caching in front of
  the keg. If the zone is a cache zone, this means that UMA will not
  attempt any memory allocations when allocating an item from the backend.
  This is intended for use after a panic by netdump, but likely has other
  applications.
  
  Reviewed by:  kib
  MFC after:    2 weeks
  Sponsored by: Dell EMC Isilon
  Differential Revision:        https://reviews.freebsd.org/D15184

Modified:
  head/sys/vm/uma.h
  head/sys/vm/uma_core.c

Modified: head/sys/vm/uma.h
==============================================================================
--- head/sys/vm/uma.h   Tue Apr 24 19:55:12 2018        (r332967)
+++ head/sys/vm/uma.h   Tue Apr 24 20:05:45 2018        (r332968)
@@ -265,8 +265,8 @@ uma_zone_t uma_zcache_create(char *name, int size, uma
                                         * information in the vm_page.
                                         */
 #define        UMA_ZONE_SECONDARY      0x0200  /* Zone is a Secondary Zone */
-/*                             0x0400     Unused */
-#define        UMA_ZONE_MAXBUCKET      0x0800  /* Use largest buckets */
+#define        UMA_ZONE_NOBUCKET       0x0400  /* Do not use buckets. */
+#define        UMA_ZONE_MAXBUCKET      0x0800  /* Use largest buckets. */
 #define        UMA_ZONE_CACHESPREAD    0x1000  /*
                                         * Spread memory start locations across
                                         * all possible cache lines.  May

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c      Tue Apr 24 19:55:12 2018        (r332967)
+++ head/sys/vm/uma_core.c      Tue Apr 24 20:05:45 2018        (r332968)
@@ -1681,10 +1681,15 @@ zone_ctor(void *mem, int size, void *udata, int flags)
        }
 
 out:
-       if ((arg->flags & UMA_ZONE_MAXBUCKET) == 0)
-               zone->uz_count = bucket_select(zone->uz_size);
-       else
+       KASSERT((arg->flags & (UMA_ZONE_MAXBUCKET | UMA_ZONE_NOBUCKET)) !=
+           (UMA_ZONE_MAXBUCKET | UMA_ZONE_NOBUCKET),
+           ("Invalid zone flag combination"));
+       if ((arg->flags & UMA_ZONE_MAXBUCKET) != 0)
                zone->uz_count = BUCKET_MAX;
+       else if ((arg->flags & UMA_ZONE_NOBUCKET) != 0)
+               zone->uz_count = 0;
+       else
+               zone->uz_count = bucket_select(zone->uz_size);
        zone->uz_count_min = zone->uz_count;
 
        return (0);
_______________________________________________
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