Changeset 594a468 in mainline for generic/src/mm/buddy.c


Ignore:
Timestamp:
2005-11-15T16:00:24Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
db79676
Parents:
93354b0
Message:

Make the buddy system more general.
Store implementation defined pointer in buddy_system_t.
Pass buddy system pointer to implementation defined buddy system operations.

File:
1 edited

Legend:

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

    r93354b0 r594a468  
    4141 * @param max_order The biggest allocable size will be 2^max_order.
    4242 * @param op Operations for new buddy system.
     43 * @param data Pointer to be used by implentation.
    4344 *
    4445 * @return New buddy system.
    4546 */
    46 buddy_system_t *buddy_system_create(__u8 max_order, buddy_system_operations_t *op)
     47buddy_system_t *buddy_system_create(__u8 max_order, buddy_system_operations_t *op, void *data)
    4748{
    4849        buddy_system_t *b;
     
    7778                b->max_order = max_order;
    7879                b->op = op;
     80                b->data = data;
    7981        }
    8082       
     
    131133         * Bisect the block and set order of both of its parts to i.
    132134         */
    133         hlp = b->op->bisect(res);
    134         b->op->set_order(res, i);
    135         b->op->set_order(hlp, i);
     135        hlp = b->op->bisect(b, res);
     136        b->op->set_order(b, res, i);
     137        b->op->set_order(b, hlp, i);
    136138       
    137139        /*
     
    159161         * Determine block's order.
    160162         */
    161         i = b->op->get_order(block);
     163        i = b->op->get_order(b, block);
    162164
    163165        ASSERT(i < b->max_order);
     
    167169                 * See if there is any buddy in the list of order i.
    168170                 */
    169                 buddy = b->op->find_buddy(block);
     171                buddy = b->op->find_buddy(b, block);
    170172                if (buddy) {
    171173
    172                         ASSERT(b->op->get_order(buddy) == i);
     174                        ASSERT(b->op->get_order(b, buddy) == i);
    173175               
    174176                        /*
     
    180182                         * Invalidate order of both block and buddy.
    181183                         */
    182                         b->op->set_order(block, BUDDY_SYSTEM_INNER_BLOCK);
    183                         b->op->set_order(buddy, BUDDY_SYSTEM_INNER_BLOCK);
     184                        b->op->set_order(b, block, BUDDY_SYSTEM_INNER_BLOCK);
     185                        b->op->set_order(b, buddy, BUDDY_SYSTEM_INNER_BLOCK);
    184186               
    185187                        /*
    186188                         * Coalesce block and buddy into one block.
    187189                         */
    188                         hlp = b->op->coalesce(block, buddy);
     190                        hlp = b->op->coalesce(b, block, buddy);
    189191
    190192                        /*
    191193                         * Set order of the coalesced block to i + 1.
    192194                         */
    193                         b->op->set_order(hlp, i + 1);
     195                        b->op->set_order(b, hlp, i + 1);
    194196
    195197                        /*
Note: See TracChangeset for help on using the changeset viewer.