Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/mm/slab.c

    rb0c2075 re2a0d76  
    183183       
    184184        void *data = (void *)
    185             PA2KA(frame_alloc_generic(cache->frames, flags, 0, &zone));
     185            PA2KA(frame_alloc_generic(cache->order, flags, 0, &zone));
    186186        if (!data)
    187187                return NULL;
     
    197197                }
    198198        } else {
    199                 fsize = FRAMES2SIZE(cache->frames);
     199                fsize = (PAGE_SIZE << cache->order);
    200200                slab = data + fsize - sizeof(*slab);
    201201        }
     
    203203        /* Fill in slab structures */
    204204        size_t i;
    205         for (i = 0; i < cache->frames; i++)
     205        for (i = 0; i < ((size_t) 1 << cache->order); i++)
    206206                frame_set_parent(ADDR2PFN(KA2PA(data)) + i, slab, zone);
    207207       
     
    231231        atomic_dec(&cache->allocated_slabs);
    232232       
    233         return cache->frames;
     233        return (1 << cache->order);
    234234}
    235235
     
    558558{
    559559        if (cache->flags & SLAB_CACHE_SLINSIDE)
    560                 return (FRAMES2SIZE(cache->frames) - sizeof(slab_t)) /
    561                     cache->size;
     560                return ((PAGE_SIZE << cache->order)
     561                    - sizeof(slab_t)) / cache->size;
    562562        else
    563                 return FRAMES2SIZE(cache->frames) / cache->size;
     563                return (PAGE_SIZE << cache->order) / cache->size;
    564564}
    565565
     
    570570{
    571571        size_t objects = comp_objects(cache);
    572         size_t ssize = FRAMES2SIZE(cache->frames);
     572        size_t ssize = PAGE_SIZE << cache->order;
    573573       
    574574        if (cache->flags & SLAB_CACHE_SLINSIDE)
     
    634634                cache->flags |= SLAB_CACHE_SLINSIDE;
    635635       
    636         /* Minimum slab frames */
    637         cache->frames = SIZE2FRAMES(cache->size);
     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;
    638644       
    639645        while (badness(cache) > SLAB_MAX_BADNESS(cache))
    640                 cache->frames <<= 1;
     646                cache->order += 1;
    641647       
    642648        cache->objects = comp_objects(cache);
     
    804810       
    805811        size_t frames = 0;
    806         list_foreach(slab_cache_list, link, slab_cache_t, cache) {
     812        list_foreach(slab_cache_list, cur) {
     813                slab_cache_t *cache = list_get_instance(cur, slab_cache_t, link);
    807814                frames += _slab_reclaim(cache, flags);
    808815        }
     
    864871               
    865872                const char *name = cache->name;
    866                 size_t frames = cache->frames;
     873                uint8_t order = cache->order;
    867874                size_t size = cache->size;
    868875                size_t objects = cache->objects;
     
    874881                irq_spinlock_unlock(&slab_cache_lock, true);
    875882               
    876                 printf("%-18s %8zu %8zu %8zu %8ld %8ld %8ld %-5s\n",
    877                     name, size, frames, objects, allocated_slabs,
     883                printf("%-18s %8zu %8u %8zu %8ld %8ld %8ld %-5s\n",
     884                    name, size, (1 << order), objects, allocated_slabs,
    878885                    cached_objs, allocated_objs,
    879886                    flags & SLAB_CACHE_SLINSIDE ? "in" : "out");
     
    929936        irq_spinlock_lock(&slab_cache_lock, false);
    930937       
    931         list_foreach(slab_cache_list, link, slab_cache_t, slab) {
     938        list_foreach(slab_cache_list, cur) {
     939                slab_cache_t *slab = list_get_instance(cur, slab_cache_t, link);
    932940                if ((slab->flags & SLAB_CACHE_MAGDEFERRED) !=
    933941                    SLAB_CACHE_MAGDEFERRED)
Note: See TracChangeset for help on using the changeset viewer.