]> Zhao Yanbai Git Server - minix.git/commit
Complete ovehaul of mode switching code
authorTomas Hruby <tom@minix3.org>
Fri, 6 Nov 2009 09:08:26 +0000 (09:08 +0000)
committerTomas Hruby <tom@minix3.org>
Fri, 6 Nov 2009 09:08:26 +0000 (09:08 +0000)
commitebbce7507b6f317e3069bef69e28e52e04c9ba13
tree33950b73af699507b035d7f764325b00374222b9
parentf2a1f21a396f6f891ab81196d20fed03b09b9abc
Complete ovehaul of mode switching code

- after a trap to kernel, the code automatically switches to kernel
  stack, in the future local to the CPU

- k_reenter variable replaced by a test whether the CS is kernel cs or
  not. The information is passed further if needed. Removes a global
  variable which would need to be cpu local

- no need for global variables describing the exception or trap
  context. This information is kept on stack and a pointer to this
  structure is passed to the C code as a single structure

- removed loadedcr3 variable and its use replaced by reading the %cr3
  register

- no need to redisable interrupts in restart() as they are already
  disabled.

- unified handling of traps that push and don't push errorcode

- removed save() function as the process context is not saved directly
  to process table but saved as required by the trap code. Essentially
  it means that save() code is inlined everywhere not only in the
  exception handling routine

- returning from syscall is more arch independent - it sets the retger
  in C

- top of the x86 stack contains the current CPU id and pointer to the
  currently scheduled process (the one right interrupted) so the mode
  switch code can find where to save the context without need to use
  proc_ptr which will be cpu local in the future and therefore
  difficult to access in assembler and expensive to access in general

- some more clean up of level0 code. No need to read-back the argument
  passed in
  %eax from the proc structure. The mode switch code does not clobber
  %the general registers and hence we can just call what is in %eax

- many assebly macros in sconst.h as they will be reused by the apic
  assembly
kernel/arch/i386/exception.c
kernel/arch/i386/klib386.S
kernel/arch/i386/memory.c
kernel/arch/i386/mpx386.S
kernel/arch/i386/protect.c
kernel/arch/i386/proto.h
kernel/arch/i386/sconst.h
kernel/arch/i386/system.c
kernel/glo.h
kernel/proc.c
kernel/proto.h