version 1.152, 2017/09/17 09:59:23 |
version 1.155, 2018/01/04 13:36:30 |
|
|
pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ |
pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ |
#endif |
#endif |
pushl %eax |
pushl %eax |
|
call _C_LABEL(init_bootspace) |
call _C_LABEL(init386) |
call _C_LABEL(init386) |
addl $PDE_SIZE,%esp /* pop paddr_t */ |
addl $PDE_SIZE,%esp /* pop paddr_t */ |
addl $NGDT*8,%esp /* pop temporary gdt */ |
addl $NGDT*8,%esp /* pop temporary gdt */ |
|
|
pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ |
pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ |
#endif |
#endif |
pushl %esi |
pushl %esi |
|
call _C_LABEL(init_bootspace) |
call _C_LABEL(init386) |
call _C_LABEL(init386) |
addl $PDE_SIZE,%esp /* pop paddr_t */ |
addl $PDE_SIZE,%esp /* pop paddr_t */ |
call _C_LABEL(main) |
call _C_LABEL(main) |
|
|
addl $4,%esp |
addl $4,%esp |
#else |
#else |
movl PCB_ESP0(%ebx),%eax |
movl PCB_ESP0(%ebx),%eax |
movl %eax,CPUVAR(ESP0) |
movl CPUVAR(TSS),%ecx |
|
movl %eax,TSS_ESP0(%ecx) |
#endif |
#endif |
|
|
/* Don't bother with the rest if switching to a system process. */ |
/* Don't bother with the rest if switching to a system process. */ |
|
|
movl PCB_IOMAP(%ebx),%eax |
movl PCB_IOMAP(%ebx),%eax |
orl %eax,%eax |
orl %eax,%eax |
jnz .Lcopy_iobitmap |
jnz .Lcopy_iobitmap |
movl $(IOMAP_INVALOFF << 16),CPUVAR(IOBASE) |
movl CPUVAR(TSS),%eax |
|
movl $(IOMAP_INVALOFF << 16),TSS_IOBASE(%eax) |
.Liobitmap_done: |
.Liobitmap_done: |
|
|
/* Is this process using RAS (restartable atomic sequences)? */ |
/* Is this process using RAS (restartable atomic sequences)? */ |
|
|
pushl %esi |
pushl %esi |
pushl %edi |
pushl %edi |
movl %eax,%esi /* pcb_iomap */ |
movl %eax,%esi /* pcb_iomap */ |
movl CPUVAR(SELF),%edi |
movl CPUVAR(TSS),%edi |
leal CPU_INFO_IOMAP(%edi),%edi |
leal TSS_IOMAP(%edi),%edi |
rep |
rep |
movsl |
movsl |
popl %edi |
popl %edi |
popl %esi |
popl %esi |
movl $((CPU_INFO_IOMAP - CPU_INFO_TSS) << 16),CPUVAR(IOBASE) |
movl CPUVAR(TSS),%eax |
|
movl $((TSS_IOMAP - TSS_TSS) << 16),TSS_IOBASE(%eax) |
jmp .Liobitmap_done |
jmp .Liobitmap_done |
END(cpu_switchto) |
END(cpu_switchto) |
|
|