lkml.org 
[lkml]   [2008]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    Date
    From
    SubjectRe: [BUG 2.6.25-rc3] scheduler/hotplug: some processes are dealocked when cpu is set to offline
    On 02/03/2008, Yi Yang <yi.y.yang@intel.com> wrote:
    > [ ... ]
    >
    > Why isn't the kernel thread [watchdog/1] reaped by its parent?
    > its state
    > is TASK_RUNNING with high priority (R< means this), why it isn't done?
    >
    > Anyone ever met such a problem? Your thought?
    >

    iirc, Andrew had the same issue.

    'watchdog's are supposed to be stopped with kthread_stop() from
    softlockup.c :: cpu_callback() :: case CPU_DEAD.

    The 'R' state of 'watchdog' is strange indeed.

    would you please conduct a test with the patch [1] below and provide
    me with additional output it generates?

    (non-white-space-damaged versions are enclosed)

    with your current set-up and also with
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs"

    Then please try also the patch [2] (on top of [1]). With this 'magic'
    patch applied, the issue 'seemed' to disappear on Andrew's set-up...

    Thanks in advacne,


    [1]

    --- softlockup-prev.c 2008-03-03 12:35:01.000000000 +0100
    +++ softlockup.c 2008-03-03 12:38:01.000000000 +0100
    @@ -237,6 +237,8 @@ static int watchdog(void *__bind_cpu)

    }

    + printk(KERN_WARN "-> watchdog(cpu: %d) is done\n", this_cpu);
    +
    return 0;
    }

    @@ -249,6 +251,9 @@ cpu_callback(struct notifier_block *nfb,
    int hotcpu = (unsigned long)hcpu;
    struct task_struct *p;

    + printk(KERN_WARN "-> cpu_callback(cpu: %d, action: %lu,
    check_cpu: %d)\n",
    + hotcpu, action, check_cpu);
    +
    switch (action) {
    case CPU_UP_PREPARE:
    case CPU_UP_PREPARE_FROZEN:

    [2]

    --- softlockup-prev-2.c 2008-03-03 12:38:36.000000000 +0100
    +++ softlockup.c 2008-03-03 12:39:02.000000000 +0100
    @@ -294,6 +294,7 @@ cpu_callback(struct notifier_block *nfb,
    case CPU_DEAD_FROZEN:
    p = per_cpu(watchdog_task, hotcpu);
    per_cpu(watchdog_task, hotcpu) = NULL;
    + mlseep(1);
    kthread_stop(p);
    break;
    #endif /* CONFIG_HOTPLUG_CPU */

    --
    Best regards,
    Dmitry Adamushko
    --- softlockup-prev.c 2008-03-03 12:35:01.000000000 +0100
    +++ softlockup.c 2008-03-03 12:38:01.000000000 +0100
    @@ -237,6 +237,8 @@ static int watchdog(void *__bind_cpu)

    }

    + printk(KERN_WARN "-> watchdog(cpu: %d) is done\n", this_cpu);
    +
    return 0;
    }

    @@ -249,6 +251,9 @@ cpu_callback(struct notifier_block *nfb,
    int hotcpu = (unsigned long)hcpu;
    struct task_struct *p;

    + printk(KERN_WARN "-> cpu_callback(cpu: %d, action: %lu, check_cpu: %d)\n",
    + hotcpu, action, check_cpu);
    +
    switch (action) {
    case CPU_UP_PREPARE:
    case CPU_UP_PREPARE_FROZEN:--- softlockup-prev-2.c 2008-03-03 12:38:36.000000000 +0100
    +++ softlockup.c 2008-03-03 12:39:02.000000000 +0100
    @@ -294,6 +294,7 @@ cpu_callback(struct notifier_block *nfb,
    case CPU_DEAD_FROZEN:
    p = per_cpu(watchdog_task, hotcpu);
    per_cpu(watchdog_task, hotcpu) = NULL;
    + mlseep(1);
    kthread_stop(p);
    break;
    #endif /* CONFIG_HOTPLUG_CPU */
    \
     
     \ /
      Last update: 2008-03-03 12:57    [W:5.700 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site