lkml.org 
[lkml]   [2003]   [Jul]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Software suspend testing in 2.6.0-test1
    Hi!

    > > Thanks for a report. If it came with a patch it would be better
    > > ;-). I'll take a look.
    >
    > Here is a patch to make software suspend correctly handle stopped
    > processes. It should apply cleanly on top of the patch you sent to
    > Linus to decouple SOFTWARE_SUSPEND and ACPI_SLEEP.
    >
    > @@ -164,14 +164,18 @@
    > * Refrigerator and related stuff
    > */
    >
    > -#define INTERESTING(p) > - /* We don't want to touch kernel_threads..*/ > - if (p->flags & PF_IOTHREAD) > - continue; > - if (p == current) > - continue; > - if (p->state == TASK_ZOMBIE) > - continue;
    > +/* 0 = Ignore this process when freezing/thawing, 1 = freeze/thaw this process */
    > +static inline int interesting_process(struct task_struct *p)
    > +{
    > + if (p->flags & PF_IOTHREAD)
    > + return 0;
    > + if (p == current)
    > + return 0;
    > + if ((p->state == TASK_ZOMBIE) || (p->state == TASK_DEAD))
    > + return 0;
    > +
    > + return 1;
    > +}
    >

    Simple cleanup, okay.

    > @@ -214,9 +218,12 @@
    > read_lock(&tasklist_lock);
    > do_each_thread(g, p) {
    > unsigned long flags;
    > - INTERESTING(p);
    > + if (!interesting_process(p))
    > + continue;
    > if (p->flags & PF_FROZEN)
    > continue;
    > + if (p->state == TASK_STOPPED)
    > + continue;
    >
    > /* FIXME: smp problem here: we may not access other process' flags
    > without locking */

    No need to handle TASK_STOPPED tasks, as they are "frozen" already. Ok.

    > read_lock(&tasklist_lock);
    > do_each_thread(g, p) {
    > - INTERESTING(p);
    > -
    > - if (p->flags & PF_FROZEN) p->flags &= ~PF_FROZEN;
    > - else
    > - printk(KERN_INFO " Strange, %s not stopped\n", p->comm );
    > - wake_up_process(p);
    > + if (!interesting_process(p))
    > + continue;
    > +
    > + p->flags &= ~PF_FREEZE;
    > + if (p->flags & PF_FROZEN) {
    > + p->flags &= ~PF_FROZEN;
    > + wake_up_process(p);
    > + } else
    > +
    But why do you touch PF_FROZEN here? Refrigerator should do that.
    And wake_up_process should not be needed...
    If it is in refrigerator, it polls PF_FREEZE...

    --
    Pavel
    Written on sharp zaurus, because my Velo1 broke. If you have Velo you don't need...

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:47    [W:0.036 / U:0.008 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site