lkml.org 
[lkml]   [2006]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [KJ] (re) audit return code handling for kernel_thread [2/3]
    Patch to audit return codes from kernel_thread.  This patch handles cases in
    which the return code was stored for later interrogations, but the later checks
    assumed that negative return codes were successful.

    Thanks
    Neil

    Signed-off-by: Neil Horman <nhorman@tuxdriver.com>


    arch/s390/mm/cmm.c | 6 +++++-
    drivers/macintosh/adb.c | 7 +++++--
    drivers/macintosh/therm_pm72.c | 5 ++++-
    3 files changed, 14 insertions(+), 4 deletions(-)


    --- a/arch/s390/mm/cmm.c
    +++ b/arch/s390/mm/cmm.c
    @@ -161,7 +161,11 @@ cmm_thread(void *dummy)
    static void
    cmm_start_thread(void)
    {
    - kernel_thread(cmm_thread, NULL, 0);
    + if (kernel_thread(cmm_thread, NULL, 0) < 0) {
    + printk(KERN_WARNING "Could not start kernel thread at %s:%d\n",
    + __FUNCTION__,__LINE__);
    + clear_bit(0,&cmm_thread_active);
    + }
    }

    static void
    --- a/drivers/macintosh/adb.c
    +++ b/drivers/macintosh/adb.c
    @@ -137,7 +137,7 @@ #endif

    static __inline__ void adb_wait_ms(unsigned int ms)
    {
    - if (current->pid && adb_probe_task_pid &&
    + if (current->pid && (adb_probe_task_pid >= 0) &&
    adb_probe_task_pid == current->pid)
    msleep(ms);
    else
    @@ -270,6 +270,9 @@ static void
    __adb_probe_task(void *data)
    {
    adb_probe_task_pid = kernel_thread(adb_probe_task, NULL, SIGCHLD | CLONE_KERNEL);
    + if (adb_probe_task_pid < 0)
    + printk(KERN_WARNING "Could not start kernel thread at %s:%d\n",
    + __FUNCTION__,__LINE__);
    }

    static DECLARE_WORK(adb_reset_work, __adb_probe_task, NULL);
    @@ -494,7 +497,7 @@ adb_request(struct adb_request *req, voi
    * block. Beware that the "done" callback will be overriden !
    */
    if ((flags & ADBREQ_SYNC) &&
    - (current->pid && adb_probe_task_pid &&
    + (current->pid && (adb_probe_task_pid >= 0) &&
    adb_probe_task_pid == current->pid)) {
    req->done = adb_probe_wakeup;
    rc = adb_controller->send_request(req, 0);
    --- a/drivers/macintosh/therm_pm72.c
    +++ b/drivers/macintosh/therm_pm72.c
    @@ -1769,6 +1769,9 @@ static void start_control_loops(void)
    init_completion(&ctrl_complete);

    ctrl_task = kernel_thread(main_control_loop, NULL, SIGCHLD | CLONE_KERNEL);
    + if (ctrl_task < 0)
    + printk(KERN_CRIT "Could not start kernel thread at %s:%d\n",
    + __FUNCTION__, __LINE__);
    }

    /*
    @@ -1776,7 +1779,7 @@ static void start_control_loops(void)
    */
    static void stop_control_loops(void)
    {
    - if (ctrl_task != 0)
    + if (ctrl_task >= 0)
    wait_for_completion(&ctrl_complete);
    }

    -
    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: 2006-07-29 22:27    [W:0.026 / U:0.168 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site