From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <4FC214E5.1010007@atmel.com> Date: Sun, 27 May 2012 13:49:57 +0200 From: Nicolas Ferre MIME-Version: 1.0 To: Peter Korsgaard CC: , , , , Subject: Re: [PATCH] hw_random: atmel-rng: fix race condition leading to repeated bits References: <1337937158-9710-1-git-send-email-jacmet@sunsite.dk> <4FBF5916.4070705@atmel.com> <877gw0a7vc.fsf@macbook.be.48ers.dk> In-Reply-To: <877gw0a7vc.fsf@macbook.be.48ers.dk> Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: On 05/25/2012 12:10 PM, Peter Korsgaard : >>>>>> "Nicolas" == Nicolas Ferre writes: > > Hi, > > Nicolas> What about a single read to ISR like this: > > Nicolas> tmp = readl(trng->base + TRNG_ODATA); > Nicolas> if (readl(trng->base + TRNG_ISR) & 1) { > Nicolas> *data = tmp; > Nicolas> return 4; > Nicolas> } else { > Nicolas> return 0; > Nicolas> } > > No, that won't work as you then have another race. Data might not be > ready when you read ODATA, but then become ready just in time for when > you read ISR, so you end up using stale data. Yes, sure. > It all would have been easier if the ready bit would get cleared on > reads from ODATA instead of/as well as from ISR, but that's > unfortunately not the case. I will talk about that idea to my friends designers and see if we can improve things, in the future... Thanks, bye, -- Nicolas Ferre