Changeset b6b576c in mainline for generic/src/mm/frame.c


Ignore:
Timestamp:
2006-03-16T11:34:51Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d764ddc
Parents:
8dfef11
Message:

support for more init tasks
(might break some archs yet)

File:
1 edited

Legend:

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

    r8dfef11 rb6b576c  
    135135        spinlock_lock(&zones.lock);
    136136        /* Try to merge */
    137         if (zones.count+1 == ZONES_MAX)
     137        if (zones.count + 1 == ZONES_MAX)
    138138                panic("Maximum zone(%d) count exceeded.", ZONES_MAX);
    139         for (i=0; i < zones.count; i++) {
     139        for (i = 0; i < zones.count; i++) {
    140140                /* Check for overflow */
    141141                z = zones.info[i];
     
    149149        }
    150150        /* Move other zones up */
    151         for (j=i;j < zones.count;j++)
    152                 zones.info[j+1] = zones.info[j];
     151        for (j = i;j < zones.count; j++)
     152                zones.info[j + 1] = zones.info[j];
    153153        zones.info[i] = newzone;
    154154        zones.count++;
     
    690690        /* Replace existing zones in zoneinfo list */
    691691        zones.info[z1] = newzone;
    692         for (i=z2+1;i < zones.count;i++)
    693                 zones.info[i-1] = zones.info[i];
     692        for (i = z2 + 1; i < zones.count; i++)
     693                zones.info[i - 1] = zones.info[i];
    694694        zones.count--;
    695695
     
    809809        confcount = SIZE2FRAMES(zone_conf_size(count));
    810810        if (confframe >= start && confframe < start+count) {
    811                 for (;confframe < start+count;confframe++) {
     811                for (;confframe < start + count; confframe++) {
    812812                        addr = PFN2ADDR(confframe);
    813                         if (overlaps(addr, PFN2ADDR(confcount),
    814                                      KA2PA(config.base),config.kernel_size))
     813                        if (overlaps(addr, PFN2ADDR(confcount), KA2PA(config.base), config.kernel_size))
    815814                                continue;
    816                         if (config.init_addr)
    817                                 if (overlaps(addr,PFN2ADDR(confcount),
    818                                              KA2PA(config.init_addr),
    819                                              config.init_size))
    820                                         continue;
     815                       
     816                        bool overlap = false;
     817                        count_t i;
     818                        for (i = 0; i < init.cnt; i++)
     819                                if (overlaps(addr, PFN2ADDR(confcount), KA2PA(init.tasks[i].addr), init.tasks[i].size)) {
     820                                        overlap = true;
     821                                        break;
     822                                }
     823                        if (overlap)
     824                                continue;
     825                       
    821826                        break;
    822827                }
    823                 if (confframe >= start+count)
     828                if (confframe >= start + count)
    824829                        panic("Cannot find configuration data for zone.");
    825830        }
     
    990995                pfn_t lastframe = ADDR2PFN(KA2PA(config.base+config.kernel_size));
    991996                frame_mark_unavailable(firstframe,lastframe-firstframe+1);
    992                 if (config.init_size > 0)
    993                         frame_mark_unavailable(ADDR2PFN(KA2PA(config.init_addr)),
    994                                                SIZE2FRAMES(config.init_size));
     997               
     998                count_t i;
     999                for (i = 0; i < init.cnt; i++)
     1000                        frame_mark_unavailable(ADDR2PFN(KA2PA(init.tasks[i].addr)), SIZE2FRAMES(init.tasks[i].size));
    9951001        }
    9961002}
     
    10101016        printf("#  Base address\tFree Frames\tBusy Frames\n");
    10111017        printf("   ------------\t-----------\t-----------\n");
    1012         for (i=0;i<zones.count;i++) {
     1018        for (i = 0; i < zones.count; i++) {
    10131019                zone = zones.info[i];
    10141020                spinlock_lock(&zone->lock);
     
    10331039        spinlock_lock(&zones.lock);
    10341040
    1035         for (i=0;i < zones.count; i++) {
     1041        for (i = 0; i < zones.count; i++) {
    10361042                if (i == num || PFN2ADDR(zones.info[i]->base) == num) {
    10371043                        zone = zones.info[i];
Note: See TracChangeset for help on using the changeset viewer.