Rev 1051 | Rev 1187 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1051 | Rev 1186 | ||
|---|---|---|---|
| Line 213... | Line 213... | ||
| 213 | tss_desc->dpl = PL_KERNEL; |
213 | tss_desc->dpl = PL_KERNEL; |
| 214 | 214 | ||
| 215 | gdt_tss_setbase(&gdt_p[TSS_DES], (__address) tss_p); |
215 | gdt_tss_setbase(&gdt_p[TSS_DES], (__address) tss_p); |
| 216 | gdt_tss_setlimit(&gdt_p[TSS_DES], sizeof(struct tss) - 1); |
216 | gdt_tss_setlimit(&gdt_p[TSS_DES], sizeof(struct tss) - 1); |
| 217 | 217 | ||
| 218 | __asm__("lgdt %0" : : "m"(gdtr)); |
218 | gdtr_load(&gdtr); |
| 219 | __asm__("lidt %0" : : "m"(idtr)); |
219 | idtr_load(&idtr); |
| 220 | /* |
220 | /* |
| 221 | * As of this moment, the current CPU has its own GDT pointing |
221 | * As of this moment, the current CPU has its own GDT pointing |
| 222 | * to its own TSS. We just need to load the TR register. |
222 | * to its own TSS. We just need to load the TR register. |
| 223 | */ |
223 | */ |
| 224 | __asm__("ltr %0" : : "r" ((__u16) gdtselector(TSS_DES))); |
224 | tr_load(gdtselector(TSS_DES)); |
| 225 | } |
225 | } |