• Tiejun Chen's avatar
    ppc64: fix missing to check all bits of _TIF_USER_WORK_MASK in preempt · c58ce2b1
    Tiejun Chen authored
    In entry_64.S version of ret_from_except_lite, you'll notice that
    in the !preempt case, after we've checked MSR_PR we test for any
    TIF flag in _TIF_USER_WORK_MASK to decide whether to go to do_work
    or not. However, in the preempt case, we do a convoluted trick to
    test SIGPENDING only if PR was set and always test NEED_RESCHED ...
    but we forget to test any other bit of _TIF_USER_WORK_MASK !!! So
    that means that with preempt, we completely fail to test for things
    like single step, syscall tracing, etc...
    
    This should be fixed as the following path:
    
     - Test PR. If not set, go to resume_kernel, else continue.
    
     - If go resume_kernel, to do that original do_work.
    
     - If else, then always test for _TIF_USER_WORK_MASK to decide to do
    that original user_work, else restore directly.
    Signed-off-by: default avatarTiejun Chen <tiejun.chen@windriver.com>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    c58ce2b1
entry_64.S 25.9 KB