Rev 205 | Rev 273 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 205 | Rev 269 | ||
---|---|---|---|
Line 83... | Line 83... | ||
83 | */ |
83 | */ |
84 | void kmp(void *arg) |
84 | void kmp(void *arg) |
85 | { |
85 | { |
86 | __address src, dst; |
86 | __address src, dst; |
87 | int i; |
87 | int i; |
88 | 88 | ||
89 | ASSERT(ops != NULL); |
89 | ASSERT(ops != NULL); |
90 | 90 | ||
91 | waitq_initialize(&ap_completion_wq); |
91 | waitq_initialize(&ap_completion_wq); |
92 | 92 | ||
93 | /* |
93 | /* |
Line 139... | Line 139... | ||
139 | if (!(gdt_new = (struct descriptor *) malloc(GDT_ITEMS*sizeof(struct descriptor)))) |
139 | if (!(gdt_new = (struct descriptor *) malloc(GDT_ITEMS*sizeof(struct descriptor)))) |
140 | panic("couldn't allocate memory for GDT\n"); |
140 | panic("couldn't allocate memory for GDT\n"); |
141 | 141 | ||
142 | memcpy(gdt_new, gdt, GDT_ITEMS*sizeof(struct descriptor)); |
142 | memcpy(gdt_new, gdt, GDT_ITEMS*sizeof(struct descriptor)); |
143 | memsetb((__address)(&gdt_new[TSS_DES]), sizeof(struct descriptor), 0); |
143 | memsetb((__address)(&gdt_new[TSS_DES]), sizeof(struct descriptor), 0); |
- | 144 | ap_bootstrap_gdtr.base = KA2PA((__address) gdt_new); |
|
144 | gdtr.base = KA2PA((__address) gdt_new); |
145 | gdtr.base = (__address) gdt_new; |
145 | 146 | ||
146 | if (l_apic_send_init_ipi(ops->cpu_apic_id(i))) { |
147 | if (l_apic_send_init_ipi(ops->cpu_apic_id(i))) { |
147 | /* |
148 | /* |
148 | * There may be just one AP being initialized at |
149 | * There may be just one AP being initialized at |
149 | * the time. After it comes completely up, it is |
150 | * the time. After it comes completely up, it is |