1. 23 10月, 2008 1 次提交
  2. 12 10月, 2006 1 次提交
  3. 26 9月, 2006 1 次提交
    • J
      [PATCH] uml: Use klibc setjmp/longjmp · 13c06be3
      Jeff Dike 提交于
      This patch adds an implementation of setjmp and longjmp to UML, allowing
      access to the inside of a jmpbuf without needing the access macros formerly
      provided by libc.
      
      The implementation is stolen from klibc.  I copy the relevant files into
      arch/um.  I have another patch which avoids the copying, but requires klibc be
      in the tree.
      
      setjmp and longjmp users required some tweaking.  Includes of <setjmp.h> were
      removed and includes of the UML longjmp.h were added where necessary.  There
      are also replacements of siglongjmp with UML_LONGJMP which I somehow missed
      earlier.
      Signed-off-by: NJeff Dike <jdike@addtoit.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      13c06be3
  4. 15 7月, 2006 1 次提交
  5. 20 4月, 2006 1 次提交
  6. 19 1月, 2006 2 次提交
    • J
      [PATCH] uml: use setjmp/longjmp instead of sigsetjmp/siglongjmp · c83d4635
      Jeff Dike 提交于
      Now that we are doing soft interrupts, there's no point in using sigsetjmp and
      siglongjmp.  Using setjmp and longjmp saves a sigprocmask on every jump.
      Signed-off-by: NJeff Dike <jdike@addtoit.com>
      Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      c83d4635
    • J
      [PATCH] uml: implement soft interrupts · 1d7173ba
      Jeff Dike 提交于
      This patch implements soft interrupts.  Interrupt enabling and disabling no
      longer map to sigprocmask.  Rather, a flag is set indicating whether
      interrupts may be handled.  If a signal comes in and interrupts are marked as
      OK, then it is handled normally.  If interrupts are marked as off, then the
      signal handler simply returns after noting that a signal needs handling.  When
      interrupts are enabled later on, this pending signals flag is checked, and the
      IRQ handlers are called at that point.
      
      The point of this is to reduce the cost of local_irq_save et al, since they
      are very much more common than the signals that they are enabling and
      disabling.  Soft interrupts produce a speed-up of ~25% on a kernel build.
      
      Subtleties -
      
          UML uses sigsetjmp/siglongjmp to switch contexts.  sigsetjmp has been
          wrapped in a save_flags-like macro which remembers the interrupt state at
          setjmp time, and restores it when it is longjmp-ed back to.
      
          The enable_signals function has to loop because the IRQ handler
          disables interrupts before returning.  enable_signals has to return with
          signals enabled, and signals may come in between the disabling and the
          return to enable_signals.  So, it loops for as long as there are pending
          signals, ensuring that signals are enabled when it finally returns, and
          that there are no pending signals that need to be dealt with.
      Signed-off-by: NJeff Dike <jdike@addtoit.com>
      Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      1d7173ba