aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_gem.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_gem.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_gem.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
index 95dbce286a41..e4849413ee80 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
@@ -233,11 +233,7 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj)
233 233
234 WARN_ON(omap_obj->pages); 234 WARN_ON(omap_obj->pages);
235 235
236 /* TODO: __GFP_DMA32 .. but somehow GFP_HIGHMEM is coming from the 236 pages = drm_gem_get_pages(obj);
237 * mapping_gfp_mask(mapping) which conflicts w/ GFP_DMA32.. probably
238 * we actually want CMA memory for it all anyways..
239 */
240 pages = drm_gem_get_pages(obj, GFP_KERNEL);
241 if (IS_ERR(pages)) { 237 if (IS_ERR(pages)) {
242 dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages)); 238 dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages));
243 return PTR_ERR(pages); 239 return PTR_ERR(pages);
@@ -791,7 +787,7 @@ int omap_gem_get_paddr(struct drm_gem_object *obj,
791 omap_obj->paddr = tiler_ssptr(block); 787 omap_obj->paddr = tiler_ssptr(block);
792 omap_obj->block = block; 788 omap_obj->block = block;
793 789
794 DBG("got paddr: %08x", omap_obj->paddr); 790 DBG("got paddr: %pad", &omap_obj->paddr);
795 } 791 }
796 792
797 omap_obj->paddr_cnt++; 793 omap_obj->paddr_cnt++;
@@ -985,9 +981,9 @@ void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
985 981
986 off = drm_vma_node_start(&obj->vma_node); 982 off = drm_vma_node_start(&obj->vma_node);
987 983
988 seq_printf(m, "%08x: %2d (%2d) %08llx %08Zx (%2d) %p %4d", 984 seq_printf(m, "%08x: %2d (%2d) %08llx %pad (%2d) %p %4d",
989 omap_obj->flags, obj->name, obj->refcount.refcount.counter, 985 omap_obj->flags, obj->name, obj->refcount.refcount.counter,
990 off, omap_obj->paddr, omap_obj->paddr_cnt, 986 off, &omap_obj->paddr, omap_obj->paddr_cnt,
991 omap_obj->vaddr, omap_obj->roll); 987 omap_obj->vaddr, omap_obj->roll);
992 988
993 if (omap_obj->flags & OMAP_BO_TILED) { 989 if (omap_obj->flags & OMAP_BO_TILED) {
@@ -1183,9 +1179,7 @@ int omap_gem_op_sync(struct drm_gem_object *obj, enum omap_gem_op op)
1183 } 1179 }
1184 } 1180 }
1185 spin_unlock(&sync_lock); 1181 spin_unlock(&sync_lock);
1186 1182 kfree(waiter);
1187 if (waiter)
1188 kfree(waiter);
1189 } 1183 }
1190 return ret; 1184 return ret;
1191} 1185}
@@ -1347,6 +1341,7 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,
1347 struct omap_drm_private *priv = dev->dev_private; 1341 struct omap_drm_private *priv = dev->dev_private;
1348 struct omap_gem_object *omap_obj; 1342 struct omap_gem_object *omap_obj;
1349 struct drm_gem_object *obj = NULL; 1343 struct drm_gem_object *obj = NULL;
1344 struct address_space *mapping;
1350 size_t size; 1345 size_t size;
1351 int ret; 1346 int ret;
1352 1347
@@ -1404,14 +1399,16 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,
1404 omap_obj->height = gsize.tiled.height; 1399 omap_obj->height = gsize.tiled.height;
1405 } 1400 }
1406 1401
1407 ret = 0; 1402 if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM)) {
1408 if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM))
1409 drm_gem_private_object_init(dev, obj, size); 1403 drm_gem_private_object_init(dev, obj, size);
1410 else 1404 } else {
1411 ret = drm_gem_object_init(dev, obj, size); 1405 ret = drm_gem_object_init(dev, obj, size);
1406 if (ret)
1407 goto fail;
1412 1408
1413 if (ret) 1409 mapping = file_inode(obj->filp)->i_mapping;
1414 goto fail; 1410 mapping_set_gfp_mask(mapping, GFP_USER | __GFP_DMA32);
1411 }
1415 1412
1416 return obj; 1413 return obj;
1417 1414
@@ -1467,8 +1464,8 @@ void omap_gem_init(struct drm_device *dev)
1467 entry->paddr = tiler_ssptr(block); 1464 entry->paddr = tiler_ssptr(block);
1468 entry->block = block; 1465 entry->block = block;
1469 1466
1470 DBG("%d:%d: %dx%d: paddr=%08x stride=%d", i, j, w, h, 1467 DBG("%d:%d: %dx%d: paddr=%pad stride=%d", i, j, w, h,
1471 entry->paddr, 1468 &entry->paddr,
1472 usergart[i].stride_pfn << PAGE_SHIFT); 1469 usergart[i].stride_pfn << PAGE_SHIFT);
1473 } 1470 }
1474 } 1471 }