linux/drivers/mtd/nand
Herton Ronaldo Krzesinski 596fd46268 mtd: nandsim: don't open code a do_div helper
We don't need to open code the divide function, just use div_u64 that
already exists and do the same job. While this is a straightforward
clean up, there is more to that, the real motivation for this.

While building on a cross compiling environment in armel, using gcc
4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5), I was getting the following build
error:

ERROR: "__aeabi_uldivmod" [drivers/mtd/nand/nandsim.ko] undefined!

After investigating with objdump and hand built assembly version
generated with the compiler, I narrowed __aeabi_uldivmod as being
generated from the divide function. When nandsim.c is built with
-fno-inline-functions-called-once, that happens when
CONFIG_DEBUG_SECTION_MISMATCH is enabled, the do_div optimization in
arch/arm/include/asm/div64.h doesn't work as expected with the open
coded divide function: even if the do_div we are using doesn't have a
constant divisor, the compiler still includes the else parts of the
optimized do_div macro, and translates the divisions there to use
__aeabi_uldivmod, instead of only calling __do_div_asm -> __do_div64 and
optimizing/removing everything else out.

So to reproduce, gcc 4.6 plus CONFIG_DEBUG_SECTION_MISMATCH=y and
CONFIG_MTD_NAND_NANDSIM=m should do it, building on armel.

After this change, the compiler does the intended thing even with
-fno-inline-functions-called-once, and optimizes out as expected the
constant handling in the optimized do_div on arm. As this also avoids a
build issue, I'm marking for Stable, as I think is applicable for this
case.

Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
Cc: stable@vger.kernel.org
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
2012-07-06 16:59:33 +01:00
..
gpmi-nand mtd: gpmi-nand: fix read page when reading to vmalloced area 2012-07-06 15:06:23 +01:00
alauda.c mtd: driver _read() returns max_bitflips; mtd_read() returns -EUCLEAN 2012-05-13 23:14:23 -05:00
ams-delta.c mtd: ams-delta: fix request_mem_region() failure 2012-05-08 16:24:33 -05:00
atmel_nand_ecc.h
atmel_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
au1550nd.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
autcpu12.c ARM: clps711x: Using a single definition for the PHYS and VIRT registers offset 2012-05-11 16:18:01 +02:00
bcm_umi_bch.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
bcm_umi_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
bf5xx_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
cafe_nand.c mtd: cafe_nand: fix an & vs | mistake 2012-07-06 14:27:13 +01:00
cmx270_nand.c mtd: do not use plain 0 as NULL 2012-03-27 00:53:20 +01:00
cs553x_nand.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
davinci_nand.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
denali.c mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
denali.h
diskonchip.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
docg4.c mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
fsl_elbc_nand.c mtd: eLBC NAND: utilize oob_required parameter 2012-05-13 23:21:39 -05:00
fsl_ifc_nand.c mtd: IFC NAND: utilize oob_required parameter 2012-05-13 23:21:48 -05:00
fsl_upm.c mtd: convert drivers/mtd/* to use module_platform_driver() 2012-01-09 18:12:35 +00:00
fsmc_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
gpio.c mtd: gpio-nand: add device tree bindings 2012-01-09 18:23:58 +00:00
h1910.c - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
jz4740_nand.c mtd: nand: fix incorrect ecc strength values 2012-05-13 23:10:28 -05:00
Kconfig mtd: nand: omap: add support for hardware BCH ecc 2012-05-13 23:25:51 -05:00
Makefile MTD merge for 3.4 2012-03-30 17:31:56 -07:00
mpc5121_nfc.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
mxc_nand.c mtd: mxc_nand: use 32bit copy functions 2012-07-06 15:06:18 +01:00
nand_base.c mtd: nand: initialize bitflip_threshold prior to BBT scanning 2012-06-09 12:02:04 +01:00
nand_bbt.c mtd: nand: fix scan_read_raw_oob 2012-05-29 11:14:58 +03:00
nand_bch.c mtd: cleanup style on pr_debug messages 2011-09-11 15:02:16 +03:00
nand_bcm_umi.c
nand_bcm_umi.h
nand_ecc.c mtd: spelling, capitalization, uniformity 2011-09-11 15:02:13 +03:00
nand_ids.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
nandsim.c mtd: nandsim: don't open code a do_div helper 2012-07-06 16:59:33 +01:00
ndfc.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
nomadik_nand.c mtd: introduce mtd_resume interface 2012-01-09 18:25:46 +00:00
nuc900_nand.c mtd: convert drivers/mtd/* to use module_platform_driver() 2012-01-09 18:12:35 +00:00
omap2.c mtd: nand: omap: add support for hardware BCH ecc 2012-05-13 23:25:51 -05:00
orion_nand.c arm-soc: clock driver changes 2012-05-26 12:42:29 -07:00
pasemi_nand.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
plat_nand.c mtd: add read_byte support to plat_nand 2012-05-13 23:16:53 -05:00
ppchameleonevb.c mtd: do not use plain 0 as NULL 2012-03-27 00:53:20 +01:00
pxa3xx_nand.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
r852.c mtd: nand: remove 'sndcmd' parameter of 'read_oob/read_oob_raw' 2012-05-13 23:24:40 -05:00
r852.h
rtc_from4.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
s3c2410.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
sh_flctl.c mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces 2012-05-13 23:20:00 -05:00
sharpsl.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
sm_common.c mtd: nand: kill NAND_NO_AUTOINCR option 2012-05-13 23:15:38 -05:00
sm_common.h
socrates_nand.c mtd: convert drivers/mtd/* to use module_platform_driver() 2012-01-09 18:12:35 +00:00
spia.c mtd: convert remaining users to mtd_device_register() 2011-05-25 02:25:00 +01:00
tmio_nand.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00
txx9ndfmc.c mtd: flash drivers set ecc strength 2012-03-27 00:56:46 +01:00