diff options
-rw-r--r-- | cryptodev_main.c | 28 | ||||
-rw-r--r-- | ncr-sessions.c | 41 |
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 */ |