From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 09/11] fsmc/nand:FIX: replace change_bit routine
Date: Wed, 10 Oct 2012 21:45:46 +0100 [thread overview]
Message-ID: <20121010204546.GK4625@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <CACRpkdaot3DKCoJOBpUcJFVrJ89xRx2T58fDe4YKY_r4NFqEag@mail.gmail.com>
On Wed, Oct 10, 2012 at 07:22:04PM +0200, Linus Walleij wrote:
> On Tue, Oct 9, 2012 at 12:44 PM, Vipin Kumar <vipin.kumar@st.com> wrote:
>
> > change_bit routine accepts only ulong pointers as buffer, so an unaligned char
> > pointer passed to change_bit may lead to a crash.
> >
> > Fix this bug by accessing the buffer as char pointer.
>
> Why not see if we can fix change_bit() instead?
> Since I suspect this is on ARM I bet Russell and Nico
> want to hear about this if there is a problem.
Not particularly. There's a reason the argument to change_bit() is typed
'unsigned long' and that's not because it can take a void, char, or a
short. It's because it _expects_ the buffer to be aligned to an
"unsigned long" quantity.
That's because on many architectures, misaligned loads and stores are
not atomic operations - and in this case, load/store exclusive will
fail when they're misalighed.
So...
- change_bit(err_idx[i], (unsigned long *)dat);
is highly invalid code.
> Can the ARM change_bit() not be fixed, so that
> long arguments are the only option?
Spot the intentional cast:
> > - change_bit(err_idx[i], (unsigned long *)dat);
which tries to work around this. Remember my attitude towards casts:
if you're having to use a cast, you are _probably_ doing something
wrong. In this case, it's hiding a warning which was saying that
the code is doing something wrong, and then the result blows up.
By adding that cast, the wrong wire was cut... you get to keep the
remains. ;)
next prev parent reply other threads:[~2012-10-10 20:45 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-09 10:44 [PATCH 00/11] mtd/nand: fsmc driver updates Vipin Kumar
2012-10-09 10:44 ` [PATCH 01/11] fsmc/nand:FIX: Change the type for regs to void __iomem * Vipin Kumar
2012-10-09 17:14 ` viresh kumar
2012-10-10 16:49 ` Linus Walleij
2012-10-17 12:30 ` Artem Bityutskiy
2012-10-09 10:44 ` [PATCH 02/11] fsmc/nand: Rearrange the fsmc_nand_data structure and update comments Vipin Kumar
2012-10-09 11:52 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-11 4:24 ` Vipin Kumar
2012-10-09 17:15 ` viresh kumar
2012-10-09 10:44 ` [PATCH 03/11] fsmc/nand: Support multiple banks connected to controller Vipin Kumar
2012-10-09 11:55 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-10 10:28 ` Vipin Kumar
2012-10-17 12:31 ` Artem Bityutskiy
2012-10-09 10:44 ` [PATCH 04/11] fsmc/nand: Accept nand timing parameters via DT Vipin Kumar
2012-10-09 11:57 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-11 4:25 ` Vipin Kumar
2012-10-09 17:20 ` viresh kumar
2012-10-09 10:44 ` [PATCH 05/11] fsmc: Implement ready/busy through gpio pin Vipin Kumar
2012-10-09 11:59 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-09 17:34 ` viresh kumar
2012-10-09 10:44 ` [PATCH 06/11] fsmc/nand: Modify the wait to uninterruptible Vipin Kumar
2012-10-10 17:10 ` Linus Walleij
2012-10-17 12:47 ` Artem Bityutskiy
2012-10-09 10:44 ` [PATCH 07/11] fsmc/nand: Provide contiguous buffers to dma Vipin Kumar
2012-10-09 17:41 ` viresh kumar
2012-10-10 17:07 ` Linus Walleij
2012-10-11 3:16 ` viresh kumar
2012-10-11 4:07 ` Vipin Kumar
2012-10-11 4:08 ` Vipin Kumar
2012-10-11 4:15 ` viresh kumar
2012-10-11 16:06 ` Linus Walleij
2012-10-11 17:07 ` viresh kumar
2012-10-11 21:51 ` Linus Walleij
2012-10-12 3:55 ` Vipin Kumar
2012-10-15 13:18 ` Artem Bityutskiy
2012-10-15 16:27 ` Brian Norris
2012-10-15 19:51 ` Linus Walleij
2012-10-16 7:14 ` Artem Bityutskiy
2012-10-16 10:05 ` Linus Walleij
2012-10-21 7:38 ` Brian Norris
2012-10-21 11:00 ` Artem Bityutskiy
2012-10-21 12:02 ` Artem Bityutskiy
2012-10-16 7:11 ` Artem Bityutskiy
2012-10-21 7:21 ` Brian Norris
2012-10-09 10:44 ` [PATCH 08/11] fsmc/nand: Use relaxed variants of io accessors Vipin Kumar
2012-10-09 17:42 ` viresh kumar
2012-10-10 17:09 ` Linus Walleij
2012-10-09 10:44 ` [PATCH 09/11] fsmc/nand:FIX: replace change_bit routine Vipin Kumar
2012-10-10 17:22 ` Linus Walleij
2012-10-10 20:21 ` Nicolas Pitre
2012-10-11 4:17 ` Vipin Kumar
2012-10-10 20:45 ` Russell King - ARM Linux [this message]
2012-10-11 4:20 ` Vipin Kumar
2012-10-09 10:44 ` [PATCH 10/11] fsmc/nand: Add sw bch support for ecc calculation/correction Vipin Kumar
2012-10-09 11:50 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-10 10:33 ` Vipin Kumar
2012-10-09 10:44 ` [PATCH 11/11] nand: Increase the ecc placement locations to 640 Vipin Kumar
2012-10-17 12:47 ` Artem Bityutskiy
2012-10-18 6:36 ` Brian Norris
2012-10-17 12:48 ` [PATCH 00/11] mtd/nand: fsmc driver updates Artem Bityutskiy
2012-10-18 4:13 ` Vipin Kumar
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=20121010204546.GK4625@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).