• Bodo Stroesser's avatar
    [PATCH] uml: S390 preparation, abstract host page fault data · c578455a
    Bodo Stroesser authored
    
    
    This patch removes the arch-specific fault/trap-infos from thread and
    skas-regs.
    
    It adds a new struct faultinfo, that is arch-specific defined in
    sysdep/faultinfo.h.
    
    The structure is inserted in thread.arch and thread.regs.skas and
    thread.regs.tt
    
    Now, segv and other trap-handlers can copy the contents from regs.X.faultinfo
    to thread.arch.faultinfo with one simple assignment.
    
    Also, the number of macros necessary is reduced to
    
    FAULT_ADDRESS(struct faultinfo)
        extracts the faulting address from faultinfo
    
    FAULT_WRITE(struct faultinfo)
        extracts the "is_write" flag
    
    SEGV_IS_FIXABLE(struct faultinfo)
        is true for the fixable segvs, i.e. (TRAP == 14)
        on i386
    
    UPT_FAULTINFO(regs)
        result is (struct faultinfo *) to the faultinfo
        in regs->skas.faultinfo
    
    GET_FAULTINFO_FROM_SC(struct faultinfo, struct sigcontext *)
        copies the relevant parts of the sigcontext to
        struct faultinfo.
    
    On SIGSEGV, call user_signal() instead of handle_segv(), if the architecture
    provides the information needed in PTRACE_FAULTINFO, or if PTRACE_FAULTINFO is
    missing, because segv-stub will provide the info.
    
    The benefit of the change is, that in case of a non-fixable SIGSEGV, we can
    give user processes a SIGSEGV, instead of possibly looping on pagefault
    handling.
    
    Since handle_segv() sikked arch_fixup() implicitly by passing ip==0 to segv(),
    I changed segv() to call arch_fixup() only, if !is_user.
    Signed-off-by: default avatarBodo Stroesser <bstroesser@fujitsu-siemens.com>
    Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    c578455a
trap_kern.c 5.83 KB