summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/crypto/mv_cesa.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
index fb3f1e35623d..de09303675d8 100644
--- a/drivers/crypto/mv_cesa.c
+++ b/drivers/crypto/mv_cesa.c
@@ -187,9 +187,9 @@ static void copy_src_to_buf(struct req_progress *p, char *dbuf, int len)
{
int ret;
void *sbuf;
- int copied = 0;
+ int copy_len;
- while (1) {
+ while (len) {
if (!p->sg_src_left) {
ret = sg_miter_next(&p->src_sg_it);
BUG_ON(!ret);
@@ -199,19 +199,14 @@ static void copy_src_to_buf(struct req_progress *p, char *dbuf, int len)
sbuf = p->src_sg_it.addr + p->src_start;
- if (p->sg_src_left <= len - copied) {
- memcpy(dbuf + copied, sbuf, p->sg_src_left);
- copied += p->sg_src_left;
- p->sg_src_left = 0;
- if (copied >= len)
- break;
- } else {
- int copy_len = len - copied;
- memcpy(dbuf + copied, sbuf, copy_len);
- p->src_start += copy_len;
- p->sg_src_left -= copy_len;
- break;
- }
+ copy_len = min(p->sg_src_left, len);
+ memcpy(dbuf, sbuf, copy_len);
+
+ p->src_start += copy_len;
+ p->sg_src_left -= copy_len;
+
+ len -= copy_len;
+ dbuf += copy_len;
}
}