All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>
To: David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
Cc: i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
Subject: Re: [patch 2.6.25-git] i2c_adapters:  return -Errno not -1
Date: Mon, 12 May 2008 16:05:37 +0200	[thread overview]
Message-ID: <20080512160537.13e7739a@hyperion.delvare> (raw)
In-Reply-To: <200805110923.44693.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>

On Sun, 11 May 2008 09:23:43 -0700, David Brownell wrote:
> On Sunday 11 May 2008, you wrote:
> > My point exactly. I am fine with both -ENXIO and -ENODEV, pick the one
> > you like, then make sure all drivers are using it consistently.
> 
> I'll go with ENXIO "no such device or address" as being a bit more
> appropriate for addressing issues.  Driver probe() code can return
> ENODEV in the case where there is a device there ... but the wrong
> one for that driver.

OK, fine with me.

> > (...)
> > When calling strerror on EILSEQ, you get: "Invalid or incomplete
> > multibyte or wide character".
> 
> While "man 1 errno" says "Illegal byte sequence" ...

Yes, it's unfortunately inconsistent. Ideally man 1 errno would be
generated automatically by calling strerror on all error codes.

> > (...)
> > The returned value depends on an argument provided by the caller,
> > though.
> 
> Among an arbitrary number of other things.  It could also be
> just bad device firmware ... I have in fact seen such cases:
> perfectly valid SMBus requests generating bogus responses.
> 
> (This happened to be on shipping hardware, but of course it's
> also easy to imagine that in developer setups too...)
> 
> Rule of thumb:  make the fault report reflect observation, not
> guesses about what caused the behavior.  It's harder to get it
> wrong that way.

I have to agree...

> > (...)
> > That's not an illegal "sequence", sorry. The length byte by itself is
> > either valid or not valid. What we saw is an illegal byte value.
> 
> It's part of a sequence.  The length byte will usually be the fourth
> byte of the sequence:
> 
>     S addr/w [A] command [A] S addr/r [A] [length] A ... P
> 
> That value is perfectly legal ... it's just that in that location
> within *THIS* byte sequence, it's trouble.  Mostly because that
> byte is being interpreted; in other contexts, that sequence is fine.

Going down that route, everything is part of a sequence, so we would
have to stop using -EINVAL and use -EILSEQ everywhere. Numbers by
themselves are never invalid, what makes them invalid is the context in
which they are encountered, and for a computer, a given context has to
come from a sequence of some kind.

So I'm not buying this, sorry. Especially when the first 3 bytes are
emitted by the master and the 4th one comes from the slave, calling
them a sequence as a whole is almost dishonest ;)

> > If you are still worried that -EINVAL has a small chance of not being
> > correct, I'd rather go for -EMSGSIZE (Message too long), although the
> > error message would be confusing in the 0 case.
> 
> Right...
> 
> > Even -EOVERFLOW (Value too large for defined data type)
> 
> ... also confusing in the 0 case, and also wrong for PMBus (where
> values 1..255 are all valid so it can't be "too large").
> 
> > would be more appropriate than -EILSEQ, I think.
> 
> How about "-EPROTO" for protocol error, then, if you're so
> strongly opposed to "illegal byte sequence"?  The reason I
> avoided EPROTO in that case is that it's so generic; while
> we could use EILSEQ to indicate this specific case.

-EPROTO sounds good to me. We're not using it anywhere in the i2c
subsystem so there's no need to worry about it being "too generic".

Thanks,
-- 
Jean Delvare

_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c

  parent reply	other threads:[~2008-05-12 14:05 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-02  3:46 [patch 2.6.25-git] i2c_adapters: return -Errno not -1 David Brownell
     [not found] ` <200805012046.07885.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-10 18:18   ` Jean Delvare
     [not found]     ` <20080510201825.489198d2-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-11  7:32       ` David Brownell
2008-05-12 16:48       ` David Brownell
     [not found]         ` <200805120948.23842.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-14 12:17           ` Jean Delvare
     [not found]             ` <20080514141738.327be680-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-14 14:48               ` David Brownell
2008-05-14 14:50               ` David Brownell
     [not found]                 ` <200805140750.49365.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-15 18:33                   ` Jean Delvare
2008-05-10 20:55   ` Jean Delvare
     [not found]     ` <20080510225548.36297637-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-11  8:17       ` David Brownell
     [not found]         ` <200805110117.23023.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-11 10:26           ` Jean Delvare
     [not found]             ` <20080511122647.1e04c9c0-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-11 16:23               ` David Brownell
     [not found]                 ` <200805110923.44693.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-12 14:05                   ` Jean Delvare [this message]
     [not found]                     ` <20080512160537.13e7739a-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-12 16:44                       ` David Brownell
2008-05-11 17:13       ` David Brownell
     [not found]         ` <200805111013.25440.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-12 13:05           ` Jean Delvare
     [not found]             ` <20080512150512.1837e3e7-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-12 16:25               ` David Brownell
     [not found]                 ` <200805120925.33533.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-12 16:54                   ` Jean Delvare
     [not found]                     ` <20080512185439.1a9cf3c1-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-12 17:08                       ` David Brownell
2008-05-11 17:16       ` David Brownell
2008-05-12 16:43       ` David Brownell
     [not found]         ` <200805120943.04899.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-15 17:16           ` Jean Delvare
     [not found]             ` <20080515191631.7791346c-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-18  0:54               ` David Brownell
     [not found]                 ` <200805171754.15976.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-18  7:06                   ` Jean Delvare

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=20080512160537.13e7739a@hyperion.delvare \
    --to=khali-puyad+kwke1g9huczpvpmw@public.gmane.org \
    --cc=david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org \
    --cc=i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org \
    /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.