Lines Matching defs:mm

65 mm_make_entry(struct mm_master *mm, struct mmtree *head,
70 if (mm->mmalloc == NULL)
73 tmp = mm_xmalloc(mm->mmalloc, sizeof(struct mm_share));
80 mm, tmp2, address, size);
91 struct mm_master *mm;
94 mm = xcalloc(1, sizeof(struct mm_master));
96 mm = mm_xmalloc(mmalloc, sizeof(struct mm_master));
103 mm->mmalloc = mmalloc;
109 mm->address = address;
110 mm->size = size;
112 RB_INIT(&mm->rb_free);
113 RB_INIT(&mm->rb_allocated);
115 mm_make_entry(mm, &mm->rb_free, address, size);
117 return (mm);
140 mm_destroy(struct mm_master *mm)
142 mm_freelist(mm->mmalloc, &mm->rb_free);
143 mm_freelist(mm->mmalloc, &mm->rb_allocated);
146 if (munmap(mm->address, mm->size) == -1)
147 fatal("munmap(%p, %zu): %s", mm->address, mm->size,
153 if (mm->mmalloc == NULL)
154 free(mm);
156 mm_free(mm->mmalloc, mm);
160 mm_xmalloc(struct mm_master *mm, size_t size)
164 address = mm_malloc(mm, size);
175 mm_malloc(struct mm_master *mm, size_t size)
186 RB_FOREACH(mms, mmtree, &mm->rb_free) {
197 tmp = mm_make_entry(mm, &mm->rb_allocated, mms->address, size);
204 RB_REMOVE(mmtree, &mm->rb_free, mms);
205 if (mm->mmalloc == NULL)
208 mm_free(mm->mmalloc, mms);
217 mm_free(struct mm_master *mm, void *address)
222 mms = RB_FIND(mmtree, &mm->rb_allocated, &tmp);
224 fatal("mm_free(%p): can not find %p", mm, address);
230 RB_REMOVE(mmtree, &mm->rb_allocated, mms);
231 if (RB_INSERT(mmtree, &mm->rb_free, mms) != NULL)
232 fatal("mm_free(%p): double address %p", mm, address);
260 RB_REMOVE(mmtree, &mm->rb_free, mms);
261 if (mm->mmalloc == NULL)
264 mm_free(mm->mmalloc, mms);
272 mms = RB_NEXT(mmtree, &mm->rb_free, prev);
283 RB_REMOVE(mmtree, &mm->rb_free, mms);
285 if (mm->mmalloc == NULL)
288 mm_free(mm->mmalloc, mms);
293 struct mm_master *mm, struct mm_master *mmold)
295 struct mm_master *mmalloc = mm->mmalloc;
302 mm_memvalid(mm, mms->address, mms->size);
313 struct mm_master *mm;
320 mm = *pmm;
321 mmold = mm->mmalloc;
322 mm_memvalid(mmold, mm, sizeof(*mm));
324 mmalloc = mm_create(NULL, mm->size);
325 mm = mm_xmalloc(mmalloc, sizeof(struct mm_master));
326 memcpy(mm, *pmm, sizeof(struct mm_master));
327 mm->mmalloc = mmalloc;
329 rb_free = mm->rb_free;
330 rb_allocated = mm->rb_allocated;
332 RB_INIT(&mm->rb_free);
333 RB_INIT(&mm->rb_allocated);
335 mm_sync_list(&rb_free, &mm->rb_free, mm, mmold);
336 mm_sync_list(&rb_allocated, &mm->rb_allocated, mm, mmold);
340 *pmm = mm;
347 mm_memvalid(struct mm_master *mm, void *address, size_t size)
351 if (address < mm->address)
355 if (end > MM_ADDRESS_END(mm))