diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_gem.c')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem.c | 33 | 
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)  	WARN_ON(omap_obj->pages); -	/* TODO: __GFP_DMA32 .. but somehow GFP_HIGHMEM is coming from the -	 * mapping_gfp_mask(mapping) which conflicts w/ GFP_DMA32.. probably -	 * we actually want CMA memory for it all anyways.. -	 */ -	pages = drm_gem_get_pages(obj, GFP_KERNEL); +	pages = drm_gem_get_pages(obj);  	if (IS_ERR(pages)) {  		dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages));  		return PTR_ERR(pages); @@ -791,7 +787,7 @@ int omap_gem_get_paddr(struct drm_gem_object *obj,  			omap_obj->paddr = tiler_ssptr(block);  			omap_obj->block = block; -			DBG("got paddr: %08x", omap_obj->paddr); +			DBG("got paddr: %pad", &omap_obj->paddr);  		}  		omap_obj->paddr_cnt++; @@ -985,9 +981,9 @@ void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m)  	off = drm_vma_node_start(&obj->vma_node); -	seq_printf(m, "%08x: %2d (%2d) %08llx %08Zx (%2d) %p %4d", +	seq_printf(m, "%08x: %2d (%2d) %08llx %pad (%2d) %p %4d",  			omap_obj->flags, obj->name, obj->refcount.refcount.counter, -			off, omap_obj->paddr, omap_obj->paddr_cnt, +			off, &omap_obj->paddr, omap_obj->paddr_cnt,  			omap_obj->vaddr, omap_obj->roll);  	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)  			}  		}  		spin_unlock(&sync_lock); - -		if (waiter) -			kfree(waiter); +		kfree(waiter);  	}  	return ret;  } @@ -1347,6 +1341,7 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,  	struct omap_drm_private *priv = dev->dev_private;  	struct omap_gem_object *omap_obj;  	struct drm_gem_object *obj = NULL; +	struct address_space *mapping;  	size_t size;  	int ret; @@ -1404,14 +1399,16 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,  		omap_obj->height = gsize.tiled.height;  	} -	ret = 0; -	if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM)) +	if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM)) {  		drm_gem_private_object_init(dev, obj, size); -	else +	} else {  		ret = drm_gem_object_init(dev, obj, size); +		if (ret) +			goto fail; -	if (ret) -		goto fail; +		mapping = file_inode(obj->filp)->i_mapping; +		mapping_set_gfp_mask(mapping, GFP_USER | __GFP_DMA32); +	}  	return obj; @@ -1467,8 +1464,8 @@ void omap_gem_init(struct drm_device *dev)  			entry->paddr = tiler_ssptr(block);  			entry->block = block; -			DBG("%d:%d: %dx%d: paddr=%08x stride=%d", i, j, w, h, -					entry->paddr, +			DBG("%d:%d: %dx%d: paddr=%pad stride=%d", i, j, w, h, +					&entry->paddr,  					usergart[i].stride_pfn << PAGE_SHIFT);  		}  	}  |