|
@@ -264,6 +264,19 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj)
|
|
|
for (i = 0; i < npages; i++) {
|
|
|
addrs[i] = dma_map_page(dev->dev, pages[i],
|
|
|
0, PAGE_SIZE, DMA_BIDIRECTIONAL);
|
|
|
+
|
|
|
+ if (dma_mapping_error(dev->dev, addrs[i])) {
|
|
|
+ dev_warn(dev->dev,
|
|
|
+ "%s: failed to map page\n", __func__);
|
|
|
+
|
|
|
+ for (i = i - 1; i >= 0; --i) {
|
|
|
+ dma_unmap_page(dev->dev, addrs[i],
|
|
|
+ PAGE_SIZE, DMA_BIDIRECTIONAL);
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto free_addrs;
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
addrs = kzalloc(npages * sizeof(*addrs), GFP_KERNEL);
|
|
@@ -278,6 +291,8 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj)
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
+free_addrs:
|
|
|
+ kfree(addrs);
|
|
|
free_pages:
|
|
|
drm_gem_put_pages(obj, pages, true, false);
|
|
|
|