summaryrefslogtreecommitdiffstats
path: root/ncr-sessions.c
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-07-26 19:37:46 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-26 20:25:47 +0200
commitf8ee9fe8abff32704e658923003eae1420f97e16 (patch)
tree3611a747d0f3c03085df004439e2b252b12d909e /ncr-sessions.c
parentd9828d0890624db84f99b195051f19849e654d8e (diff)
downloadcryptodev-linux-f8ee9fe8abff32704e658923003eae1420f97e16.tar.gz
cryptodev-linux-f8ee9fe8abff32704e658923003eae1420f97e16.tar.xz
cryptodev-linux-f8ee9fe8abff32704e658923003eae1420f97e16.zip
Don't duplicate expansion of session page pointers
Diffstat (limited to 'ncr-sessions.c')
-rw-r--r--ncr-sessions.c55
1 files changed, 23 insertions, 32 deletions
diff --git a/ncr-sessions.c b/ncr-sessions.c
index 3eaae42..27c2937 100644
--- a/ncr-sessions.c
+++ b/ncr-sessions.c
@@ -489,6 +489,27 @@ static void _ncr_session_remove(struct list_sem_st* lst, ncr_session_t desc)
return;
}
+static int _ncr_session_grow_pages(struct session_item_st *ses, int pagecount)
+{
+ if (pagecount < ses->array_size)
+ return 0;
+
+ while (ses->array_size < pagecount)
+ ses->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)) {
+ return -ENOMEM;
+ }
+ return 0;
+}
+
/* Only the output buffer is given as scatterlist */
static int get_userbuf1(struct session_item_st* ses,
void __user * udata, size_t udata_size, struct scatterlist **dst_sg, unsigned *dst_cnt)
@@ -506,22 +527,7 @@ static int get_userbuf1(struct session_item_st* ses,
}
pagecount = PAGECOUNT(udata, udata_size);
-
- if (pagecount > ses->array_size) {
- while (ses->array_size < pagecount)
- ses->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)) {
- return -ENOMEM;
- }
- }
+ _ncr_session_grow_pages(ses, pagecount);
if (__get_userbuf(udata, udata_size, 1,
pagecount, ses->pages, ses->sg)) {
@@ -570,22 +576,7 @@ static int get_userbuf2(struct session_item_st* ses,
}
pagecount = src_pagecount + dst_pagecount;
-
- if (pagecount > ses->array_size) {
- while (ses->array_size < pagecount)
- ses->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 (ses->sg == NULL || ses->pages == NULL) {
- return -ENOMEM;
- }
- }
+ _ncr_session_grow_pages(ses, pagecount);
if (__get_userbuf(op->data.udata.input, input_size, write_src,
src_pagecount, ses->pages, ses->sg)) {