All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Barada <peterb@logicpd.com>
To: linux-omap <linux-omap@vger.kernel.org>
Subject: hrtimer_nanosleep() weirdness...
Date: Fri, 16 Oct 2009 15:37:47 -0400	[thread overview]
Message-ID: <1255721867.19793.311.camel@blitz> (raw)

I'm using an hrtimer in my tsc2004 touch driver to sleep between samples
for 7.5mSec.  Here's the essence of the inner loop that grabs samples:

for (;;) {
	// Get a point, pass it to input_report_abs...
	pen_is_down = tsc2004_get_point(d);

	// If pen is up up, then break out
	if (!pen_is_down || signal_pending(tsk))
	break;

	{
		struct timespec timeout;
		// sleep for 7.5 mSec (giving max 133 touch/sec)
		timeout = ns_to_timespec(75 * 100 * 1000);
		hrtimer_nanosleep(&timeout, NULL, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
	}
}

What's really strange is when I use ts_test to measure sample rate, I
see:
OMAP-Torpedo# export TSLIB_TSDEVICE=/dev/input/event0
OMAP-Torpedo# export TSLIB_CONSOLEDEVICE=none
OMAP-Torpedo# ts_test
717.804687:    176    161    234
717.813446:    176    161    234
717.822265:    176    160    234
717.993255:    178    159    234
718.002014:    179    158    234
718.188537:    180    158    234
719.015441:    181    157    234
719.165100:    181    157    234
719.360412:    182    157    234
719.369079:    182    157    234
719.438537:    182    156    234
719.555725:    182    156    234
719.564392:    182    156    234
719.751037:    180    155    234
719.768432:    179    155    234
719.777099:    178    154    234
719.946350:    174    150    234
720.000976:    175    144    234
720.141662:    184    140    234
720.336975:    189    138    234
720.490722:    195    137    234
720.499420:    198    138    234
720.858123:    198    139    234
720.922912:    198    139    234
721.126922:    198    139    234
721.135620:    198    139    234
721.144317:    198    139    234
721.152984:    198    139    234
721.161682:    198    139    234
721.313537:    198    139    234
721.438537:    198    138      0

Which shows over 3.63 seconds 33 samples, or only 9.08 samples/second,
including a max delay of .827 seconds (719.015441 - 718.188537).  

But if I "ifup eth0" to bring the networking up (and nothing else is
running), I get:

OMAP-Torpedo# ifup eth0
[sleeping 5s]...net eth0: SMSC911x/921x identified at 0xc8858000, IRQ:
289
eth0: link down
eth0: link up, 100Mbps, full-duplex
udhcpc (v1.15.1) started
Sending discover...
Sending select for 192.168.3.151...
Lease of 192.168.3.151 obtained, lease time 86400
deleting routers
route: SIOCDELRT: No such process
adding dns 192.168.3.1
OMAP-Torpedo# ts_test
735.615905:    263    140    234
735.615905:    263    140    234
735.625152:    261    141    234
735.634277:    260    141    234
735.643463:    260    141    234
735.652648:    260    142    234
735.661865:    261    142    234
735.671081:    262    141    234
735.680267:    263    141    234
735.689453:    264    140    234
735.698669:    265    139    234
735.707885:    266    139    234
735.717102:    267    138    234
735.726318:    268    138    234
735.735534:    268    138    234
735.744751:    269    137    234
735.762725:    269    137    234
735.771942:    270    137    234
735.790344:    270    136    234
735.799560:    270    136    234
735.808746:    270    136    234
735.817962:    270    136    234
735.845611:    270    136    234
735.910217:    270    136    234
735.919403:    270    136    234
735.928588:    271    136    234
735.937866:    271    136    234
735.947082:    271    136    234
735.955871:    271    136    234
735.974334:    271    136    234
735.983551:    270    136    234
736.001220:    270    136    234
736.010467:    270    136    234
736.047302:    270    136    234
736.056488:    270    136    234
736.074951:    270    137    234
736.093383:    269    137    234
736.102600:    269    137      0

Or 36 samples in 0.486695  seconds -> ~74 samples per second with an
average/deviation that is much more acceptable.

This is completely reproducible.

Any ideas why firing up the SMSC911x driver would cause
hrtimer_nanosleep() to be much more predictable?

-- 
Peter Barada <peterb@logicpd.com>
Logic Product Development, Inc.

             reply	other threads:[~2009-10-16 19:32 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-16 19:37 Peter Barada [this message]
2009-10-17  7:53 ` hrtimer_nanosleep() weirdness michael

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=1255721867.19793.311.camel@blitz \
    --to=peterb@logicpd.com \
    --cc=linux-omap@vger.kernel.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.