lkml.org 
[lkml]   [2012]   [Jun]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/7] drivers/staging/comedi/drivers/me4000.c: adjust suspicious bit operation
    Date
    From: Julia Lawall <Julia.Lawall@lip6.fr>

    TRIG_ROUND_NEAREST is 0, so a bit-and with it is always false. The
    value TRIG_ROUND_MASK covers the bits of the TRIG_ROUND constants, so
    first pick those bits and then make the test using ==.

    The same is done for TRIG_ROUND_UP for symmetry, even though bit-and would
    be sufficient in this case.

    This problem was found using Coccinelle (http://coccinelle.lip6.fr/).

    Signed-off-by: Julia Lawall <julia@diku.dk>

    ---
    The TRIG_ROUND_UP case could be left as is, if that is preferred. Or a
    temporary variable could be introduced to avoid anding with the mask twice.

    Actually, the following code suggests that the mask is not necessary, == would be sufficient:
    /* Only rounding flags are implemented */
    cmd->flags &= TRIG_ROUND_NEAREST | TRIG_ROUND_UP | TRIG_ROUND_DOWN;
    But using the mask is safer, if there are future extensions.

    drivers/staging/comedi/drivers/me4000.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    diff --git a/drivers/staging/comedi/drivers/me4000.c b/drivers/staging/comedi/drivers/me4000.c
    index 8ca1b54..fc60117 100644
    --- a/drivers/staging/comedi/drivers/me4000.c
    +++ b/drivers/staging/comedi/drivers/me4000.c
    @@ -949,10 +949,10 @@ static int ai_round_cmd_args(struct comedi_device *dev,
    *init_ticks = (cmd->start_arg * 33) / 1000;
    rest = (cmd->start_arg * 33) % 1000;

    - if (cmd->flags & TRIG_ROUND_NEAREST) {
    + if ((cmd->flags & TRIG_ROUND_MASK) == TRIG_ROUND_NEAREST) {
    if (rest > 33)
    (*init_ticks)++;
    - } else if (cmd->flags & TRIG_ROUND_UP) {
    + } else if ((cmd->flags & TRIG_ROUND_MASK) == TRIG_ROUND_UP) {
    if (rest)
    (*init_ticks)++;
    }
    @@ -962,10 +962,10 @@ static int ai_round_cmd_args(struct comedi_device *dev,
    *scan_ticks = (cmd->scan_begin_arg * 33) / 1000;
    rest = (cmd->scan_begin_arg * 33) % 1000;

    - if (cmd->flags & TRIG_ROUND_NEAREST) {
    + if ((cmd->flags & TRIG_ROUND_MASK) == TRIG_ROUND_NEAREST) {
    if (rest > 33)
    (*scan_ticks)++;
    - } else if (cmd->flags & TRIG_ROUND_UP) {
    + } else if ((cmd->flags & TRIG_ROUND_MASK) == TRIG_ROUND_UP) {
    if (rest)
    (*scan_ticks)++;
    }
    @@ -975,10 +975,10 @@ static int ai_round_cmd_args(struct comedi_device *dev,
    *chan_ticks = (cmd->convert_arg * 33) / 1000;
    rest = (cmd->convert_arg * 33) % 1000;

    - if (cmd->flags & TRIG_ROUND_NEAREST) {
    + if ((cmd->flags & TRIG_ROUND_MASK) == TRIG_ROUND_NEAREST) {
    if (rest > 33)
    (*chan_ticks)++;
    - } else if (cmd->flags & TRIG_ROUND_UP) {
    + } else if ((cmd->flags & TRIG_ROUND_MASK) == TRIG_ROUND_UP) {
    if (rest)
    (*chan_ticks)++;
    }


    \
     
     \ /
      Last update: 2012-06-07 00:21    [W:3.236 / U:0.496 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site