Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 734 → Rev 735

/kernel/trunk/generic/src/mm/buddy.c
68,13 → 68,13
/*
* Allocate memory for all orders this buddy system will work with.
*/
b->order = (link_t *) early_malloc(max_order * sizeof(link_t));
b->order = (link_t *) early_malloc((max_order + 1) * sizeof(link_t));
if (!b->order) {
early_free(b);
return NULL;
}
for (i = 0; i < max_order; i++)
for (i = 0; i <= max_order; i++)
list_initialize(&b->order[i]);
b->max_order = max_order;
95,9 → 95,16
bool buddy_system_can_alloc(buddy_system_t *b, __u8 i) {
__u8 k;
ASSERT(i < b->max_order);
for (k=i; k < b->max_order; k++) {
/*
* If requested block is greater then maximal block
* we know immediatly that we cannot satisfy the request.
*/
if (i > b->max_order) return false;
 
/*
* Check if any bigger or equal order has free elements
*/
for (k=i; k <= b->max_order; k++) {
if (!list_empty(&b->order[k])) {
return true;
}
118,7 → 125,7
{
link_t *res, *hlp;
 
ASSERT(i < b->max_order);
ASSERT(i <= b->max_order);
 
/*
* If the list of order i is not empty,
135,7 → 142,7
* If order i is already the maximal order,
* the request cannot be satisfied.
*/
if (i == b->max_order - 1)
if (i == b->max_order)
return NULL;
 
/*
185,9 → 192,9
*/
i = b->op->get_order(b, block);
 
ASSERT(i < b->max_order);
ASSERT(i <= b->max_order);
 
if (i != b->max_order - 1) {
if (i != b->max_order) {
/*
* See if there is any buddy in the list of order i.
*/
245,7 → 252,7
printf("Order\tBlocks\tSize \tBlock size\tElems per block\n");
printf("-----\t------\t--------\t----------\t---------------\n");
for (i=0;i < b->max_order; i++) {
for (i=0;i <= b->max_order; i++) {
cnt = 0;
if (!list_empty(&b->order[i])) {
for (cur = b->order[i].next; cur != &b->order[i]; cur = cur->next)