cvs commit: src/sys/ia64/ia64 exception.s

Marcel Moolenaar marcel at FreeBSD.org
Sat May 24 13:51:56 PDT 2003


marcel      2003/05/24 13:51:55 PDT

  FreeBSD src repository

  Modified files:
    sys/ia64/ia64        exception.s 
  Log:
  Unconditionally restore ar.k7 (memory stack) and ar.k6 (register stack)
  when returning from an interrupt. Both registers are used on interrupt
  to switch to the right kernel stack, but other than that they are not
  used. This means we only have to make sure they contain proper values
  while in user mode. As such, we conditionally restored these registers
  based on whether we returned to userland or not. A nice property of
  conditionally restoring ar.k6 and ar.k7 is that it introduces two
  invariants: ar.k6 always points to the bottom of the kernel stack and
  ar.k7 always points to the top of the kernel stack (immediately below
  the PCB we have there).
  
  However, the EPC syscall path introduces an irregularity: there's no
  "thin red line" between user and kernel. There's a grey area that's a
  couple of instructions wide. Any interruption in that grey area is
  bound to see an inconsistent state. One such state is that we're in
  kernel space for all practical purposes, but we still need to have
  ar.k6 and ar.k7 restored as if we're in userland.
  
  Thus: restore ar.k6 and ar.k7 unconditionally at the cost of losing
  a valuable invariant. Both registers now hold the extend of the
  usable portion of the kernel stack at any interrupt nesting, which
  when in userland mean the bottom and the top of the kstack.
  
  Revision  Changes    Path
  1.45      +2 -2      src/sys/ia64/ia64/exception.s


More information about the cvs-src mailing list