All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ahmed S. Darwish" <darwish.07@gmail.com>
To: Andri Yngvason <andri.yngvason@marel.com>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>,
	kbuild test robot <fengguang.wu@intel.com>,
	kbuild-all@01.org, "Ahmed S. Darwish" <ahmed.darwish@valeo.com>,
	"linux-can@vger.kernel.org" <linux-can@vger.kernel.org>
Subject: Re: [jtkirshe-net-next:core-queue 1002/1025] drivers/net/can/usb/kvaser_usb.c:639: warning: comparison is always false due to limited range of data type
Date: Sun, 1 Feb 2015 08:00:25 -0500	[thread overview]
Message-ID: <20150201130025.GC27932@linux> (raw)
In-Reply-To: <20150130112625.25243.36818@shannon>

Hi!

Andri wrote:
> >    drivers/net/can/usb/kvaser_usb.c: In function 'kvaser_usb_rx_error_update_can_state':
> > >> drivers/net/can/usb/kvaser_usb.c:639: warning: comparison is always false due to limited range of data type
> > >> drivers/net/can/usb/kvaser_usb.c:639: warning: comparison is always false due to limited range of data type
> > 
> > vim +639 drivers/net/can/usb/kvaser_usb.c
> > 
> >    623    const struct kvaser_usb_error_summary *es,
> >    624    struct can_frame *cf)
> >    625    {
> >    626        struct net_device_stats *stats;
> >    627        enum can_state cur_state, new_state, tx_state, rx_state;
> >    628    
> >    629        netdev_dbg(priv->netdev, "Error status: 0x%02x\n", es->status);
> >    630    
> >    631        stats = &priv->netdev->stats;
> >    632        new_state = cur_state = priv->can.state;
> >    633    
> >    634        if (es->status & (M16C_STATE_BUS_OFF | M16C_STATE_BUS_RESET))
> >    635            new_state = CAN_STATE_BUS_OFF;
> >    636        else if (es->status & M16C_STATE_BUS_PASSIVE)
> >    637            new_state = CAN_STATE_ERROR_PASSIVE;
> >    638        else if (es->status & M16C_STATE_BUS_ERROR) {
> >  > 639            if ((es->txerr >= 256) || (es->rxerr >= 256))
> >    640                new_state = CAN_STATE_BUS_OFF;
> >    641            else if ((es->txerr >= 128) || (es->rxerr >= 128))
> >    642                new_state = CAN_STATE_ERROR_PASSIVE;
> >    643            else if ((es->txerr >= 96) || (es->rxerr >= 96))
> >    644                new_state = CAN_STATE_ERROR_WARNING;
> >    645            else if (cur_state > CAN_STATE_ERROR_ACTIVE)
> >    646                new_state = CAN_STATE_ERROR_ACTIVE;
> >    647        }
> > 
>
> Isn't this redundant anyway? This is always handled by a different
> interrupt, right?
> 

The BUS_ERROR check might have been a bit pedantic indeed, but
I've faced a number of cases where the firmware reported error
counters > 128 without having any M16C_STATE_BUS_PASSIVE flags
checked either in the status flag of the current message or any
previous messages.

That's why I've added such elaborate checks.

But since on bus error, good state was always reported and the
driver did indeed transition to bus error state as expected,
and since also the checks the compiler warns about doesn't work
anyway, I'll just remove the two lines:

 639            if ((es->txerr >= 256) || (es->rxerr >= 256))
 640                new_state = CAN_STATE_BUS_OFF;

And test the state changes again.

> In case it isn't you could probably do something like this:
> if ((es->txerr >= 128) || (es->rxerr >= 128)) {
>         if(cur_state == CAN_STATE_ERROR_PASSIVE)
>                 new_state = CAN_STATE_BUS_OFF;
>         else
>                 new_state = CAN_STATE_ERROR_PASSIVE;

That unfortunately won't work. As can be seen by candump traces
I've sent on submission v6 here:

	http://article.gmane.org/gmane.linux.can/7485

The firmware can report error counters, in an increasing fashion
but in the same state range several times. So unless I'm missing
something, I'll just remove the useless checks and see what
happens.

> } else if ((es->txerr >= 96) || (es->rxerr >= 96)) {
>         new_state = CAN_STATE_ERROR_WARNING;
> } else if (cur_state > CAN_STATE_ERROR_ACTIVE) {
>         new_state = CAN_STATE_ERROR_ACTIVE;
> }
> 

Thanks,
Darwish

  reply	other threads:[~2015-02-01 13:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <201501301018.HN7rQ3rB%fengguang.wu@intel.com>
2015-01-30  8:04 ` [jtkirshe-net-next:core-queue 1002/1025] drivers/net/can/usb/kvaser_usb.c:639: warning: comparison is always false due to limited range of data type Marc Kleine-Budde
2015-01-30 11:26   ` Andri Yngvason
2015-02-01 13:00     ` Ahmed S. Darwish [this message]
2015-02-01 12:04   ` Ahmed S. Darwish
2015-02-04 12:48     ` Ahmed S. Darwish

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150201130025.GC27932@linux \
    --to=darwish.07@gmail.com \
    --cc=ahmed.darwish@valeo.com \
    --cc=andri.yngvason@marel.com \
    --cc=fengguang.wu@intel.com \
    --cc=kbuild-all@01.org \
    --cc=linux-can@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.