Skip to content
  • David Mosberger-Tang's avatar
    [IA64] Reschedule break_fault() for better performance. · f8fa5448
    David Mosberger-Tang authored
    
    
    This patch reorganizes break_fault() to optimistically assume that a
    system-call is being performed from user-space (which is almost always
    the case).  If it turns out that (a) we're not being called due to a
    system call or (b) we're being called from within the kernel, we fixup
    the no-longer-valid assumptions in non_syscall() and .break_fixup(),
    respectively.
    
    With this approach, there are 3 major phases:
    
     - Phase 1: Read various control & application registers, in
    	    particular the current task pointer from AR.K6.
     - Phase 2: Do all memory loads (load system-call entry,
    	    load current_thread_info()->flags, prefetch
    	    kernel register-backing store) and switch
    	    to kernel register-stack.
     - Phase 3: Call ia64_syscall_setup() and invoke
    	    syscall-handler.
    
    Good for 26-30 cycles of improvement on break-based syscall-path.
    
    Signed-off-by: default avatarDavid Mosberger-Tang <davidm@hpl.hp.com>
    Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
    f8fa5448