Ignore:
File:
1 edited

Legend:

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

    r2cc7f16 r818fffe  
    240240NO_TRACE static bool zone_can_alloc(zone_t *zone, uint8_t order)
    241241{
    242         return ((zone->flags & ZONE_AVAILABLE) &&
    243             buddy_system_can_alloc(zone->buddy_system, order));
     242        return (zone_flags_available(zone->flags)
     243            && buddy_system_can_alloc(zone->buddy_system, order));
    244244}
    245245
     
    265265                 * Check whether the zone meets the search criteria.
    266266                 */
    267                 if (ZONE_FLAGS_MATCH(zones.info[i].flags, flags)) {
     267                if ((zones.info[i].flags & flags) == flags) {
    268268                        /*
    269269                         * Check if the zone has 2^order frames area available.
     
    460460NO_TRACE static pfn_t zone_frame_alloc(zone_t *zone, uint8_t order)
    461461{
    462         ASSERT(zone->flags & ZONE_AVAILABLE);
     462        ASSERT(zone_flags_available(zone->flags));
    463463       
    464464        /* Allocate frames from zone buddy system */
     
    490490NO_TRACE static size_t zone_frame_free(zone_t *zone, size_t frame_idx)
    491491{
    492         ASSERT(zone->flags & ZONE_AVAILABLE);
     492        ASSERT(zone_flags_available(zone->flags));
    493493       
    494494        frame_t *frame = &zone->frames[frame_idx];
     
    518518NO_TRACE static void zone_mark_unavailable(zone_t *zone, size_t frame_idx)
    519519{
    520         ASSERT(zone->flags & ZONE_AVAILABLE);
     520        ASSERT(zone_flags_available(zone->flags));
    521521       
    522522        frame_t *frame = zone_get_frame(zone, frame_idx);
     
    549549    buddy_system_t *buddy)
    550550{
    551         ASSERT(zones.info[z1].flags & ZONE_AVAILABLE);
    552         ASSERT(zones.info[z2].flags & ZONE_AVAILABLE);
     551        ASSERT(zone_flags_available(zones.info[z1].flags));
     552        ASSERT(zone_flags_available(zones.info[z2].flags));
    553553        ASSERT(zones.info[z1].flags == zones.info[z2].flags);
    554554        ASSERT(zones.info[z1].base < zones.info[z2].base);
     
    645645NO_TRACE static void return_config_frames(size_t znum, pfn_t pfn, size_t count)
    646646{
    647         ASSERT(zones.info[znum].flags & ZONE_AVAILABLE);
     647        ASSERT(zone_flags_available(zones.info[znum].flags));
    648648       
    649649        size_t cframes = SIZE2FRAMES(zone_conf_size(count));
     
    681681    size_t count)
    682682{
    683         ASSERT(zones.info[znum].flags & ZONE_AVAILABLE);
     683        ASSERT(zone_flags_available(zones.info[znum].flags));
    684684        ASSERT(frame_idx + count < zones.info[znum].count);
    685685       
     
    723723         * set of flags
    724724         */
    725         if ((z1 >= zones.count) || (z2 >= zones.count) || (z2 - z1 != 1) ||
    726             (zones.info[z1].flags != zones.info[z2].flags)) {
     725        if ((z1 >= zones.count) || (z2 >= zones.count)
     726            || (z2 - z1 != 1)
     727            || (!zone_flags_available(zones.info[z1].flags))
     728            || (!zone_flags_available(zones.info[z2].flags))
     729            || (zones.info[z1].flags != zones.info[z2].flags)) {
    727730                ret = false;
    728731                goto errout;
     
    825828        zone->buddy_system = buddy;
    826829       
    827         if (flags & ZONE_AVAILABLE) {
     830        if (zone_flags_available(flags)) {
    828831                /*
    829832                 * Compute order for buddy system and initialize
     
    862865{
    863866        return (count * sizeof(frame_t) + buddy_conf_size(fnzb(count)));
    864 }
    865 
    866 /** Allocate external configuration frames from low memory. */
    867 pfn_t zone_external_conf_alloc(size_t count)
    868 {
    869         size_t size = zone_conf_size(count);
    870         size_t order = ispwr2(size) ? fnzb(size) : (fnzb(size) + 1);
    871 
    872         return ADDR2PFN((uintptr_t) frame_alloc(order - FRAME_WIDTH,
    873             FRAME_LOWMEM | FRAME_ATOMIC));
    874867}
    875868
     
    895888        irq_spinlock_lock(&zones.lock, true);
    896889       
    897         if (flags & ZONE_AVAILABLE) {  /* Create available zone */
     890        if (zone_flags_available(flags)) {  /* Create available zone */
    898891                /* Theoretically we could have NULL here, practically make sure
    899892                 * nobody tries to do that. If some platform requires, remove
     
    901894                 */
    902895                ASSERT(confframe != ADDR2PFN((uintptr_t ) NULL));
    903 
    904                 /* Update the known end of physical memory. */
    905                 config.physmem_end = max(config.physmem_end, PFN2ADDR(start + count));
    906896               
    907897                /* If confframe is supposed to be inside our zone, then make sure
     
    924914                                for (i = 0; i < init.cnt; i++)
    925915                                        if (overlaps(addr, PFN2ADDR(confcount),
    926                                             init.tasks[i].paddr,
     916                                            KA2PA(init.tasks[i].addr),
    927917                                            init.tasks[i].size)) {
    928918                                                overlap = true;
     
    12421232       
    12431233        /* Tell the architecture to create some memory */
    1244         frame_low_arch_init();
     1234        frame_arch_init();
    12451235        if (config.cpu_active == 1) {
    12461236                frame_mark_unavailable(ADDR2PFN(KA2PA(config.base)),
     
    12511241                size_t i;
    12521242                for (i = 0; i < init.cnt; i++) {
    1253                         pfn_t pfn = ADDR2PFN(init.tasks[i].paddr);
     1243                        pfn_t pfn = ADDR2PFN(KA2PA(init.tasks[i].addr));
    12541244                        frame_mark_unavailable(pfn,
    12551245                            SIZE2FRAMES(init.tasks[i].size));
     
    12651255                frame_mark_unavailable(0, 1);
    12661256        }
    1267         frame_high_arch_init();
    1268 }
    1269 
    1270 /** Adjust bounds of physical memory region according to low/high memory split.
    1271  *
    1272  * @param low[in]       If true, the adjustment is performed to make the region
    1273  *                      fit in the low memory. Otherwise the adjustment is
    1274  *                      performed to make the region fit in the high memory.
    1275  * @param basep[inout]  Pointer to a variable which contains the region's base
    1276  *                      address and which may receive the adjusted base address.
    1277  * @param sizep[inout]  Pointer to a variable which contains the region's size
    1278  *                      and which may receive the adjusted size.
    1279  * @retun               True if the region still exists even after the
    1280  *                      adjustment, false otherwise.
    1281  */
    1282 bool frame_adjust_zone_bounds(bool low, uintptr_t *basep, size_t *sizep)
    1283 {
    1284         uintptr_t limit = KA2PA(config.identity_base) + config.identity_size;
    1285 
    1286         if (low) {
    1287                 if (*basep > limit)
    1288                         return false;
    1289                 if (*basep + *sizep > limit)
    1290                         *sizep = limit - *basep;
    1291         } else {
    1292                 if (*basep + *sizep <= limit)
    1293                         return false;
    1294                 if (*basep <= limit) {
    1295                         *sizep -= limit - *basep;
    1296                         *basep = limit;
    1297                 }
    1298         }
    1299         return true;
    13001257}
    13011258
     
    13361293                *total += (uint64_t) FRAMES2SIZE(zones.info[i].count);
    13371294               
    1338                 if (zones.info[i].flags & ZONE_AVAILABLE) {
     1295                if (zone_flags_available(zones.info[i].flags)) {
    13391296                        *busy += (uint64_t) FRAMES2SIZE(zones.info[i].busy_count);
    13401297                        *free += (uint64_t) FRAMES2SIZE(zones.info[i].free_count);
     
    13871344                irq_spinlock_unlock(&zones.lock, true);
    13881345               
    1389                 bool available = ((flags & ZONE_AVAILABLE) != 0);
     1346                bool available = zone_flags_available(flags);
    13901347               
    13911348                printf("%-4zu", i);
     
    13991356#endif
    14001357               
    1401                 printf(" %12zu %c%c%c%c%c    ", count,
    1402                     available ? 'A' : '-',
    1403                     (flags & ZONE_RESERVED) ? 'R' : '-',
    1404                     (flags & ZONE_FIRMWARE) ? 'F' : '-',
    1405                     (flags & ZONE_LOWMEM) ? 'L' : '-',
    1406                     (flags & ZONE_HIGHMEM) ? 'H' : '-');
     1358                printf(" %12zu %c%c%c      ", count,
     1359                    available ? 'A' : ' ',
     1360                    (flags & ZONE_RESERVED) ? 'R' : ' ',
     1361                    (flags & ZONE_FIRMWARE) ? 'F' : ' ');
    14071362               
    14081363                if (available)
     
    14461401        irq_spinlock_unlock(&zones.lock, true);
    14471402       
    1448         bool available = ((flags & ZONE_AVAILABLE) != 0);
     1403        bool available = zone_flags_available(flags);
    14491404       
    14501405        uint64_t size;
     
    14561411        printf("Zone size:         %zu frames (%" PRIu64 " %s)\n", count,
    14571412            size, size_suffix);
    1458         printf("Zone flags:        %c%c%c%c%c\n",
    1459             available ? 'A' : '-',
    1460             (flags & ZONE_RESERVED) ? 'R' : '-',
    1461             (flags & ZONE_FIRMWARE) ? 'F' : '-',
    1462             (flags & ZONE_LOWMEM) ? 'L' : '-',
    1463             (flags & ZONE_HIGHMEM) ? 'H' : '-');
     1413        printf("Zone flags:        %c%c%c\n",
     1414            available ? 'A' : ' ',
     1415            (flags & ZONE_RESERVED) ? 'R' : ' ',
     1416            (flags & ZONE_FIRMWARE) ? 'F' : ' ');
    14641417       
    14651418        if (available) {
Note: See TracChangeset for help on using the changeset viewer.