**/
 static struct ipr_sglist *ipr_alloc_ucode_buffer(int buf_len)
 {
-       int sg_size, order, bsize_elem, num_elem, i, j;
+       int sg_size, order;
        struct ipr_sglist *sglist;
-       struct scatterlist *scatterlist;
-       struct page *page;
 
        /* Get the minimum size per scatter/gather element */
        sg_size = buf_len / (IPR_MAX_SGLIST - 1);
        /* Get the actual size per element */
        order = get_order(sg_size);
 
-       /* Determine the actual number of bytes per element */
-       bsize_elem = PAGE_SIZE * (1 << order);
-
-       /* Determine the actual number of sg entries needed */
-       if (buf_len % bsize_elem)
-               num_elem = (buf_len / bsize_elem) + 1;
-       else
-               num_elem = buf_len / bsize_elem;
-
        /* Allocate a scatter/gather list for the DMA */
-       sglist = kzalloc(sizeof(struct ipr_sglist) +
-                        (sizeof(struct scatterlist) * (num_elem - 1)),
-                        GFP_KERNEL);
-
+       sglist = kzalloc(sizeof(struct ipr_sglist), GFP_KERNEL);
        if (sglist == NULL) {
                ipr_trace;
                return NULL;
        }
-
-       scatterlist = sglist->scatterlist;
-       sg_init_table(scatterlist, num_elem);
-
        sglist->order = order;
-       sglist->num_sg = num_elem;
-
-       /* Allocate a bunch of sg elements */
-       for (i = 0; i < num_elem; i++) {
-               page = alloc_pages(GFP_KERNEL, order);
-               if (!page) {
-                       ipr_trace;
-
-                       /* Free up what we already allocated */
-                       for (j = i - 1; j >= 0; j--)
-                               __free_pages(sg_page(&scatterlist[j]), order);
-                       kfree(sglist);
-                       return NULL;
-               }
-
-               sg_set_page(&scatterlist[i], page, 0, 0);
+       sglist->scatterlist = sgl_alloc_order(buf_len, order, false, GFP_KERNEL,
+                                             &sglist->num_sg);
+       if (!sglist->scatterlist) {
+               kfree(sglist);
+               return NULL;
        }
 
        return sglist;
  **/
 static void ipr_free_ucode_buffer(struct ipr_sglist *sglist)
 {
-       int i;
-
-       for (i = 0; i < sglist->num_sg; i++)
-               __free_pages(sg_page(&sglist->scatterlist[i]), sglist->order);
-
+       sgl_free_order(sglist->scatterlist, sglist->order);
        kfree(sglist);
 }