|
@@ -57,8 +57,7 @@ static int lowlevel_buffer_allocate(struct drm_device *dev,
|
|
|
dma_addr_t start_addr;
|
|
|
unsigned int i = 0;
|
|
|
|
|
|
- buf->pages = kzalloc(sizeof(struct page) * nr_pages,
|
|
|
- GFP_KERNEL);
|
|
|
+ buf->pages = drm_calloc_large(nr_pages, sizeof(struct page *));
|
|
|
if (!buf->pages) {
|
|
|
DRM_ERROR("failed to allocate pages.\n");
|
|
|
return -ENOMEM;
|
|
@@ -69,8 +68,8 @@ static int lowlevel_buffer_allocate(struct drm_device *dev,
|
|
|
&buf->dma_attrs);
|
|
|
if (!buf->kvaddr) {
|
|
|
DRM_ERROR("failed to allocate buffer.\n");
|
|
|
- kfree(buf->pages);
|
|
|
- return -ENOMEM;
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto err_free;
|
|
|
}
|
|
|
|
|
|
start_addr = buf->dma_addr;
|
|
@@ -107,9 +106,9 @@ err_free_attrs:
|
|
|
dma_free_attrs(dev->dev, buf->size, buf->pages,
|
|
|
(dma_addr_t)buf->dma_addr, &buf->dma_attrs);
|
|
|
buf->dma_addr = (dma_addr_t)NULL;
|
|
|
-
|
|
|
+err_free:
|
|
|
if (!is_drm_iommu_supported(dev))
|
|
|
- kfree(buf->pages);
|
|
|
+ drm_free_large(buf->pages);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
@@ -134,7 +133,7 @@ static void lowlevel_buffer_deallocate(struct drm_device *dev,
|
|
|
if (!is_drm_iommu_supported(dev)) {
|
|
|
dma_free_attrs(dev->dev, buf->size, buf->kvaddr,
|
|
|
(dma_addr_t)buf->dma_addr, &buf->dma_attrs);
|
|
|
- kfree(buf->pages);
|
|
|
+ drm_free_large(buf->pages);
|
|
|
} else
|
|
|
dma_free_attrs(dev->dev, buf->size, buf->pages,
|
|
|
(dma_addr_t)buf->dma_addr, &buf->dma_attrs);
|