lkml.org 
[lkml]   [2011]   [Sep]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 6/6] freezer: kill unused set_freezable_with_signal()
    On 09/05, Tejun Heo wrote:
    >
    > Hello, Oleg.
    >
    > On Sun, Sep 04, 2011 at 08:46:26PM +0200, Oleg Nesterov wrote:
    > > > @@ -72,10 +72,6 @@ bool __refrigerator(bool check_kthr_stop)
    > > > schedule();
    > > > }
    > > >
    > > > - spin_lock_irq(&current->sighand->siglock);
    > > > - recalc_sigpending(); /* We sent fake signal, clean it up */
    > > > - spin_unlock_irq(&current->sighand->siglock);
    > > > -
    > >
    > > Why? This recalc_sigpending() makes sense imho. Otherwise the user-space
    > > tasks (almost) always return with TIF_SIGPENDING. May be we can do this
    > > under "if (PF_KTRHREAD)".
    >
    > PF_KTHREAD no longer gets TIF_SIGPENDING set, so...

    Yes,

    > > For example. Suppose the user-space task does wait_event_freezable()...
    > >
    > > Hmm. OTOH, wait_event_freezable() looks wrong anyway... So probably
    > > this doesn't matter. ptrace_stop/get_signal_to_deliver doesn't need
    > > this, probably we do not care about the other callers.
    >
    > Can you elaborate on it being wrong? Do you mean the possibility of
    > leaking spurious TIF_SIGPENDING?

    Perhaps it is correct... Just I do not understand what it should do.
    I thought it is "wait_for_event && do_not_block_freezer". And at first
    glance the code looks as if it tries to do this. Say, in the "likely"
    case we restart wait_event_interruptible() after refrigerator().

    But this looks racy. Suppose that freezing() is already false when
    try_to_freeze() or __refrigerator() is called. Say, cgroup_freezer does
    freeze_task() + __thaw_task(). Why it returns -ERESTARTSYS in this case?

    And if it can be used by the userspace thread, then we should probably
    do recalc_sigpending() somewhere, otherwise wait_event_freezable() will
    always return -ERESTARTSYS after __refrigerator().

    Oleg.



    \
     
     \ /
      Last update: 2011-09-05 18:25    [W:0.025 / U:29.948 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site