Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Oct 2011 22:40:12 GMT
From:      Mark Tinguely <marktinguely@gmail.com>
To:        freebsd-arm@FreeBSD.org
Subject:   Re: arm/161498: [patch] ARM RAS code can fail to restart an atomic sequence.
Message-ID:  <201110112240.p9BMeCQ5040747@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR arm/161498; it has been noted by GNATS.

From: Mark Tinguely <marktinguely@gmail.com>
To: Ian Lepore <freebsd@damnhippie.dyndns.org>
Cc: FreeBSD-gnats-submit@FreeBSD.org
Subject: Re: arm/161498: [patch] ARM RAS code can fail to restart an atomic
 sequence.
Date: Tue, 11 Oct 2011 17:13:30 -0500

 On 10/11/2011 12:42 PM, Ian Lepore wrote:
 > The "normal" RAS sequence goes like this:
 >
 >      On entry, RAS_START = 0x00000000, RAS_END = 0xffffffff
 >
 >      1: Set RAS_START to address of Step 1
 >      2: Set RAS_END to address of Step 4
 >      3: Do the atomic operation
 >      4: Set RAS_START to 0x00000000
 >      5: Set RAS_END to 0xffffffff
 
 good job!
 
 I am looking forward to ARMv6/ARMv7 to replace these with 
 ldrex/strex/clrex calls.
 
 Devil's advocate: a person can now put any value in RAS_START and wait 
 for an interrupt. I don't see that doing them any good. In the past they 
 could do this only if the (RAS_START < PC). In a uni-processor, we 
 cannot overlap these critical sections. We are assuming that critical 
 sections are made by an atomic command because we do not check to see if 
 (RAS_START < PC). Does the RAS_END comparison buy us anything? At this 
 point.
 
      RAS_END == 0xffff_ffff when interrupt is between step 1 and 2
      RAS_END == address of step 5
 
 In both cases, (PC <= RAS_END)
 
 --Mark.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201110112240.p9BMeCQ5040747>