From: Ralf Baechle <ralf@linux-mips.org>
To: Chris Packham <judge.packham@gmail.com>
Cc: linux-mips@linux-mips.org,
Daniel Schwierzeck <daniel.schwierzeck@gmail.com>,
"Steven J. Hill" <Steven.Hill@imgtec.com>,
"Maciej W. Rozycki" <macro@linux-mips.org>,
linux-kernel@vger.kernel.org,
James Hogan <james.hogan@imgtec.com>,
Markos Chandras <markos.chandras@imgtec.com>,
Paul Burton <paul.burton@imgtec.com>
Subject: Re: [RFC PATCH v1] mips: Use unsigned int when reading CP0 registers
Date: Wed, 15 Jul 2015 12:05:03 +0200 [thread overview]
Message-ID: <20150715100503.GA22385@linux-mips.org> (raw)
In-Reply-To: <1436913870-17738-1-git-send-email-judge.packham@gmail.com>
On Wed, Jul 15, 2015 at 10:44:30AM +1200, Chris Packham wrote:
> Update __read_32bit_c0_register() and __read_32bit_c0_ctrl_register() to
> use "unsigned int res;" instead of "int res;". There is little reason to
> treat these register values as signed. They are either counters (which
> by definition are unsigned) or are made up of various bit fields to be
> interpreted as per the CPU datasheet.
>
> Signed-off-by: Chris Packham <judge.packham@gmail.com>
>
> ---
> This has come up via u-boot[1] which sync's asm/mipsregs.h with the
> kernel. In u-boots case the value read from read_c0_count() is assigned
> to an unsigned long [2] which triggers a sign extension and causes a
> bug.
>
> U-boot should probably be more explicit about the types used for the
> timer_read_counter() API but that aside is there any reason to treat
> these values as signed integers? A quick grep around the arch/mips makes
> me thing that there may be some bugs lurking when read_c0_count() starts
> to yield a negative value but I haven't really explored any of them.
Known issue but I've always been concerned about math with cycle values
like:
unsigned int now, timeout = read_c0_counter() + a_bit_of_time;
waste_some_time();
if (timeout - read_c0_counter() < 0)
do_timeout_stuff();
Which now with both variables being unsigned would yield a positive value
thus the if would never be taken. This particular construction GCC would
warn about but there are other, constructs that wouldn't trigger a warning.
I don't even want to think about what C type propagation rules say about
mixing signed and unsigned types. Whenever such knowledge is required
to figure out what a piece of code is doing it probably should be considered
broken anyway - but the mess resulting from unwanted sign is no better!
Anyway, I've queued your patch for 4.3. Thanks!
> I also notice that read_32bit_cp1_register has a similar issue. I
> haven't touched it at this stage but it probably makes sense to do so
> for consistency if the CP0 macros are changed. Looking at the users of
> read_32bit_cp1_register() it's probably less of an issue.
I've cooked up a patch for read_32bit_cp1_register and queued it for 4.3.
Ralf
prev parent reply other threads:[~2015-07-15 10:05 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-14 22:44 [RFC PATCH v1] mips: Use unsigned int when reading CP0 registers Chris Packham
2015-07-15 10:05 ` Ralf Baechle [this message]
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=20150715100503.GA22385@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=Steven.Hill@imgtec.com \
--cc=daniel.schwierzeck@gmail.com \
--cc=james.hogan@imgtec.com \
--cc=judge.packham@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=macro@linux-mips.org \
--cc=markos.chandras@imgtec.com \
--cc=paul.burton@imgtec.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 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.