summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cryptodev_main.c28
-rw-r--r--ncr-sessions.c41
2 files changed, 38 insertions, 31 deletions
diff --git a/cryptodev_main.c b/cryptodev_main.c
index f6124cd..f2e336e 100644
--- a/cryptodev_main.c
+++ b/cryptodev_main.c
@@ -561,19 +561,27 @@ static int get_userbuf(struct csession *ses,
(*tot_pages) = pagecount = src_pagecount + dst_pagecount;
if (pagecount > ses->array_size) {
- while (ses->array_size < pagecount)
- ses->array_size *= 2;
+ struct scatterlist *sg;
+ struct page **pages;
+ int array_size;
- dprintk(2, KERN_DEBUG, "%s: reallocating to %d elements\n",
- __func__, ses->array_size);
- ses->pages = krealloc(ses->pages, ses->array_size *
- sizeof(struct page *), GFP_KERNEL);
- ses->sg = krealloc(ses->sg, ses->array_size *
- sizeof(struct scatterlist), GFP_KERNEL);
+ for (array_size = ses->array_size; array_size < pagecount;
+ array_size *= 2)
+ ;
- if (ses->sg == NULL || ses->pages == NULL) {
+ dprintk(2, KERN_DEBUG, "%s: reallocating to %d elements\n",
+ __func__, array_size);
+ pages = krealloc(ses->pages, array_size * sizeof(struct page *),
+ GFP_KERNEL);
+ if (pages == NULL)
return -ENOMEM;
- }
+ ses->pages = pages;
+ sg = krealloc(ses->sg, array_size * sizeof(struct scatterlist),
+ GFP_KERNEL);
+ if (sg == NULL)
+ return -ENOMEM;
+ ses->sg = sg;
+ ses->array_size = array_size;
}
if (__get_userbuf(cop->src, cop->len, write_src,
diff --git a/ncr-sessions.c b/ncr-sessions.c
index 27c2937..3d9c5a0 100644
--- a/ncr-sessions.c
+++ b/ncr-sessions.c
@@ -491,22 +491,31 @@ static void _ncr_session_remove(struct list_sem_st* lst, ncr_session_t desc)
static int _ncr_session_grow_pages(struct session_item_st *ses, int pagecount)
{
- if (pagecount < ses->array_size)
+ struct scatterlist *sg;
+ struct page **pages;
+ int array_size;
+
+ if (likely(pagecount < ses->array_size))
return 0;
- while (ses->array_size < pagecount)
- ses->array_size *= 2;
+ for (array_size = ses->array_size; array_size < pagecount;
+ array_size *= 2)
+ ;
dprintk(2, KERN_DEBUG, "%s: reallocating to %d elements\n",
- __func__, ses->array_size);
- ses->pages = krealloc(ses->pages, ses->array_size *
- sizeof(struct page *), GFP_KERNEL);
- ses->sg = krealloc(ses->sg, ses->array_size *
- sizeof(struct scatterlist), GFP_KERNEL);
-
- if (unlikely(ses->sg == NULL || ses->pages == NULL)) {
+ __func__, array_size);
+ pages = krealloc(ses->pages, array_size * sizeof(struct page *),
+ GFP_KERNEL);
+ if (unlikely(pages == NULL))
return -ENOMEM;
- }
+ ses->pages = pages;
+ sg = krealloc(ses->sg, array_size * sizeof(struct scatterlist),
+ GFP_KERNEL);
+ if (unlikely(sg == NULL))
+ return -ENOMEM;
+ ses->sg = sg;
+
+ ses->array_size = array_size;
return 0;
}
@@ -521,11 +530,6 @@ static int get_userbuf1(struct session_item_st* ses,
return -EINVAL;
}
- if (unlikely(ses->sg == NULL || ses->pages == NULL)) {
- err();
- return -ENOMEM;
- }
-
pagecount = PAGECOUNT(udata, udata_size);
_ncr_session_grow_pages(ses, pagecount);
@@ -555,11 +559,6 @@ static int get_userbuf2(struct session_item_st* ses,
return -EINVAL;
}
- if (unlikely(ses->sg == NULL || ses->pages == NULL)) {
- err();
- return -ENOMEM;
- }
-
src_pagecount = PAGECOUNT(op->data.udata.input, input_size);
if (op->data.udata.input != op->data.udata.output) { /* non-in-situ transformation */