Deleted Added
full compact
51c51
< __FBSDID("$FreeBSD: head/sys/vm/uma_core.c 295222 2016-02-03 23:30:17Z glebius $");
---
> __FBSDID("$FreeBSD: head/sys/vm/uma_core.c 296243 2016-03-01 00:33:32Z glebius $");
115d114
< static uma_zone_t slabrefzone; /* With refcounters (for UMA_ZONE_REFCNT) */
158,163d156
< * Only mbuf clusters use ref zones. Just provide enough references
< * to support the one user. New code should not use the ref facility.
< */
< static const u_int uma_max_ipers_ref = PAGE_SIZE / MCLBYTES;
<
< /*
954d946
< uma_slabrefcnt_t slabref;
1017,1021d1008
< if (keg->uk_flags & UMA_ZONE_REFCNT) {
< slabref = (uma_slabrefcnt_t)slab;
< for (i = 0; i < keg->uk_ipers; i++)
< slabref->us_refcnt[i] = 0;
< }
1269,1271d1255
< if (keg->uk_flags & UMA_ZONE_REFCNT)
< rsize += sizeof(uint32_t);
<
1359,1360d1342
< if (keg->uk_flags & UMA_ZONE_REFCNT)
< shsize += keg->uk_ipers * sizeof(uint32_t);
1449c1431
< if (arg->flags & UMA_ZONE_REFCNT || arg->flags & UMA_ZONE_MALLOC)
---
> if (arg->flags & UMA_ZONE_MALLOC)
1461,1467d1442
< } else if (keg->uk_flags & UMA_ZONE_REFCNT) {
< if (keg->uk_size >
< (UMA_SLAB_SIZE - sizeof(struct uma_slab_refcnt) -
< sizeof(uint32_t)))
< keg_large_init(keg);
< else
< keg_small_init(keg);
1475,1483c1450,1451
< if (keg->uk_flags & UMA_ZONE_OFFPAGE) {
< if (keg->uk_flags & UMA_ZONE_REFCNT) {
< if (keg->uk_ipers > uma_max_ipers_ref)
< panic("Too many ref items per zone: %d > %d\n",
< keg->uk_ipers, uma_max_ipers_ref);
< keg->uk_slabzone = slabrefzone;
< } else
< keg->uk_slabzone = slabzone;
< }
---
> if (keg->uk_flags & UMA_ZONE_OFFPAGE)
> keg->uk_slabzone = slabzone;
1520,1523d1487
< /* Size of the reference counts. */
< if (keg->uk_flags & UMA_ZONE_REFCNT)
< totsize += keg->uk_ipers * sizeof(uint32_t);
<
1537,1538d1500
< if (keg->uk_flags & UMA_ZONE_REFCNT)
< totsize += keg->uk_ipers * sizeof(uint32_t);
1800d1761
< u_int slabsize;
1859,1870d1819
< /*
< * We also create a zone for the bigger slabs with reference
< * counts in them, to accomodate UMA_ZONE_REFCNT zones.
< */
< slabsize = sizeof(struct uma_slab_refcnt);
< slabsize += uma_max_ipers_ref * sizeof(uint32_t);
< slabrefzone = uma_zcreate("UMA RCntSlabs",
< slabsize,
< NULL, NULL, NULL, NULL,
< UMA_ALIGN_PTR,
< UMA_ZFLAG_INTERNAL);
<
2092a2042
>
2094,2101d2043
< * Both must either be refcnt, or not be refcnt.
< */
< if ((zone->uz_flags & UMA_ZONE_REFCNT) !=
< (master->uz_flags & UMA_ZONE_REFCNT)) {
< error = EINVAL;
< goto out;
< }
< /*
3223,3242d3164
< uint32_t *
< uma_find_refcnt(uma_zone_t zone, void *item)
< {
< uma_slabrefcnt_t slabref;
< uma_slab_t slab;
< uma_keg_t keg;
< uint32_t *refcnt;
< int idx;
<
< slab = vtoslab((vm_offset_t)item & (~UMA_SLAB_MASK));
< slabref = (uma_slabrefcnt_t)slab;
< keg = slab->us_keg;
< KASSERT(keg->uk_flags & UMA_ZONE_REFCNT,
< ("uma_find_refcnt(): zone possibly not UMA_ZONE_REFCNT"));
< idx = ((uintptr_t)item - (uintptr_t)slab->us_data) / keg->uk_rsize;
< refcnt = &slabref->us_refcnt[idx];
< return refcnt;
< }
<
< /* See uma.h */
3263d3184
< zone_drain(slabrefzone);