Changes in kernel/generic/src/mm/slab.c [e2a0d76:b0c2075] in mainline
- File:
-
- 1 edited
-
kernel/generic/src/mm/slab.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/slab.c
re2a0d76 rb0c2075 183 183 184 184 void *data = (void *) 185 PA2KA(frame_alloc_generic(cache-> order, flags, 0, &zone));185 PA2KA(frame_alloc_generic(cache->frames, flags, 0, &zone)); 186 186 if (!data) 187 187 return NULL; … … 197 197 } 198 198 } else { 199 fsize = (PAGE_SIZE << cache->order);199 fsize = FRAMES2SIZE(cache->frames); 200 200 slab = data + fsize - sizeof(*slab); 201 201 } … … 203 203 /* Fill in slab structures */ 204 204 size_t i; 205 for (i = 0; i < ((size_t) 1 << cache->order); i++)205 for (i = 0; i < cache->frames; i++) 206 206 frame_set_parent(ADDR2PFN(KA2PA(data)) + i, slab, zone); 207 207 … … 231 231 atomic_dec(&cache->allocated_slabs); 232 232 233 return (1 << cache->order);233 return cache->frames; 234 234 } 235 235 … … 558 558 { 559 559 if (cache->flags & SLAB_CACHE_SLINSIDE) 560 return ( (PAGE_SIZE << cache->order)561 - sizeof(slab_t)) /cache->size;560 return (FRAMES2SIZE(cache->frames) - sizeof(slab_t)) / 561 cache->size; 562 562 else 563 return (PAGE_SIZE << cache->order) / cache->size;563 return FRAMES2SIZE(cache->frames) / cache->size; 564 564 } 565 565 … … 570 570 { 571 571 size_t objects = comp_objects(cache); 572 size_t ssize = PAGE_SIZE << cache->order;572 size_t ssize = FRAMES2SIZE(cache->frames); 573 573 574 574 if (cache->flags & SLAB_CACHE_SLINSIDE) … … 634 634 cache->flags |= SLAB_CACHE_SLINSIDE; 635 635 636 /* Minimum slab order */ 637 size_t pages = SIZE2FRAMES(cache->size); 638 639 /* We need the 2^order >= pages */ 640 if (pages == 1) 641 cache->order = 0; 642 else 643 cache->order = fnzb(pages - 1) + 1; 636 /* Minimum slab frames */ 637 cache->frames = SIZE2FRAMES(cache->size); 644 638 645 639 while (badness(cache) > SLAB_MAX_BADNESS(cache)) 646 cache-> order += 1;640 cache->frames <<= 1; 647 641 648 642 cache->objects = comp_objects(cache); … … 810 804 811 805 size_t frames = 0; 812 list_foreach(slab_cache_list, cur) { 813 slab_cache_t *cache = list_get_instance(cur, slab_cache_t, link); 806 list_foreach(slab_cache_list, link, slab_cache_t, cache) { 814 807 frames += _slab_reclaim(cache, flags); 815 808 } … … 871 864 872 865 const char *name = cache->name; 873 uint8_t order = cache->order;866 size_t frames = cache->frames; 874 867 size_t size = cache->size; 875 868 size_t objects = cache->objects; … … 881 874 irq_spinlock_unlock(&slab_cache_lock, true); 882 875 883 printf("%-18s %8zu %8 u %8zu %8ld %8ld %8ld %-5s\n",884 name, size, (1 << order), objects, allocated_slabs,876 printf("%-18s %8zu %8zu %8zu %8ld %8ld %8ld %-5s\n", 877 name, size, frames, objects, allocated_slabs, 885 878 cached_objs, allocated_objs, 886 879 flags & SLAB_CACHE_SLINSIDE ? "in" : "out"); … … 936 929 irq_spinlock_lock(&slab_cache_lock, false); 937 930 938 list_foreach(slab_cache_list, cur) { 939 slab_cache_t *slab = list_get_instance(cur, slab_cache_t, link); 931 list_foreach(slab_cache_list, link, slab_cache_t, slab) { 940 932 if ((slab->flags & SLAB_CACHE_MAGDEFERRED) != 941 933 SLAB_CACHE_MAGDEFERRED)
Note:
See TracChangeset
for help on using the changeset viewer.
