Re: broken suspend (sched related) [Was: 2.6.24-rc4-mm1]

Gautham R Shenoy
2007-12-10T11:50:19Z

On Dec 10, 2007 4:58 PM, Ingo Molnar <mingo@elte.hu> wrote:
>
> * Gautham R Shenoy <ego@in.ibm.com> wrote:
>
> > > say we've got 100 CPUs, so we've got 100 watchdog tasks running -
> > > one for each CPU. Checking for hung tasks is a global operation not
> > > a per-CPU operation (we iterate over the global tasklist), hence
> > > only one CPU should really be calling this function. That
> > > online-cpus logic achieves this by picking a single CPU. Perhaps it
> > > would be better to keep a hung_task_checker_cpu variable that is
> > > driven from a CPU-hotplug-down notifier? That way if a CPU is
> > > brought down we can update hung_task_checker_cpu to another,
> > > still-online CPU. (this would also be faster, because event-driven)
> >
> > Do you mean something like this?
>
> yeah, thanks - queued it up.

Stupid me! I forgot to remove the local variable check_cpu in static
int watchdog(void * __bind_cpu). Could you please correct it before
applying?

>
> one question:
>
> > +static int check_cpu = -1;
>
> > case CPU_ONLINE:
> > case CPU_ONLINE_FROZEN:
> > + check_cpu = any_online_cpu(cpu_online_map);
> > wake_up_process(per_cpu(watchdog_task, hotcpu));
> > break;
>
> do we bring the boot CPU online too - i.e. will check_cpu be properly
> initialized on UP too?

Yes, it does.
>
> Ingo
>

Thanks and Regards
gautham.
--
Gautham R Shenoy
Linux Technology Center
IBM India.
"Freedom comes with a price tag of responsibility, which is still a bargain,
because Freedom is priceless!"