Ignore:
File:
1 edited

Legend:

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

    r7e752b2 r74c5a1ca  
    7575/********************/
    7676
    77 NO_TRACE static inline size_t frame_index(zone_t *zone, frame_t *frame)
     77static inline size_t frame_index(zone_t *zone, frame_t *frame)
    7878{
    7979        return (size_t) (frame - zone->frames);
    8080}
    8181
    82 NO_TRACE static inline size_t frame_index_abs(zone_t *zone, frame_t *frame)
     82static inline size_t frame_index_abs(zone_t *zone, frame_t *frame)
    8383{
    8484        return (size_t) (frame - zone->frames) + zone->base;
    8585}
    8686
    87 NO_TRACE static inline bool frame_index_valid(zone_t *zone, size_t index)
     87static inline bool frame_index_valid(zone_t *zone, size_t index)
    8888{
    8989        return (index < zone->count);
    9090}
    9191
    92 NO_TRACE static inline size_t make_frame_index(zone_t *zone, frame_t *frame)
     92static inline size_t make_frame_index(zone_t *zone, frame_t *frame)
    9393{
    9494        return (frame - zone->frames);
     
    100100 *
    101101 */
    102 NO_TRACE static void frame_initialize(frame_t *frame)
     102static void frame_initialize(frame_t *frame)
    103103{
    104104        frame->refcount = 1;
     
    121121 *
    122122 */
    123 NO_TRACE static size_t zones_insert_zone(pfn_t base, size_t count,
    124     zone_flags_t flags)
     123static size_t zones_insert_zone(pfn_t base, size_t count)
    125124{
    126125        if (zones.count + 1 == ZONES_MAX) {
     
    132131        for (i = 0; i < zones.count; i++) {
    133132                /* Check for overlap */
    134                 if (overlaps(zones.info[i].base, zones.info[i].count,
    135                     base, count)) {
    136                        
    137                         /*
    138                          * If the overlaping zones are of the same type
    139                          * and the new zone is completely within the previous
    140                          * one, then quietly ignore the new zone.
    141                          *
    142                          */
    143                        
    144                         if ((zones.info[i].flags != flags) ||
    145                             (!iswithin(zones.info[i].base, zones.info[i].count,
    146                             base, count))) {
    147                                 printf("Zone (%p, %p) overlaps "
    148                                     "with previous zone (%p %p)!\n",
    149                                     (void *) PFN2ADDR(base), (void *) PFN2ADDR(count),
    150                                     (void *) PFN2ADDR(zones.info[i].base),
    151                                     (void *) PFN2ADDR(zones.info[i].count));
    152                         }
    153                        
     133                if (overlaps(base, count,
     134                    zones.info[i].base, zones.info[i].count)) {
     135                        printf("Zones overlap!\n");
    154136                        return (size_t) -1;
    155137                }
     
    162144        for (j = zones.count; j > i; j--) {
    163145                zones.info[j] = zones.info[j - 1];
    164                 if (zones.info[j].buddy_system != NULL)
    165                         zones.info[j].buddy_system->data =
    166                             (void *) &zones.info[j];
     146                zones.info[j].buddy_system->data =
     147                    (void *) &zones.info[j - 1];
    167148        }
    168149       
     
    181162 */
    182163#ifdef CONFIG_DEBUG
    183 NO_TRACE static size_t total_frames_free(void)
     164static size_t total_frames_free(void)
    184165{
    185166        size_t total = 0;
     
    204185 *
    205186 */
    206 NO_TRACE size_t find_zone(pfn_t frame, size_t count, size_t hint)
     187size_t find_zone(pfn_t frame, size_t count, size_t hint)
    207188{
    208189        if (hint >= zones.count)
     
    225206
    226207/** @return True if zone can allocate specified order */
    227 NO_TRACE static bool zone_can_alloc(zone_t *zone, uint8_t order)
     208static bool zone_can_alloc(zone_t *zone, uint8_t order)
    228209{
    229210        return (zone_flags_available(zone->flags)
     
    241222 *
    242223 */
    243 NO_TRACE static size_t find_free_zone(uint8_t order, zone_flags_t flags,
    244     size_t hint)
     224static size_t find_free_zone(uint8_t order, zone_flags_t flags, size_t hint)
    245225{
    246226        if (hint >= zones.count)
     
    282262 *
    283263 */
    284 NO_TRACE static link_t *zone_buddy_find_block(buddy_system_t *buddy,
    285     link_t *child, uint8_t order)
     264static link_t *zone_buddy_find_block(buddy_system_t *buddy, link_t *child,
     265    uint8_t order)
    286266{
    287267        frame_t *frame = list_get_instance(child, frame_t, buddy_link);
     
    305285 *
    306286 */
    307 NO_TRACE static link_t *zone_buddy_find_buddy(buddy_system_t *buddy,
    308     link_t *block)
     287static link_t *zone_buddy_find_buddy(buddy_system_t *buddy, link_t *block)
    309288{
    310289        frame_t *frame = list_get_instance(block, frame_t, buddy_link);
     
    342321 *
    343322 */
    344 NO_TRACE static link_t *zone_buddy_bisect(buddy_system_t *buddy, link_t *block)
     323static link_t *zone_buddy_bisect(buddy_system_t *buddy, link_t *block)
    345324{
    346325        frame_t *frame_l = list_get_instance(block, frame_t, buddy_link);
     
    360339 *
    361340 */
    362 NO_TRACE static link_t *zone_buddy_coalesce(buddy_system_t *buddy,
    363     link_t *block_1, link_t *block_2)
     341static link_t *zone_buddy_coalesce(buddy_system_t *buddy, link_t *block_1,
     342    link_t *block_2)
    364343{
    365344        frame_t *frame1 = list_get_instance(block_1, frame_t, buddy_link);
     
    376355 *
    377356 */
    378 NO_TRACE static void zone_buddy_set_order(buddy_system_t *buddy, link_t *block,
     357static void zone_buddy_set_order(buddy_system_t *buddy, link_t *block,
    379358    uint8_t order)
    380359{
     
    390369 *
    391370 */
    392 NO_TRACE static uint8_t zone_buddy_get_order(buddy_system_t *buddy,
    393     link_t *block)
     371static uint8_t zone_buddy_get_order(buddy_system_t *buddy, link_t *block)
    394372{
    395373        return list_get_instance(block, frame_t, buddy_link)->buddy_order;
     
    402380 *
    403381 */
    404 NO_TRACE static void zone_buddy_mark_busy(buddy_system_t *buddy, link_t *block)
     382static void zone_buddy_mark_busy(buddy_system_t *buddy, link_t * block)
    405383{
    406384        list_get_instance(block, frame_t, buddy_link)->refcount = 1;
     
    411389 * @param buddy Buddy system.
    412390 * @param block Buddy system block.
    413  *
    414  */
    415 NO_TRACE static void zone_buddy_mark_available(buddy_system_t *buddy,
    416     link_t *block)
     391 */
     392static void zone_buddy_mark_available(buddy_system_t *buddy, link_t *block)
    417393{
    418394        list_get_instance(block, frame_t, buddy_link)->refcount = 0;
     
    445421 *
    446422 */
    447 NO_TRACE static pfn_t zone_frame_alloc(zone_t *zone, uint8_t order)
     423static pfn_t zone_frame_alloc(zone_t *zone, uint8_t order)
    448424{
    449425        ASSERT(zone_flags_available(zone->flags));
     
    473449 *
    474450 */
    475 NO_TRACE static void zone_frame_free(zone_t *zone, size_t frame_idx)
     451static void zone_frame_free(zone_t *zone, size_t frame_idx)
    476452{
    477453        ASSERT(zone_flags_available(zone->flags));
     
    494470
    495471/** Return frame from zone. */
    496 NO_TRACE static frame_t *zone_get_frame(zone_t *zone, size_t frame_idx)
     472static frame_t *zone_get_frame(zone_t *zone, size_t frame_idx)
    497473{
    498474        ASSERT(frame_idx < zone->count);
     
    501477
    502478/** Mark frame in zone unavailable to allocation. */
    503 NO_TRACE static void zone_mark_unavailable(zone_t *zone, size_t frame_idx)
     479static void zone_mark_unavailable(zone_t *zone, size_t frame_idx)
    504480{
    505481        ASSERT(zone_flags_available(zone->flags));
     
    530506 *
    531507 */
    532 NO_TRACE static void zone_merge_internal(size_t z1, size_t z2, zone_t *old_z1,
    533     buddy_system_t *buddy)
     508static void zone_merge_internal(size_t z1, size_t z2, zone_t *old_z1, buddy_system_t *buddy)
    534509{
    535510        ASSERT(zone_flags_available(zones.info[z1].flags));
     
    627602 *
    628603 */
    629 NO_TRACE static void return_config_frames(size_t znum, pfn_t pfn, size_t count)
     604static void return_config_frames(size_t znum, pfn_t pfn, size_t count)
    630605{
    631606        ASSERT(zone_flags_available(zones.info[znum].flags));
     
    662637 *
    663638 */
    664 NO_TRACE static void zone_reduce_region(size_t znum, pfn_t frame_idx,
    665     size_t count)
     639static void zone_reduce_region(size_t znum, pfn_t frame_idx, size_t count)
    666640{
    667641        ASSERT(zone_flags_available(zones.info[znum].flags));
     
    764738        for (i = z2 + 1; i < zones.count; i++) {
    765739                zones.info[i - 1] = zones.info[i];
    766                 if (zones.info[i - 1].buddy_system != NULL)
    767                         zones.info[i - 1].buddy_system->data =
    768                             (void *) &zones.info[i - 1];
     740                zones.info[i - 1].buddy_system->data =
     741                    (void *) &zones.info[i - 1];
    769742        }
    770743       
     
    804777 *
    805778 */
    806 NO_TRACE static void zone_construct(zone_t *zone, buddy_system_t *buddy,
    807     pfn_t start, size_t count, zone_flags_t flags)
     779static void zone_construct(zone_t *zone, buddy_system_t *buddy, pfn_t start,
     780    size_t count, zone_flags_t flags)
    808781{
    809782        zone->base = start;
     
    848821 *
    849822 */
    850 size_t zone_conf_size(size_t count)
     823uintptr_t zone_conf_size(size_t count)
    851824{
    852825        return (count * sizeof(frame_t) + buddy_conf_size(fnzb(count)));
     
    879852                 * the assert
    880853                 */
    881                 ASSERT(confframe != ADDR2PFN((uintptr_t ) NULL));
     854                ASSERT(confframe != NULL);
    882855               
    883856                /* If confframe is supposed to be inside our zone, then make sure
     
    915888                }
    916889               
    917                 size_t znum = zones_insert_zone(start, count, flags);
     890                size_t znum = zones_insert_zone(start, count);
    918891                if (znum == (size_t) -1) {
    919892                        irq_spinlock_unlock(&zones.lock, true);
     
    938911       
    939912        /* Non-available zone */
    940         size_t znum = zones_insert_zone(start, count, flags);
     913        size_t znum = zones_insert_zone(start, count);
    941914        if (znum == (size_t) -1) {
    942915                irq_spinlock_unlock(&zones.lock, true);
     
    10501023               
    10511024#ifdef CONFIG_DEBUG
    1052                 printf("Thread %" PRIu64 " waiting for %zu frames, "
    1053                     "%zu available.\n", THREAD->tid, size, avail);
     1025                printf("Thread %" PRIu64 " waiting for %" PRIs " frames, "
     1026                    "%" PRIs " available.\n", THREAD->tid, size, avail);
    10541027#endif
    10551028               
     
    11051078         */
    11061079        pfn_t pfn = ADDR2PFN(frame);
    1107         size_t znum = find_zone(pfn, 1, 0);
     1080        size_t znum = find_zone(pfn, 1, NULL);
    11081081       
    11091082        ASSERT(znum != (size_t) -1);
     
    11351108 *
    11361109 */
    1137 NO_TRACE void frame_reference_add(pfn_t pfn)
     1110void frame_reference_add(pfn_t pfn)
    11381111{
    11391112        irq_spinlock_lock(&zones.lock, true);
     
    11421115         * First, find host frame zone for addr.
    11431116         */
    1144         size_t znum = find_zone(pfn, 1, 0);
     1117        size_t znum = find_zone(pfn, 1, NULL);
    11451118       
    11461119        ASSERT(znum != (size_t) -1);
     
    11541127 *
    11551128 */
    1156 NO_TRACE void frame_mark_unavailable(pfn_t start, size_t count)
     1129void frame_mark_unavailable(pfn_t start, size_t count)
    11571130{
    11581131        irq_spinlock_lock(&zones.lock, true);
     
    12981271                bool available = zone_flags_available(flags);
    12991272               
    1300                 printf("%-4zu", i);
     1273                printf("%-4" PRIs, i);
    13011274               
    13021275#ifdef __32_BITS__
    1303                 printf("  %p", (void *) base);
     1276                printf("  %10p", base);
    13041277#endif
    13051278               
    13061279#ifdef __64_BITS__
    1307                 printf(" %p", (void *) base);
     1280                printf(" %18p", base);
    13081281#endif
    13091282               
    1310                 printf(" %12zu %c%c%c      ", count,
     1283                printf(" %12" PRIs " %c%c%c      ", count,
    13111284                    available ? 'A' : ' ',
    13121285                    (flags & ZONE_RESERVED) ? 'R' : ' ',
     
    13141287               
    13151288                if (available)
    1316                         printf("%14zu %14zu",
     1289                        printf("%14" PRIs " %14" PRIs,
    13171290                            free_count, busy_count);
    13181291               
     
    13551328        bool available = zone_flags_available(flags);
    13561329       
    1357         printf("Zone number:       %zu\n", znum);
    1358         printf("Zone base address: %p\n", (void *) base);
    1359         printf("Zone size:         %zu frames (%zu KiB)\n", count,
     1330        printf("Zone number:       %" PRIs "\n", znum);
     1331        printf("Zone base address: %p\n", base);
     1332        printf("Zone size:         %" PRIs " frames (%" PRIs " KiB)\n", count,
    13601333            SIZE2KB(FRAMES2SIZE(count)));
    13611334        printf("Zone flags:        %c%c%c\n",
     
    13651338       
    13661339        if (available) {
    1367                 printf("Allocated space:   %zu frames (%zu KiB)\n",
     1340                printf("Allocated space:   %" PRIs " frames (%" PRIs " KiB)\n",
    13681341                    busy_count, SIZE2KB(FRAMES2SIZE(busy_count)));
    1369                 printf("Available space:   %zu frames (%zu KiB)\n",
     1342                printf("Available space:   %" PRIs " frames (%" PRIs " KiB)\n",
    13701343                    free_count, SIZE2KB(FRAMES2SIZE(free_count)));
    13711344        }
Note: See TracChangeset for help on using the changeset viewer.