diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_gem.c')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem.c | 26 | 
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c index 505dee0db973..4a90c690f09e 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem.c +++ b/drivers/gpu/drm/omapdrm/omap_gem.c @@ -336,8 +336,10 @@ static void omap_gem_detach_pages(struct drm_gem_object *obj)  	if (omap_obj->flags & (OMAP_BO_WC|OMAP_BO_UNCACHED)) {  		int i, npages = obj->size >> PAGE_SHIFT;  		for (i = 0; i < npages; i++) { -			dma_unmap_page(obj->dev->dev, omap_obj->addrs[i], -					PAGE_SIZE, DMA_BIDIRECTIONAL); +			if (omap_obj->addrs[i]) +				dma_unmap_page(obj->dev->dev, +					       omap_obj->addrs[i], +					       PAGE_SIZE, DMA_BIDIRECTIONAL);  		}  	} @@ -396,8 +398,7 @@ static int fault_1d(struct drm_gem_object *obj,  	pgoff_t pgoff;  	/* We don't use vmf->pgoff since that has the fake offset: */ -	pgoff = ((unsigned long)vmf->virtual_address - -			vma->vm_start) >> PAGE_SHIFT; +	pgoff = (vmf->address - vma->vm_start) >> PAGE_SHIFT;  	if (omap_obj->pages) {  		omap_gem_cpu_sync(obj, pgoff); @@ -407,11 +408,10 @@ static int fault_1d(struct drm_gem_object *obj,  		pfn = (omap_obj->paddr >> PAGE_SHIFT) + pgoff;  	} -	VERB("Inserting %p pfn %lx, pa %lx", vmf->virtual_address, +	VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address,  			pfn, pfn << PAGE_SHIFT); -	return vm_insert_mixed(vma, (unsigned long)vmf->virtual_address, -			__pfn_to_pfn_t(pfn, PFN_DEV)); +	return vm_insert_mixed(vma, vmf->address, __pfn_to_pfn_t(pfn, PFN_DEV));  }  /* Special handling for the case of faulting in 2d tiled buffers */ @@ -425,7 +425,7 @@ static int fault_2d(struct drm_gem_object *obj,  	struct page *pages[64];  /* XXX is this too much to have on stack? */  	unsigned long pfn;  	pgoff_t pgoff, base_pgoff; -	void __user *vaddr; +	unsigned long vaddr;  	int i, ret, slots;  	/* @@ -445,8 +445,7 @@ static int fault_2d(struct drm_gem_object *obj,  	const int m = 1 + ((omap_obj->width << fmt) / PAGE_SIZE);  	/* We don't use vmf->pgoff since that has the fake offset: */ -	pgoff = ((unsigned long)vmf->virtual_address - -			vma->vm_start) >> PAGE_SHIFT; +	pgoff = (vmf->address - vma->vm_start) >> PAGE_SHIFT;  	/*  	 * Actual address we start mapping at is rounded down to previous slot @@ -457,7 +456,7 @@ static int fault_2d(struct drm_gem_object *obj,  	/* figure out buffer width in slots */  	slots = omap_obj->width >> priv->usergart[fmt].slot_shift; -	vaddr = vmf->virtual_address - ((pgoff - base_pgoff) << PAGE_SHIFT); +	vaddr = vmf->address - ((pgoff - base_pgoff) << PAGE_SHIFT);  	entry = &priv->usergart[fmt].entry[priv->usergart[fmt].last]; @@ -501,12 +500,11 @@ static int fault_2d(struct drm_gem_object *obj,  	pfn = entry->paddr >> PAGE_SHIFT; -	VERB("Inserting %p pfn %lx, pa %lx", vmf->virtual_address, +	VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address,  			pfn, pfn << PAGE_SHIFT);  	for (i = n; i > 0; i--) { -		vm_insert_mixed(vma, (unsigned long)vaddr, -				__pfn_to_pfn_t(pfn, PFN_DEV)); +		vm_insert_mixed(vma, vaddr, __pfn_to_pfn_t(pfn, PFN_DEV));  		pfn += priv->usergart[fmt].stride_pfn;  		vaddr += PAGE_SIZE * m;  	}  |