Skip to content
  • Bruce Evans's avatar
    Remove all kernel uses of pcb_psl, but keep in in the struct to · 1d3c0fa7
    Bruce Evans authored
    preserve the ABI and API for applications.  It was removed in the port
    to amd64, but was remained as garbage giving a micro-pessimization and
    spurious single-step traps on i386.
    
    pcb_psl was intended to be used just to do a context switch of PSL_I,
    but this context switch was null in most or all versions, and
    mis-switching of PSL_T was done instead.
    
    Some history:
    - in 386BSD-0.0, cpu_switch() ran at splhigh() and splhigh() did too
      much interrupt disabling, so interrupts were hard-disabled across
      cpu_switch() and too many other places
    - in 386BSD-0.0-patchkit through FreeBSD-4 and FreeBSD-5 before
      SMPng, splhigh() did soft interrupt masking, and cpu_switch() was
      excessively cautious and did a cli at the start and a sti at the
      end to hard-disable interrupts across the switch
    - SMPng replaced the spl's and cli's by spinlocks (just sched_lock?),
      so interrupts were hard-disabled across cpu_switch() and too many
      other places again
    - initial attempts to fix this intended to restore some soft
      interrupt disabling, but to support variations in this cpu_switch()
      used pushfl/popfl into pcb_psl to avoid hard-coding the assumption
      that the initial and final states have PSL_I enabled.  But the
      version with soft interrupt disabling wasn't used for long, or was
      never committed, (except I always used my different version of it
      for UP) so the pushfl/popl and pcb_psl to hold them have been doing
      less than nothing for about 14 years.
    1d3c0fa7