Skip to contentSkip to conversation

fastboot: mmc: Fix use of 64 bit division

PATCH New Hans de Goede 2 participants 3 messages Nov 11, 2015 – Nov 13, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fastboot: mmc: Fix use of 64 bit division

Directly doing a 64 bit division (when CONFIG_SYS_64BIT_LBA is set) causes linking to fail when building u-boot for ARMv7 with a hard-float tool-chain.

This commit fixes this by properly using div_u64 for the division.

Note that an alternative fix would be to stop using lbaint_t for blkcnt / blks, since the passed in "download_bytes" is only 32 bits anyways. But we may want to support files / partitions larger then 4G in the near future and using div_u64 is future proof for when download_bytes' type gets changed to a lbaint_t itself.

---
 common/fb_mmc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
common/fb_mmc.c +3 -1
index 0c48cf9..83d66ed 100644
@@ -11,6 +11,8 @@
 #include <aboot.h>
 #include <sparse_format.h>
 #include <mmc.h>
+#include <div64.h>
+#include <linux/math64.h>
 
 #ifndef CONFIG_FASTBOOT_GPT_NAME
 #define CONFIG_FASTBOOT_GPT_NAME GPT_ENTRY_NAME
@@ -64,7 +66,7 @@ static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
 
 	/* determine number of blocks to write */
 	blkcnt = ((download_bytes + (info->blksz - 1)) & ~(info->blksz - 1));
-	blkcnt = blkcnt / info->blksz;
+	blkcnt = div_u64(blkcnt, info->blksz);
 
 	if (blkcnt > info->size) {
 		error("too large for partition: '%s'\n", part_name);
Signature · 1 line
2.5.0
#1 lore raw

PATCH 1/1 fastboot: mmc: Fix use of 64 bit division

Quoted 6 lines · Hans de Goede

Directly doing a 64 bit division (when CONFIG_SYS_64BIT_LBA is set) causes linking to fail when building u-boot for ARMv7 with a hard-float tool-chain.

This commit fixes this by properly using div_u64 for the division.

Quoted 7 lines

Note that an alternative fix would be to stop using lbaint_t for blkcnt / blks, since the passed in "download_bytes" is only 32 bits anyways. But we may want to support files / partitions larger then 4G in the near future and using div_u64 is future proof for when download_bytes' type gets changed to a lbaint_t itself.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20151111/e559a83f/attachment.sig>
#2 lore raw

PATCH 1/1 fastboot: mmc: Fix use of 64 bit division

Quoted 14 lines · Tom Rini
Quoted 12 lines · Hans de Goede

Directly doing a 64 bit division (when CONFIG_SYS_64BIT_LBA is set) causes linking to fail when building u-boot for ARMv7 with a hard-float tool-chain.

This commit fixes this by properly using div_u64 for the division.

Note that an alternative fix would be to stop using lbaint_t for blkcnt / blks, since the passed in "download_bytes" is only 32 bits anyways. But we may want to support files / partitions larger then 4G in the near future and using div_u64 is future proof for when download_bytes' type gets changed to a lbaint_t itself.

Quoted 3 lines
Quoted 1 line

But a duplicate of https://patchwork.ozlabs.org/patch/537185/ sorry :(

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20151112/542466cf/attachment.sig>