mmc_write.c: Make mmc_berase do 32bit safe 64bit math
authorTom Rini <trini@konsulko.com>
Fri, 12 Jun 2015 00:53:31 +0000 (20:53 -0400)
committerLothar Waßmann <LW@KARO-electronics.de>
Tue, 8 Sep 2015 22:42:51 +0000 (00:42 +0200)
We want to see if the requested start or total block count are
unaligned.  We discard the whole numbers and only care about the
remainder.  Update the code to use div_u64_rem here and add a comment.

Cc: Hans de Goede <hdegoede@redhat.com>
Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Cc: Bernhard Nortmann <bernhard.nortmann@web.de>
Reported-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Rini <trini@konsulko.com>
Tested-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
drivers/mmc/mmc_write.c

index 3db9669..7aea7e9 100644 (file)
@@ -10,6 +10,8 @@
 #include <config.h>
 #include <common.h>
 #include <part.h>
+#include <div64.h>
+#include <linux/math64.h>
 #include "mmc_private.h"
 
 static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
@@ -66,6 +68,7 @@ err_out:
 unsigned long mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt)
 {
        int err = 0;
+       u32 start_rem, blkcnt_rem;
        struct mmc *mmc = find_mmc_device(dev_num);
        lbaint_t blk = 0, blk_r = 0;
        int timeout = 1000;
@@ -73,7 +76,14 @@ unsigned long mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt)
        if (!mmc)
                return -1;
 
-       if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
+       /*
+        * We want to see if the requested start or total block count are
+        * unaligned.  We discard the whole numbers and only care about the
+        * remainder.
+        */
+       err = div_u64_rem(start, mmc->erase_grp_size, &start_rem);
+       err = div_u64_rem(blkcnt, mmc->erase_grp_size, &blkcnt_rem);
+       if (start_rem || blkcnt_rem)
                printf("\n\nCaution! Your devices Erase group is 0x%x\n"
                       "The erase range would be change to "
                       "0x" LBAF "~0x" LBAF "\n\n",