[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120323055927.GA2311@netboy.at.omicron.at>
Date: Fri, 23 Mar 2012 06:59:29 +0100
From: Richard Cochran <richardcochran@...il.com>
To: chetan loke <loke.chetan@...il.com>
Cc: "Keller, Jacob E" <jacob.e.keller@...el.com>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"e1000-devel@...ts.sourceforge.net"
<e1000-devel@...ts.sourceforge.net>,
"Kirsher, Jeffrey T" <jeffrey.t.kirsher@...el.com>,
"Ronciak, John" <john.ronciak@...el.com>,
"john.stultz@...aro.org" <john.stultz@...aro.org>,
"tglx@...utronix.de" <tglx@...utronix.de>
Subject: Re: [PATCH net V4 2/2] igb: offer a PTP Hardware Clock instead of
the timecompare method
On Thu, Mar 22, 2012 at 07:13:42PM -0400, chetan loke wrote:
> /* users can keep re-trying - dont really care */
[Sigh] No, they do in fact care...
> igb_gettime_locking (...) {
> unsigned int seq;
> u64 ns;
> do {
> seq = read_seqbegin( &pigb->tmreg_seq_lock);
> ns = timecounter_read(&pigb->tc);
And what happens here?
timecounter_read()
timecounter_read_delta()
tc->cc->read() == igb_825xx_systim_read()
lo = rd32(E1000_SYSTIML); /* this read latches the time value */
hi = rd32(E1000_SYSTIMH); /* and here is your race */
If two readers enter this code at nearly the same time, then they can
corrupt each other's hi/lo values.
> } while (read_seqretry(&pigb->tmreg_seq_lock, seq));
> // process ns
> }
>
>
> copyright 2012 - Chetan Loke <lokechetan@...il.com>
>
> // trip cnt will ensure/enforce - evil adjtime user-space code can
> still not block us.
> // called from igb_tx[rx]_hwtstamp
> driver_rx_tx_path_locking( ... ) {
> unsigned int seq, trip_cnt = 0;
> u64 ns;
> do {
> seq = read_seqbegin( &pigb->tmreg_seq_lock);
> trip_cnt++;
> ns = timecounter_read(&pigb->tc);
Same here.
Thanks,
Richard
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists