From: David Brownell <david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
To: Jean Delvare <khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org>,
Wolfram Sang <w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Cc: i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
Subject: Re: [PATCH] Add a new-style driver for most I2C EEPROMs
Date: Thu, 17 Apr 2008 14:17:23 -0700 [thread overview]
Message-ID: <200804171417.23753.david-b@pacbell.net> (raw)
In-Reply-To: <200804140857.33732.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
> In at24_ee_write:
> > + /* Writes fail if the previous one didn't complete yet. We'll
> > + * loop a few times until this one succeeds, waiting at least
> > + * long enough for one entire page write to work.
> > + */
> > + timeout = jiffies + msecs_to_jiffies(AT24_EE_TIMEOUT);
> > + for (retries = 0; retries < 3; retries++) {
> > +
> > + if (at24->use_smbus) {
> > + status = i2c_smbus_write_i2c_block_data(client,
> > + offset, count, buf);
> > + if (status == 0)
> > + status = count;
> > + } else {
> > + status = i2c_transfer(client->adapter, &msg, 1);
> > + if (status == 1)
> > + status = count;
> > + }
> > + dev_dbg(&client->dev, "write %zd@%d --> %zd (%ld)\n",
> > + count, offset, status, jiffies);
> > +
> > + if (status == count)
> > + return count;
> > +
> > + if (retries < 3 || time_after(timeout, jiffies)) {
> > + /* REVISIT: at HZ=100, this is sloooow */
> > + msleep(1);
> > + continue;
> > + }
> > + }
>
> I assume 'retries < 3' (always true)
You mean, in that "if" at the end.
> and 'continue' (nothing follows)
That particular "continue" is not necessary.
> are left-overs from earlier revisions and can be thrown out?
Both of those tests should be moved into the for() test,
so the tail end of the loop always does an msleep. It'd
be clearer as:
timeout = ... ;
retries = 0;
while (retries++ < 3 || time_before(jiffies, timeout)) {
... try write, quit loop on success ...
msleep(1);
}
Yes, that loop has lots of leftovers. :(
> My main
> questions is 'msleep(1)' though: As I understand it, this means the
> for-loop will wait roughly 3ms on failures until it reports a timeout
> (assuming good precision of msleep).
That was obviously tested only at HZ=100 or with quick-ish
EEPROMs! I seem to recall just doing enough work on it to
make sure it didn't break ... that wasn't a top priority.
That loop should (a) run at least a few times, maybe three;
and (b) not exit before the timeout passes.
> Comparing this to AT24_EE_TIMEOUT
> (25 ms), it looks to me that the msleep value could be increased a
> little (maybe to AT24_EE_TIMEOUT / 3)? Or is i2c_transfer slow enough
> and can we count on that behaviour?
An msleep(1) -- when the platform can deliver it -- would
be desirable, since most EEPROMs don't actually need those
long delays. Their writes finish in just a few msecs,
hardly anything needs that huge timeout. At HZ=100 it's
likely to sleep 10 msec or more; that's OK, but slow.
The point of having an msleep() rather than just relying
on scheduler delay is that most EEPROMs do need some short
delay to finish their writes. So a busy-wait is wasteful.
- Dave
_______________________________________________
i2c mailing list
i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org
http://lists.lm-sensors.org/mailman/listinfo/i2c
next prev parent reply other threads:[~2008-04-17 21:17 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-11 11:43 [PATCH] Add a new-style driver for most I2C EEPROMs Wolfram Sang
[not found] ` <1207914198-8561-1-git-send-email-w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-11 12:24 ` Wolfram Sang
2008-04-14 7:22 ` Robert Schwebel
[not found] ` <20080414072227.GU13814-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-14 12:39 ` Jean Delvare
[not found] ` <20080414143925.31b55b39-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-04-14 15:57 ` David Brownell
[not found] ` <200804140857.33732.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-17 21:17 ` David Brownell [this message]
[not found] ` <200804171417.23753.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-18 8:07 ` Trent Piepho
[not found] ` <Pine.LNX.4.58.0804172346580.10592-nuiHJn5p267P3RPoUHIrnuTW4wlIGRCZ@public.gmane.org>
2008-04-18 10:31 ` Wolfram Sang
[not found] ` <20080418103149.GA4245-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-18 23:06 ` Trent Piepho
[not found] ` <Pine.LNX.4.58.0804181555560.15372-13q4cmjDBaTP3RPoUHIrnuTW4wlIGRCZ@public.gmane.org>
2008-04-21 9:17 ` Wolfram Sang
2008-04-21 17:20 ` Trent Piepho
[not found] ` <Pine.LNX.4.58.0804211005410.15697-nuiHJn5p267P3RPoUHIrnuTW4wlIGRCZ@public.gmane.org>
2008-04-24 10:47 ` Wolfram Sang
[not found] ` <20080424104740.GB4201-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-04-27 1:28 ` Trent Piepho
2008-04-18 16:48 ` David Brownell
[not found] ` <200804180948.15298.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-04-18 23:26 ` Trent Piepho
2008-04-18 8:59 ` Wolfram Sang
2008-04-15 10:13 ` Wolfram Sang
2008-04-17 16:05 ` Wolfram Sang
2008-04-17 16:24 ` Jean Delvare
-- strict thread matches above, loose matches on Subject: below --
2008-05-15 20:36 Wolfram Sang
[not found] ` <1210883799-25188-1-git-send-email-w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-05-22 20:20 ` Jean Delvare
[not found] ` <20080522222022.68d65cd7-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-22 21:35 ` David Brownell
[not found] ` <200805221435.36829.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-05-23 7:17 ` Jean Delvare
[not found] ` <20080523091703.2ba86bb1-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-24 21:11 ` David Brownell
2008-05-30 9:15 ` Wolfram Sang
[not found] ` <20080530091534.GB727-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-05-30 9:51 ` Jean Delvare
[not found] ` <20080530115131.0e111fdb-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-05-30 10:45 ` Wolfram Sang
2008-06-02 16:21 ` Wolfram Sang
[not found] ` <20080602162154.GA11141-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2008-06-02 18:50 ` Jean Delvare
[not found] ` <20080602205034.3e2b392b-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-02 19:33 ` David Brownell
[not found] ` <200806021233.46781.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-06-02 19:48 ` Jean Delvare
[not found] ` <20080602214823.15ca190b-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-03 20:36 ` David Brownell
[not found] ` <200806031336.35678.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2008-06-03 21:19 ` Jean Delvare
[not found] ` <20080603231927.61f9eb61-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-04 11:51 ` Wolfram Sang
2008-06-08 8:40 ` Jean Delvare
[not found] ` <20080608104038.006be072-ig7AzVSIIG7kN2dkZ6Wm7A@public.gmane.org>
2008-06-08 20:26 ` David Brownell
2008-05-23 7:21 ` 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=200804171417.23753.david-b@pacbell.net \
--to=david-b-ybekhbn/0ldr7s880joybq@public.gmane.org \
--cc=i2c-GZX6beZjE8VD60Wz+7aTrA@public.gmane.org \
--cc=khali-PUYAD+kWke1g9hUCZPvPmw@public.gmane.org \
--cc=w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox