Changeset 1093620 in mainline for generic/src/mm/buddy.c


Ignore:
Timestamp:
2006-01-22T16:51:11Z (19 years ago)
Author:
Sergey Bondari <bondari@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0d8d27c
Parents:
bd6e392
Message:

Fixes, comments, tests to frame allocator

File:
1 edited

Legend:

Unmodified
Added
Removed
  • generic/src/mm/buddy.c

    rbd6e392 r1093620  
    6969                 * Allocate memory for all orders this buddy system will work with.
    7070                 */
    71                 b->order = (link_t *) early_malloc(max_order * sizeof(link_t));
     71                b->order = (link_t *) early_malloc((max_order + 1) * sizeof(link_t));
    7272                if (!b->order) {
    7373                        early_free(b);
     
    7575                }
    7676       
    77                 for (i = 0; i < max_order; i++)
     77                for (i = 0; i <= max_order; i++)
    7878                        list_initialize(&b->order[i]);
    7979       
     
    9696        __u8 k;
    9797       
    98         ASSERT(i < b->max_order);
    99        
    100         for (k=i; k < b->max_order; k++) {
     98        /*
     99         * If requested block is greater then maximal block
     100         * we know immediatly that we cannot satisfy the request.
     101         */
     102        if (i > b->max_order) return false;
     103
     104        /*
     105         * Check if any bigger or equal order has free elements
     106         */
     107        for (k=i; k <= b->max_order; k++) {
    101108                if (!list_empty(&b->order[k])) {
    102109                        return true;
     
    119126        link_t *res, *hlp;
    120127
    121         ASSERT(i < b->max_order);
     128        ASSERT(i <= b->max_order);
    122129
    123130        /*
     
    136143         * the request cannot be satisfied.
    137144         */
    138         if (i == b->max_order - 1)
     145        if (i == b->max_order)
    139146                return NULL;
    140147
     
    186193        i = b->op->get_order(b, block);
    187194
    188         ASSERT(i < b->max_order);
    189 
    190         if (i != b->max_order - 1) {
     195        ASSERT(i <= b->max_order);
     196
     197        if (i != b->max_order) {
    191198                /*
    192199                 * See if there is any buddy in the list of order i.
     
    246253        printf("-----\t------\t--------\t----------\t---------------\n");
    247254       
    248         for (i=0;i < b->max_order; i++) {
     255        for (i=0;i <= b->max_order; i++) {
    249256                cnt = 0;
    250257                if (!list_empty(&b->order[i])) {
Note: See TracChangeset for help on using the changeset viewer.