lkml.org 
[lkml]   [2011]   [Oct]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/17] freezer: don't unnecessarily set PF_NOFREEZE explicitly
    Date
    Some drivers set PF_NOFREEZE in their kthread functions which is
    completely unnecessary and racy - some part of freezer code doesn't
    consider cases where PF_NOFREEZE is set asynchronous to freezer
    operations.

    In general, there's no reason to allow setting PF_NOFREEZE explicitly.
    Remove them and change the documentation to note that setting
    PF_NOFREEZE directly isn't allowed.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Acked-by: "Gustavo F. Padovan" <padovan@profusion.mobi>
    Acked-by: Samuel Ortiz <sameo@linux.intel.com>
    Cc: Marcel Holtmann <marcel@holtmann.org>
    Cc: wwang <wei_wang@realsil.com.cn>
    ---
    Documentation/power/freezing-of-tasks.txt | 2 +-
    drivers/bluetooth/btmrvl_main.c | 2 --
    drivers/mfd/twl4030-irq.c | 3 ---
    drivers/mfd/twl6030-irq.c | 2 --
    drivers/staging/rts_pstor/rtsx.c | 2 --
    5 files changed, 1 insertions(+), 10 deletions(-)

    diff --git a/Documentation/power/freezing-of-tasks.txt b/Documentation/power/freezing-of-tasks.txt
    index 38b5724..710c965 100644
    --- a/Documentation/power/freezing-of-tasks.txt
    +++ b/Documentation/power/freezing-of-tasks.txt
    @@ -67,7 +67,7 @@ III. Which kernel threads are freezable?

    Kernel threads are not freezable by default. However, a kernel thread may clear
    PF_NOFREEZE for itself by calling set_freezable() (the resetting of PF_NOFREEZE
    -directly is strongly discouraged). From this point it is regarded as freezable
    +directly is not allowed). From this point it is regarded as freezable
    and must call try_to_freeze() in a suitable place.

    IV. Why do we do that?
    diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c
    index 548d1d9..57312d4 100644
    --- a/drivers/bluetooth/btmrvl_main.c
    +++ b/drivers/bluetooth/btmrvl_main.c
    @@ -473,8 +473,6 @@ static int btmrvl_service_main_thread(void *data)

    init_waitqueue_entry(&wait, current);

    - current->flags |= PF_NOFREEZE;
    -
    for (;;) {
    add_wait_queue(&thread->wait_q, &wait);

    diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
    index 8a7ee31..6aae831 100644
    --- a/drivers/mfd/twl4030-irq.c
    +++ b/drivers/mfd/twl4030-irq.c
    @@ -289,9 +289,6 @@ static int twl4030_irq_thread(void *data)
    static unsigned i2c_errors;
    static const unsigned max_i2c_errors = 100;

    -
    - current->flags |= PF_NOFREEZE;
    -
    while (!kthread_should_stop()) {
    int ret;
    int module_irq;
    diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
    index eb3b5f8..6fd7795 100644
    --- a/drivers/mfd/twl6030-irq.c
    +++ b/drivers/mfd/twl6030-irq.c
    @@ -96,8 +96,6 @@ static int twl6030_irq_thread(void *data)
    static const unsigned max_i2c_errors = 100;
    int ret;

    - current->flags |= PF_NOFREEZE;
    -
    while (!kthread_should_stop()) {
    int i;
    union {
    diff --git a/drivers/staging/rts_pstor/rtsx.c b/drivers/staging/rts_pstor/rtsx.c
    index 480b0ed..8a7803c 100644
    --- a/drivers/staging/rts_pstor/rtsx.c
    +++ b/drivers/staging/rts_pstor/rtsx.c
    @@ -466,8 +466,6 @@ static int rtsx_control_thread(void *__dev)
    struct rtsx_chip *chip = dev->chip;
    struct Scsi_Host *host = rtsx_to_host(dev);

    - current->flags |= PF_NOFREEZE;
    -
    for (;;) {
    if (wait_for_completion_interruptible(&dev->cmnd_ready))
    break;
    --
    1.7.3.1


    \
     
     \ /
      Last update: 2011-10-31 20:11    [W:0.024 / U:88.944 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site