Changeset b6b576c in mainline for generic/src
- Timestamp:
- 2006-03-16T11:34:51Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d764ddc
- Parents:
- 8dfef11
- Location:
- generic/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/src/main/kinit.c
r8dfef11 rb6b576c 133 133 134 134 interrupts_enable(); 135 136 if (config.init_size > 0) { 135 136 count_t i; 137 for (i = 0; i < init.cnt; i++) { 137 138 /* 138 * Create the first user task.139 * Run user tasks. 139 140 */ 140 141 141 if ( config.init_addr % FRAME_SIZE)142 panic(" config.init_addr is not frame aligned");142 if (init.tasks[i].addr % FRAME_SIZE) 143 panic("init[%d].addr is not frame aligned", i); 143 144 144 utask = task_run_program((void *) config.init_addr);145 utask = task_run_program((void *) init.tasks[i].addr); 145 146 if (utask) 146 147 ipc_phone_0 = &utask->answerbox; -
generic/src/main/main.c
r8dfef11 rb6b576c 64 64 65 65 config_t config; /**< Global configuration structure. */ 66 init_t init = {0}; /**< Initial user-space tasks */ 66 67 67 68 context_t ctx; … … 75 76 size_t hardcoded_ktext_size = 0; 76 77 size_t hardcoded_kdata_size = 0; 77 78 __address init_addr = 0;79 size_t init_size = 0;80 78 81 79 void main_bsp(void); … … 111 109 config.base = hardcoded_load_address; 112 110 config.memory_size = get_memory_size(); 113 config.init_addr = init_addr;114 config.init_size = init_size;115 111 116 112 config.kernel_size = ALIGN_UP(hardcoded_ktext_size + hardcoded_kdata_size, PAGE_SIZE); 117 113 stackaddr = config.base + config.kernel_size; 114 118 115 /* Avoid placing kernel on top of init */ 119 if (overlaps(stackaddr,CONFIG_STACK_SIZE, 120 config.init_addr, config.init_size)) { 121 122 stackaddr = ALIGN_UP(config.init_addr+config.init_size, 123 CONFIG_STACK_SIZE); 124 config.init_size = ALIGN_UP(config.init_size,CONFIG_STACK_SIZE) + CONFIG_STACK_SIZE; 125 } else { 116 count_t i; 117 bool overlap = false; 118 for (i = 0; i < init.cnt; i++) 119 if (overlaps(stackaddr, CONFIG_STACK_SIZE, init.tasks[i].addr, init.tasks[i].size)) { 120 stackaddr = ALIGN_UP(init.tasks[i].addr + init.tasks[i].size, CONFIG_STACK_SIZE); 121 init.tasks[i].size = ALIGN_UP(init.tasks[i].size, CONFIG_STACK_SIZE) + CONFIG_STACK_SIZE; 122 overlap = true; 123 } 124 125 if (!overlap) 126 126 config.kernel_size += CONFIG_STACK_SIZE; 127 }128 127 129 128 context_save(&ctx); … … 152 151 */ 153 152 kconsole_init(); 154 153 155 154 /* 156 155 * Exception handler initialization, before architecture … … 190 189 thread_init(); 191 190 192 if (config.init_size > 0) 193 printf("config.init_addr=%P, config.init_size=%d\n", config.init_addr, config.init_size); 191 count_t i; 192 for (i = 0; i < init.cnt; i++) 193 printf("init[%d].addr=%P, init[%d].size=%d\n", i, init.tasks[i].addr, i, init.tasks[i].size); 194 194 195 195 ipc_init(); -
generic/src/mm/frame.c
r8dfef11 rb6b576c 135 135 spinlock_lock(&zones.lock); 136 136 /* Try to merge */ 137 if (zones.count +1 == ZONES_MAX)137 if (zones.count + 1 == ZONES_MAX) 138 138 panic("Maximum zone(%d) count exceeded.", ZONES_MAX); 139 for (i =0; i < zones.count; i++) {139 for (i = 0; i < zones.count; i++) { 140 140 /* Check for overflow */ 141 141 z = zones.info[i]; … … 149 149 } 150 150 /* 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]; 153 153 zones.info[i] = newzone; 154 154 zones.count++; … … 690 690 /* Replace existing zones in zoneinfo list */ 691 691 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]; 694 694 zones.count--; 695 695 … … 809 809 confcount = SIZE2FRAMES(zone_conf_size(count)); 810 810 if (confframe >= start && confframe < start+count) { 811 for (;confframe < start +count;confframe++) {811 for (;confframe < start + count; confframe++) { 812 812 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)) 815 814 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 821 826 break; 822 827 } 823 if (confframe >= start +count)828 if (confframe >= start + count) 824 829 panic("Cannot find configuration data for zone."); 825 830 } … … 990 995 pfn_t lastframe = ADDR2PFN(KA2PA(config.base+config.kernel_size)); 991 996 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)); 995 1001 } 996 1002 } … … 1010 1016 printf("# Base address\tFree Frames\tBusy Frames\n"); 1011 1017 printf(" ------------\t-----------\t-----------\n"); 1012 for (i =0;i<zones.count;i++) {1018 for (i = 0; i < zones.count; i++) { 1013 1019 zone = zones.info[i]; 1014 1020 spinlock_lock(&zone->lock); … … 1033 1039 spinlock_lock(&zones.lock); 1034 1040 1035 for (i =0;i < zones.count; i++) {1041 for (i = 0; i < zones.count; i++) { 1036 1042 if (i == num || PFN2ADDR(zones.info[i]->base) == num) { 1037 1043 zone = zones.info[i];
Note:
See TracChangeset
for help on using the changeset viewer.