• John David Anglin's avatar
    parisc: Fix handling off probe non-access faults · e00b0a2a
    John David Anglin authored
    Currently, the parisc kernel does not fully support non-access TLB
    fault handling for probe instructions. In the fast path, we set the
    target register to zero if it is not a shadowed register. The slow
    path is not implemented, so we call do_page_fault. The architecture
    indicates that non-access faults should not cause a page fault from
    disk.
    
    This change adds to code to provide non-access fault support for
    probe instructions. It also modifies the handling of faults on
    userspace so that if the address lies in a valid VMA and the access
    type matches that for the VMA, the probe target register is set to
    one. Otherwise, the target register is set to zero.
    
    This was done to make probe instructions more useful for userspace.
    Probe instructions are not very useful if they set the target register
    to zero whenever a page is not present in memory. Nominally, the
    purpose of the probe instruction is determine whether read or write
    access to a given address is allowed.
    
    This fixes a problem in function pointer comparison noticed in the
    glibc testsuite (stdio-common/tst-vfprintf-user-type). The same
    problem is likely in glibc (_dl_lookup_address).
    
    V2 adds flush and lpa instruction support to handle_nadtlb_fault.
    Signed-off-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    e00b0a2a
traps.c 21.8 KB