Lines Matching defs:span
103 * a chunk of the newly extened span atomically. This is needed to support
124 * Adding a new span to an arena requires two segment structures: one to
125 * represent the span, and one to represent the free segment it contains.
152 * a new span and then allocate from the middle of it.
167 * vmem_alloc(vmem_seg_arena) -> 2 segs (span create + exact alloc)
168 * vmem_alloc(vmem_internal_arena) -> 2 segs (span create + exact alloc)
170 * vmem_alloc(heap_arena) -> 4 seg (span create + alloc)
172 * _vmem_extend_alloc(parent_arena) -> 3 seg (span create + left alloc)
423 * Add the span [vaddr, vaddr + size) to vmp and update kstats.
429 vmem_seg_t *newseg, *span;
459 span = vmem_seg_create(vmp, knext->vs_aprev, start, end);
460 span->vs_type = VMEM_SPAN;
461 VMEM_INSERT(knext->vs_kprev, span, k);
463 newseg = vmem_seg_create(vmp, span, start, end);
475 * Remove span vsp from vmp and update kstats.
480 vmem_seg_t *span = vsp->vs_aprev;
484 ASSERT(span->vs_type == VMEM_SPAN);
490 VMEM_DELETE(span, k);
493 vmem_seg_destroy(vmp, span);
686 * vsp could represent a complete imported span,
1041 * If the entire span is free, return it to the source.
1155 * Add the span [vaddr, vaddr + size) to arena vmp.
1180 * are in that order) into a single [x, y) span,
1181 * 2. expanding an existing [x, addr) span to [x, endaddr),
1182 * 3. expanding an existing [endaddr, x) span to [addr, x), or
1183 * 4. creating a new [addr, endaddr) span.
1190 * span.
1195 vmem_seg_t *span;
1205 for (span = end->vs_kprev; span != end; span = span->vs_kprev) {
1206 if (span->vs_end == addr || span->vs_start == endaddr)
1210 if (span == end)
1212 if (span->vs_kprev->vs_end == addr && span->vs_start == endaddr) {
1213 vmem_seg_t *prevspan = span->vs_kprev;
1214 vmem_seg_t *nextseg = span->vs_anext;
1215 vmem_seg_t *prevseg = span->vs_aprev;
1218 * prevspan becomes the span marker for the full range
1220 prevspan->vs_end = span->vs_end;
1223 * Notionally, span becomes a free segment representing
1227 * by destroying span and changing the free segment.
1241 VMEM_DELETE(span, k);
1243 vmem_seg_destroy(vmp, span);
1252 VMEM_DELETE(span, k);
1253 vmem_seg_destroy(vmp, span);
1265 VMEM_DELETE(span, k);
1266 vmem_seg_destroy(vmp, span);
1276 VMEM_DELETE(span, k);
1277 span->vs_start = addr;
1278 span->vs_end = endaddr;
1280 vsp = span;
1282 } else if (span->vs_end == addr) {
1283 vmem_seg_t *oldseg = span->vs_knext->vs_aprev;
1284 span->vs_end = endaddr;
1295 vmem_seg_t *oldseg = span->vs_anext;
1296 ASSERT(span->vs_start == endaddr);
1297 span->vs_start = addr;
1306 vsp = vmem_seg_create(vmp, span, addr, endaddr);
1421 * Create an arena called name whose initial span is [base, base + size).