diff options
Diffstat (limited to 'drivers/mtd/ubi/upd.c')
| -rw-r--r-- | drivers/mtd/ubi/upd.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c index 8b89cc18ff0b..6b4d1ae891ae 100644 --- a/drivers/mtd/ubi/upd.c +++ b/drivers/mtd/ubi/upd.c | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | 40 | ||
| 41 | #include <linux/err.h> | 41 | #include <linux/err.h> |
| 42 | #include <linux/uaccess.h> | 42 | #include <linux/uaccess.h> |
| 43 | #include <asm/div64.h> | 43 | #include <linux/math64.h> |
| 44 | #include "ubi.h" | 44 | #include "ubi.h" |
| 45 | 45 | ||
| 46 | /** | 46 | /** |
| @@ -89,7 +89,6 @@ static int clear_update_marker(struct ubi_device *ubi, struct ubi_volume *vol, | |||
| 89 | long long bytes) | 89 | long long bytes) |
| 90 | { | 90 | { |
| 91 | int err; | 91 | int err; |
| 92 | uint64_t tmp; | ||
| 93 | struct ubi_vtbl_record vtbl_rec; | 92 | struct ubi_vtbl_record vtbl_rec; |
| 94 | 93 | ||
| 95 | dbg_gen("clear update marker for volume %d", vol->vol_id); | 94 | dbg_gen("clear update marker for volume %d", vol->vol_id); |
| @@ -101,9 +100,9 @@ static int clear_update_marker(struct ubi_device *ubi, struct ubi_volume *vol, | |||
| 101 | 100 | ||
| 102 | if (vol->vol_type == UBI_STATIC_VOLUME) { | 101 | if (vol->vol_type == UBI_STATIC_VOLUME) { |
| 103 | vol->corrupted = 0; | 102 | vol->corrupted = 0; |
| 104 | vol->used_bytes = tmp = bytes; | 103 | vol->used_bytes = bytes; |
| 105 | vol->last_eb_bytes = do_div(tmp, vol->usable_leb_size); | 104 | vol->used_ebs = div_u64_rem(bytes, vol->usable_leb_size, |
| 106 | vol->used_ebs = tmp; | 105 | &vol->last_eb_bytes); |
| 107 | if (vol->last_eb_bytes) | 106 | if (vol->last_eb_bytes) |
| 108 | vol->used_ebs += 1; | 107 | vol->used_ebs += 1; |
| 109 | else | 108 | else |
| @@ -131,7 +130,6 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol, | |||
| 131 | long long bytes) | 130 | long long bytes) |
| 132 | { | 131 | { |
| 133 | int i, err; | 132 | int i, err; |
| 134 | uint64_t tmp; | ||
| 135 | 133 | ||
| 136 | dbg_gen("start update of volume %d, %llu bytes", vol->vol_id, bytes); | 134 | dbg_gen("start update of volume %d, %llu bytes", vol->vol_id, bytes); |
| 137 | ubi_assert(!vol->updating && !vol->changing_leb); | 135 | ubi_assert(!vol->updating && !vol->changing_leb); |
| @@ -161,9 +159,8 @@ int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol, | |||
| 161 | if (!vol->upd_buf) | 159 | if (!vol->upd_buf) |
| 162 | return -ENOMEM; | 160 | return -ENOMEM; |
| 163 | 161 | ||
| 164 | tmp = bytes; | 162 | vol->upd_ebs = div_u64(bytes + vol->usable_leb_size - 1, |
| 165 | vol->upd_ebs = !!do_div(tmp, vol->usable_leb_size); | 163 | vol->usable_leb_size); |
| 166 | vol->upd_ebs += tmp; | ||
| 167 | vol->upd_bytes = bytes; | 164 | vol->upd_bytes = bytes; |
| 168 | vol->upd_received = 0; | 165 | vol->upd_received = 0; |
| 169 | return 0; | 166 | return 0; |
| @@ -282,7 +279,6 @@ static int write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, | |||
| 282 | int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol, | 279 | int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol, |
| 283 | const void __user *buf, int count) | 280 | const void __user *buf, int count) |
| 284 | { | 281 | { |
| 285 | uint64_t tmp; | ||
| 286 | int lnum, offs, err = 0, len, to_write = count; | 282 | int lnum, offs, err = 0, len, to_write = count; |
| 287 | 283 | ||
| 288 | dbg_gen("write %d of %lld bytes, %lld already passed", | 284 | dbg_gen("write %d of %lld bytes, %lld already passed", |
| @@ -291,10 +287,7 @@ int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol, | |||
| 291 | if (ubi->ro_mode) | 287 | if (ubi->ro_mode) |
| 292 | return -EROFS; | 288 | return -EROFS; |
| 293 | 289 | ||
| 294 | tmp = vol->upd_received; | 290 | lnum = div_u64_rem(vol->upd_received, vol->usable_leb_size, &offs); |
| 295 | offs = do_div(tmp, vol->usable_leb_size); | ||
| 296 | lnum = tmp; | ||
| 297 | |||
| 298 | if (vol->upd_received + count > vol->upd_bytes) | 291 | if (vol->upd_received + count > vol->upd_bytes) |
| 299 | to_write = count = vol->upd_bytes - vol->upd_received; | 292 | to_write = count = vol->upd_bytes - vol->upd_received; |
| 300 | 293 | ||
