Subversion Repositories HelenOS

Rev

Rev 4344 | Rev 4348 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4344 Rev 4346
Line 158... Line 158...
158
 * locked.
158
 * locked.
159
 *
159
 *
160
 * @return Total number of available frames.
160
 * @return Total number of available frames.
161
 *
161
 *
162
 */
162
 */
-
 
163
#ifdef CONFIG_DEBUG
163
static count_t total_frames_free(void)
164
static count_t total_frames_free(void)
164
{
165
{
165
    count_t total = 0;
166
    count_t total = 0;
166
    count_t i;
167
    count_t i;
167
    for (i = 0; i < zones.count; i++)
168
    for (i = 0; i < zones.count; i++)
168
        total += zones.info[i].free_count;
169
        total += zones.info[i].free_count;
169
   
170
   
170
    return total;
171
    return total;
171
}
172
}
-
 
173
#endif
172
 
174
 
173
/** Find a zone with a given frames.
175
/** Find a zone with a given frames.
174
 *
176
 *
175
 * Assume interrupts are disabled and zones lock is
177
 * Assume interrupts are disabled and zones lock is
176
 * locked.
178
 * locked.
Line 286... Line 288...
286
    zone_t *zone = (zone_t *) buddy->data;
288
    zone_t *zone = (zone_t *) buddy->data;
287
    ASSERT(IS_BUDDY_ORDER_OK(frame_index_abs(zone, frame),
289
    ASSERT(IS_BUDDY_ORDER_OK(frame_index_abs(zone, frame),
288
        frame->buddy_order));
290
        frame->buddy_order));
289
   
291
   
290
    bool is_left = IS_BUDDY_LEFT_BLOCK_ABS(zone, frame);
292
    bool is_left = IS_BUDDY_LEFT_BLOCK_ABS(zone, frame);
291
    bool is_right = IS_BUDDY_RIGHT_BLOCK_ABS(zone, frame);
-
 
292
   
-
 
293
    ASSERT(is_left ^ is_right);
-
 
294
   
293
   
295
    index_t index;
294
    index_t index;
296
    if (is_left) {
295
    if (is_left) {
297
        index = (frame_index(zone, frame)) +
296
        index = (frame_index(zone, frame)) +
298
            (1 << frame->buddy_order);
297
            (1 << frame->buddy_order);
299
    } else {  /* if (is_right) */
298
    } else {    /* is_right */
300
        index = (frame_index(zone, frame)) -
299
        index = (frame_index(zone, frame)) -
301
            (1 << frame->buddy_order);
300
            (1 << frame->buddy_order);
302
    }
301
    }
303
   
302
   
304
    if (frame_index_valid(zone, index)) {
303
    if (frame_index_valid(zone, index)) {
Line 481... Line 480...
481
   
480
   
482
    frame_t *frame = zone_get_frame(zone, frame_idx);
481
    frame_t *frame = zone_get_frame(zone, frame_idx);
483
    if (frame->refcount)
482
    if (frame->refcount)
484
        return;
483
        return;
485
   
484
   
-
 
485
    link_t *link __attribute__ ((unused));
-
 
486
   
486
    link_t *link = buddy_system_alloc_block(zone->buddy_system,
487
    link = buddy_system_alloc_block(zone->buddy_system,
487
        &frame->buddy_link);
488
        &frame->buddy_link);
488
   
489
   
489
    ASSERT(link);
490
    ASSERT(link);
490
    zone->free_count--;
491
    zone->free_count--;
491
}
492
}
Line 606... Line 607...
606
   
607
   
607
    if ((pfn < zones.info[znum].base)
608
    if ((pfn < zones.info[znum].base)
608
        || (pfn >= zones.info[znum].base + zones.info[znum].count))
609
        || (pfn >= zones.info[znum].base + zones.info[znum].count))
609
        return;
610
        return;
610
   
611
   
611
    frame_t *frame
612
    frame_t *frame __attribute__ ((unused));
-
 
613
 
612
        = &zones.info[znum].frames[pfn - zones.info[znum].base];
614
    frame = &zones.info[znum].frames[pfn - zones.info[znum].base];
613
    ASSERT(!frame->buddy_order);
615
    ASSERT(!frame->buddy_order);
614
   
616
   
615
    count_t i;
617
    count_t i;
616
    for (i = 0; i < cframes; i++) {
618
    for (i = 0; i < cframes; i++) {
617
        zones.info[znum].busy_count++;
619
        zones.info[znum].busy_count++;