Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754036Ab3EUI6b (ORCPT ); Tue, 21 May 2013 04:58:31 -0400 Received: from mail-ia0-f181.google.com ([209.85.210.181]:62378 "EHLO mail-ia0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753638Ab3EUI6a (ORCPT ); Tue, 21 May 2013 04:58:30 -0400 MIME-Version: 1.0 In-Reply-To: <519B26FD.9080404@linux.vnet.ibm.com> References: <1369065716-22801-1-git-send-email-fweisbec@gmail.com> <1369065716-22801-7-git-send-email-fweisbec@gmail.com> <519B26FD.9080404@linux.vnet.ibm.com> Date: Tue, 21 May 2013 14:28:29 +0530 Message-ID: Subject: Re: [RFC PATCH 6/8] kthread: Enable parking requests from setup() and unpark() callbacks From: anish singh To: "Srivatsa S. Bhat" Cc: Frederic Weisbecker , LKML , Steven Rostedt , "Paul E. McKenney" , Ingo Molnar , Thomas Gleixner , Peter Zijlstra , Borislav Petkov , Li Zhong , Don Zickus Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2655 Lines: 55 On Tue, May 21, 2013 at 1:19 PM, Srivatsa S. Bhat wrote: > On 05/21/2013 11:04 AM, anish singh wrote: >> On Mon, May 20, 2013 at 9:31 PM, Frederic Weisbecker wrote: >>> When the watchdog code is boot-disabled by the user, for example >>> through the 'nmi_watchdog=0' boot option, the setup() callback of >>> the watchdog kthread requests to park the task, and that until the >>> user later re-enables the watchdog through sysctl or procfs. >>> >>> However the parking request is not well handled when done from >>> the setup() callback. After ->setup() is called, the generic smpboot >>> kthread loop directly tries to call the thread function or wait >>> for some event if ->thread_should_run() is false. >>> >>> In the case of the watchdog kthread, ->thread_should_run() returns >>> false and the kthread goes to sleep and wait for the watchdog timer >>> to wake it up. But the timer is not enabled since the user requested >>> to disable the watchdog. We want the kthread to park instead of waiting >>> for events that can't happen. >>> >>> As a result, later unpark requests after sysctl write through >>> 'sysctl -w kernel.watchdog=1' won't wake up/unpark the task as >>> expected, since it's not parked anyway, leaving the value modified >>> without triggering any action. >> Out of curiosity, this can happen only for short period of time right?After >> some time this will work right as the thread get back in action >> after the schedule call.Then sysctl and procfs will work I think. > > kthread_unpark() can wake up a task only if the task is in TASK_PARKED > state. But since the above task would be in TASK_INTERRUPTIBLE state > (since it is not parked), kthread_unpark() will be powerless to do anything. Yes but this will happen only for a short period of time right? After the schdule() call the below code gets executed in while() loop. if (kthread_should_park()) { __set_current_state(TASK_RUNNING); preempt_enable(); if (ht->park && td->status == HP_THREAD_ACTIVE) { BUG_ON(td->cpu != smp_processor_id()); ht->park(td->cpu); td->status = HP_THREAD_PARKED; } kthread_parkme(); /* We might have been woken for stop */ continue; } As we have already called kthread_park this above if() condition gets true and it will park the thread wouldn't it?But this will happen after the schedule call which is not right as mentioned by fredrick. -- 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/