public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brown <davidb@codeaurora.org>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Saravana Kannan <skannan@codeaurora.org>,
	Will Deacon <will.deacon@arm.com>,
	linux-arm-msm@vger.kernel.org,
	Stephen Boyd <sboyd@codeaurora.org>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 2/4] msm: scm: Fix improper register assignment
Date: Sat, 26 Feb 2011 09:58:49 -0800	[thread overview]
Message-ID: <8yazkpi3cfa.fsf@huya.qualcomm.com> (raw)
In-Reply-To: <20110226084736.GB3640@n2100.arm.linux.org.uk> (Russell King's message of "Sat, 26 Feb 2011 08:47:36 +0000")

On Sat, Feb 26 2011, Russell King - ARM Linux wrote:

> On Fri, Feb 25, 2011 at 09:09:05PM -0800, Saravana Kannan wrote:
>> Yeah, Stephen and I spent quite a bit of time discussing this and  
>> experimenting to figure out what the heck GCC was doing. But it kept  
>> optimizing the fake code we put in trying to force GCC to use a specific  
>> register.
>
> One way to look at it is that if you specify a value for r0, assign it,
> and then call a function, how do you expect the r0 value to be preserved?
> r0 will be corrupted by the called function as its used to pass arg0 and
> the return value.

> I'm surprised the compiler didn't spit out an error.

The gcc docs say:

   * Local register variables in specific registers do not reserve the
     registers, except at the point where they are used as input or
     output operands in an `asm' statement and the `asm' statement
     itself is not deleted.  The compiler's data flow analysis is
     capable of determining where the specified registers contain live
     values, and where they are available for other uses.  Stores into
     local register variables may be deleted when they appear to be
     dead according to dataflow analysis.  References to local register
     variables may be deleted or moved or simplified.

which would suggest that it should at least detect that it can't keep
the value in r0.  What it seems to do is detect that the value can't be
in the register, so it never bothers putting it there in the first
place.

In any case, fortunately it works with the fix.

David

-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

  reply	other threads:[~2011-02-26 17:58 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-24 18:44 [PATCH 0/4] SCM fixes and updates Stephen Boyd
2011-02-24 18:44 ` [PATCH 1/4] msm: scm: Mark inline asm as volatile Stephen Boyd
2011-02-25 11:56   ` Will Deacon
2011-02-25 19:05     ` Stephen Boyd
2011-02-26 18:12     ` David Brown
2011-02-26 19:43       ` Nicolas Pitre
2011-02-27 17:41         ` David Brown
2011-02-28  2:21           ` Nicolas Pitre
2011-02-27 11:10       ` Will Deacon
2011-02-27 17:38         ` David Brown
2011-03-01 10:30           ` Will Deacon
2011-02-24 18:44 ` [PATCH 2/4] msm: scm: Fix improper register assignment Stephen Boyd
2011-02-25 13:23   ` Will Deacon
2011-02-25 19:22     ` Stephen Boyd
2011-02-26  5:09     ` Saravana Kannan
2011-02-26  8:47       ` Russell King - ARM Linux
2011-02-26 17:58         ` David Brown [this message]
2011-02-26 20:04           ` Nicolas Pitre
2011-03-01 10:37             ` Will Deacon
2011-03-01 21:29               ` Saravana Kannan
2011-03-02  0:02                 ` Nicolas Pitre
2011-03-01 13:54             ` Will Deacon
2011-02-24 18:44 ` [PATCH 3/4] msm: scm: Check for interruption immediately Stephen Boyd
2011-02-24 18:44 ` [PATCH 4/4] msm: scm: Get cacheline size from CTR Stephen Boyd
2011-02-24 19:01   ` Thomas Gleixner
2011-02-24 19:44     ` Stephen Boyd
2011-02-24 19:56       ` Thomas Gleixner
2011-03-01  4:21         ` Stephen Boyd
2011-02-24 19:32   ` Sergei Shtylyov
2011-02-24 19:50     ` Stephen Boyd
2011-02-24 19:55     ` Russell King - ARM Linux
2011-03-09 19:29 ` [PATCH 0/4] SCM fixes and updates Stephen Boyd
2011-03-10 20:06   ` David Brown

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=8yazkpi3cfa.fsf@huya.qualcomm.com \
    --to=davidb@codeaurora.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=sboyd@codeaurora.org \
    --cc=skannan@codeaurora.org \
    --cc=will.deacon@arm.com \
    /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