• Jeremy Kerr's avatar
    powerpc/spufs: Fix spinning in spufs_ps_fault on signal · 60657263
    Jeremy Kerr authored
    Currently, we can end up in an infinite loop if we get a signal
    while the kernel has faulted in spufs_ps_fault. Eg:
    
     alarm(1);
    
     write(fd, some_spu_psmap_register_address, 4);
    
    - the write's copy_from_user will fault on the ps mapping, and
    signal_pending will be non-zero. Because returning from the fault
    handler will never clear TIF_SIGPENDING, so we'll just keep faulting,
    resulting in an unkillable process using 100% of CPU.
    
    This change returns VM_FAULT_SIGBUS if there's a fatal signal pending,
    letting us escape the loop.
    Signed-off-by: default avatarJeremy Kerr <jk@ozlabs.org>
    60657263
file.c 64.2 KB