struct sg_page_iter sg_iter;
 
                mb(); /*CLFLUSH is ordered only by using memory barriers*/
-               for_each_sg_page(st->sgl, &sg_iter, st->nents, 0)
+               for_each_sgtable_page(st, &sg_iter, 0)
                        drm_clflush_page(sg_page_iter_page(&sg_iter));
                mb(); /*Make sure that all cache line entry is flushed*/
 
 
                drm_prime_gem_destroy(obj, shmem->sgt);
        } else {
                if (shmem->sgt) {
-                       dma_unmap_sg(obj->dev->dev, shmem->sgt->sgl,
-                                    shmem->sgt->nents, DMA_BIDIRECTIONAL);
+                       dma_unmap_sgtable(obj->dev->dev, shmem->sgt,
+                                         DMA_BIDIRECTIONAL, 0);
                        sg_free_table(shmem->sgt);
                        kfree(shmem->sgt);
                }
 
        WARN_ON(!drm_gem_shmem_is_purgeable(shmem));
 
-       dma_unmap_sg(obj->dev->dev, shmem->sgt->sgl,
-                    shmem->sgt->nents, DMA_BIDIRECTIONAL);
+       dma_unmap_sgtable(obj->dev->dev, shmem->sgt, DMA_BIDIRECTIONAL, 0);
        sg_free_table(shmem->sgt);
        kfree(shmem->sgt);
        shmem->sgt = NULL;
                goto err_put_pages;
        }
        /* Map the pages for use by the h/w. */
-       dma_map_sg(obj->dev->dev, sgt->sgl, sgt->nents, DMA_BIDIRECTIONAL);
+       ret = dma_map_sgtable(obj->dev->dev, sgt, DMA_BIDIRECTIONAL, 0);
+       if (ret)
+               goto err_free_sgt;
 
        shmem->sgt = sgt;
 
        return sgt;
 
+err_free_sgt:
+       sg_free_table(sgt);
+       kfree(sgt);
 err_put_pages:
        drm_gem_shmem_put_pages(shmem);
        return ERR_PTR(ret);
 
 {
        struct drm_gem_object *obj = attach->dmabuf->priv;
        struct sg_table *sgt;
+       int ret;
 
        if (WARN_ON(dir == DMA_NONE))
                return ERR_PTR(-EINVAL);
        else
                sgt = obj->dev->driver->gem_prime_get_sg_table(obj);
 
-       if (!dma_map_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
-                             DMA_ATTR_SKIP_CPU_SYNC)) {
+       ret = dma_map_sgtable(attach->dev, sgt, dir,
+                             DMA_ATTR_SKIP_CPU_SYNC);
+       if (ret) {
                sg_free_table(sgt);
                kfree(sgt);
-               sgt = ERR_PTR(-ENOMEM);
+               sgt = ERR_PTR(ret);
        }
 
        return sgt;
        if (!sgt)
                return;
 
-       dma_unmap_sg_attrs(attach->dev, sgt->sgl, sgt->nents, dir,
-                          DMA_ATTR_SKIP_CPU_SYNC);
+       dma_unmap_sgtable(attach->dev, sgt, dir, DMA_ATTR_SKIP_CPU_SYNC);
        sg_free_table(sgt);
        kfree(sgt);
 }