MCPcopy Create free account
hub / github.com/F-Stack/f-stack / uma_dbg_free

Function uma_dbg_free

freebsd/vm/uma_core.c:5467–5494  ·  view source on GitHub ↗

* Verifies freed addresses. Checks for alignment, valid slab membership * and duplicate frees. * */

Source from the content-addressed store, hash-verified

5465 *
5466 */
5467static void
5468uma_dbg_free(uma_zone_t zone, uma_slab_t slab, void *item)
5469{
5470 uma_keg_t keg;
5471 int freei;
5472
5473 if (slab == NULL) {
5474 slab = uma_dbg_getslab(zone, item);
5475 if (slab == NULL)
5476 panic("uma: Freed item %p did not belong to zone %s",
5477 item, zone->uz_name);
5478 }
5479 keg = zone->uz_keg;
5480 freei = slab_item_index(slab, keg, item);
5481
5482 if (freei >= keg->uk_ipers)
5483 panic("Invalid free of %p from zone %p(%s) slab %p(%d)",
5484 item, zone, zone->uz_name, slab, freei);
5485
5486 if (slab_item(slab, keg, freei) != item)
5487 panic("Unaligned free of %p from zone %p(%s) slab %p(%d)",
5488 item, zone, zone->uz_name, slab, freei);
5489
5490 if (!BIT_TEST_CLR_ATOMIC(keg->uk_ipers, freei,
5491 slab_dbg_bits(slab, keg)))
5492 panic("Duplicate free of %p from zone %p(%s) slab %p(%d)",
5493 item, zone, zone->uz_name, slab, freei);
5494}
5495#endif /* INVARIANTS */
5496
5497#ifdef DDB

Callers 1

item_dtorFunction · 0.85

Calls 5

uma_dbg_getslabFunction · 0.85
slab_dbg_bitsFunction · 0.85
slab_item_indexFunction · 0.70
slab_itemFunction · 0.70
panicFunction · 0.50

Tested by

no test coverage detected