Lines Matching refs:vd

84 static int vmisfree(Vmdata_t* vd, Block_t* b)  in vmisfree()  argument
86 static int vmisfree(vd,b) in vmisfree()
87 Vmdata_t* vd; in vmisfree()
94 if(b == vd->wild)
98 return vmonlist(TINY(vd)[INDEX(SIZE(b))], b);
100 if(vd->root)
101 return vmintree(vd->root, b);
108 static int vmisjunk(Vmdata_t* vd, Block_t* b) in vmisjunk() argument
110 static int vmisjunk(vd,b) in vmisjunk()
111 Vmdata_t* vd; in vmisjunk()
120 if(b == vd->free) /* recently freed */
124 for(t = CACHE(vd)[C_INDEX(SIZE(b))]; t; t = LINK(t))
130 for(t = CACHE(vd)[S_CACHE]; t; t = LINK(t))
168 int _vmbestcheck(Vmdata_t* vd, Block_t* freeb) in _vmbestcheck() argument
170 int _vmbestcheck(vd, freeb) in _vmbestcheck()
171 Vmdata_t* vd; in _vmbestcheck()
183 if(vd->root && vmchktree(vd->root) < 0 )
186 for(seg = vd->seg; seg && rv == 0; seg = seg->next)
210 if(b != freeb && !vmisfree(vd, b) )
224 !vmisfree(vd, LAST(b)) )
228 if(ISJUNK(SIZE(b)) && !vmisjunk(vd, b))
245 static Block_t* bestsearch(Vmdata_t* vd, reg size_t size, Block_t* wanted) in bestsearch() argument
247 static Block_t* bestsearch(vd, size, wanted) in bestsearch()
248 Vmdata_t* vd; in bestsearch()
266 else TINY(vd)[0] = r; local
268 seg = vd->seg;
282 /**/ASSERT(!vd->root || vmchktree(vd->root) == 0);
286 if((root = vd->root) ) do
351 vd->root = r; /**/ASSERT(!r || !ISBITS(SIZE(r)));
353 /**/ASSERT(!vd->root || vmchktree(vd->root) == 0);
361 static int bestreclaim(reg Vmdata_t* vd, Block_t* wanted, int c) in bestreclaim() argument
363 static int bestreclaim(vd, wanted, c) in bestreclaim()
364 reg Vmdata_t* vd; in bestreclaim()
374 /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
376 if((fp = vd->free) )
377 { LINK(fp) = CACHE(vd)[S_CACHE]; CACHE(vd)[S_CACHE] = fp; local
378 vd->free = NIL(Block_t*);
383 { list = CACHE(vd)[n]; CACHE(vd)[n] = NIL(Block_t*); local
410 REMOVE(vd,fp,INDEX(s),t,bestsearch);
420 if(np == vd->wild)
421 vd->wild = NIL(Block_t*);
422 else REMOVE(vd,np,INDEX(s),t,bestsearch);
449 if(np->body.data >= vd->seg->baddr)
450 { vd->wild = fp;
457 np = LINK(fp) = TINY(vd)[s];
469 TINY(vd)[s] = fp; local
474 if(!(np = vd->root) ) /* inserting into an empty tree */
475 { vd->root = fp;
517 /**/ASSERT(_vmbestcheck(vd, wanted) == 0);
532 reg Vmdata_t* vd = vm->data; local
536 bestreclaim(vd,NIL(Block_t*),0);
538 for(seg = vd->seg; seg; seg = next)
545 bp = LAST(bp); /**/ASSERT(vmisfree(vd,bp));
547 if(bp == vd->wild)
554 if(size > COMPACT*vd->incr && vd->incr > round)
555 vd->incr /= 2;
564 if(size <= COMPACT*vd->incr || size <= COMPACT*vd->pool)
567 vd->wild = NIL(Block_t*);
568 vd->pool = 0;
570 else REMOVE(vd,bp,INDEX(size),tp,bestsearch);
590 /**/ ASSERT(!vd->root || !vmintree(vd->root,bp));
592 LINK(bp) = CACHE(vd)[C_INDEX(SIZE(bp))];
593 CACHE(vd)[C_INDEX(SIZE(bp))] = bp; local
597 if(!local && _Vmtrace && (vd->mode&VM_TRACE) && VMETHOD(vd) == VM_MTBEST)
600 CLRLOCK(vm, local); /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
614 reg Vmdata_t* vd = vm->data; local
621 /**/ASSERT(local ? (vd->lock == 1) : 1 );
625 /**/ ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
637 if((tp = vd->free) ) /* reuse last free piece if appropriate */
642 vd->free = NIL(Block_t*);
649 vd->free = np;
656 LINK(tp) = CACHE(vd)[S_CACHE];
657 CACHE(vd)[S_CACHE] = tp; local
661 { bestreclaim(vd,NIL(Block_t*),n);
662 if(vd->root && (tp = bestsearch(vd,size,NIL(Block_t*))) )
666 /**/ASSERT(!vd->free);
667 if((tp = vd->wild) && SIZE(tp) >= size)
669 vd->wild = NIL(Block_t*);
680 /**/ ASSERT(!vd->free);
693 if(VMWILD(vd,np))
698 vd->wild = np;
700 else vd->free = np;
707 if(tp && !local && (vd->mode&VM_TRACE) && _Vmtrace && VMETHOD(vd) == VM_MTBEST)
710 CLRLOCK(vm,local); /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
727 reg Vmdata_t* vd = vm->data; local
729 /**/ASSERT(local ? (vd->lock == 1) : 1 );
733 for(seg = vd->seg; seg; seg = seg->next)
776 reg Vmdata_t* vd = vm->data; local
783 _vmbestcheck(vd, NIL(Block_t*));
794 /**/ASSERT(local ? (vd->lock == 1) : 1 );
799 /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
806 vd->pool = (vd->pool + (s&~BITS))/2;
811 { /**/ASSERT(!vmonlist(CACHE(vd)[INDEX(s)], bp) );
812 LINK(bp) = CACHE(vd)[INDEX(s)];
813 CACHE(vd)[INDEX(s)] = bp; local
815 else if(!vd->free)
816 vd->free = bp;
818 { /**/ASSERT(!vmonlist(CACHE(vd)[S_CACHE], bp) );
819 LINK(bp) = CACHE(vd)[S_CACHE];
820 CACHE(vd)[S_CACHE] = bp; local
824 if(SIZE(bp) >= 2*vd->incr)
825 { bestreclaim(vd,NIL(Block_t*),0);
826 if(vd->wild && SIZE(vd->wild) >= COMPACT*vd->incr)
831 if(!local && _Vmtrace && (vd->mode&VM_TRACE) && VMETHOD(vd) == VM_MTBEST )
834 CLRLOCK(vm, local); /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
854 Vmdata_t *vd = vm->data; local
857 /**/ASSERT(local ? (vd->lock == 1) : 1);
873 /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
881 if(np == vd->free)
882 { vd->free = NIL(Block_t*);
887 if(!bestreclaim(vd,np,(int)C_INDEX(s)) )
892 { if(np == vd->wild)
893 vd->wild = NIL(Block_t*);
894 else REMOVE(vd,np,INDEX(s),t,bestsearch);
903 if(SIZE(rp) < size && size > vd->incr && SEGWILD(rp) )
906 s = (size - SIZE(rp)) + sizeof(Head_t); s = ROUND(s,vd->incr);
942 LINK(rp) = CACHE(vd)[S_CACHE];
943 CACHE(vd)[S_CACHE] = rp; local
944 bestreclaim(vd, NIL(Block_t*), S_CACHE);
952 if(!local && _Vmtrace && data && (vd->mode&VM_TRACE) && VMETHOD(vd) == VM_MTBEST)
955 CLRLOCK(vm, local); /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
972 Vmdata_t *vd = vm->data; local
977 for(seg = vd->seg; seg; seg = seg->next)
1017 Vmdata_t *vd = vm->data; local
1024 /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);
1029 if(VMETHOD(vd) != VM_MTDEBUG)
1038 bestreclaim(vd,NIL(Block_t*),0);
1063 LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))];
1064 CACHE(vd)[C_INDEX(SIZE(tp))] = tp; local
1074 LINK(tp) = CACHE(vd)[C_INDEX(SIZE(tp))];
1075 CACHE(vd)[C_INDEX(SIZE(tp))] = tp; local
1080 bestreclaim(vd,NIL(Block_t*),0); /* coalesce all free blocks */
1082 if(!local && _Vmtrace && (vd->mode&VM_TRACE) )
1086 CLRLOCK(vm, local); /**/ASSERT(_vmbestcheck(vd, NIL(Block_t*)) == 0);