Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4370 → Rev 4371

/drivers/video/drm/i915/i915_gem_execbuffer.c
37,7 → 37,6
#define I915_EXEC_IS_PINNED (1<<10)
#define I915_EXEC_VEBOX (4<<0)
 
#define wmb() asm volatile ("sfence")
 
struct drm_i915_gem_object *get_fb_obj();
 
206,6 → 205,56
}
 
static int
relocate_entry_cpu(struct drm_i915_gem_object *obj,
struct drm_i915_gem_relocation_entry *reloc)
{
uint32_t page_offset = offset_in_page(reloc->offset);
char *vaddr;
int ret = -EINVAL;
 
ret = i915_gem_object_set_to_cpu_domain(obj, 1);
if (ret)
return ret;
 
vaddr = (char *)MapIoMem((addr_t)i915_gem_object_get_page(obj,
reloc->offset >> PAGE_SHIFT), 4096, 3);
*(uint32_t *)(vaddr + page_offset) = reloc->delta;
FreeKernelSpace(vaddr);
 
return 0;
}
 
static int
relocate_entry_gtt(struct drm_i915_gem_object *obj,
struct drm_i915_gem_relocation_entry *reloc)
{
struct drm_device *dev = obj->base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t __iomem *reloc_entry;
void __iomem *reloc_page;
int ret = -EINVAL;
 
ret = i915_gem_object_set_to_gtt_domain(obj, true);
if (ret)
return ret;
 
ret = i915_gem_object_put_fence(obj);
if (ret)
return ret;
 
/* Map the page containing the relocation we're going to perform. */
reloc->offset += i915_gem_obj_ggtt_offset(obj);
reloc_page = (void*)MapIoMem(dev_priv->gtt.mappable_base +
(reloc->offset & PAGE_MASK), 4096, 0x18|3);
reloc_entry = (uint32_t __iomem *)
(reloc_page + offset_in_page(reloc->offset));
iowrite32(reloc->delta, reloc_entry);
FreeKernelSpace(reloc_page);
 
return 0;
}
 
static int
i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
struct eb_objects *eb,
struct drm_i915_gem_relocation_entry *reloc,
287,40 → 336,14
/* We can't wait for rendering with pagefaults disabled */
 
reloc->delta += target_offset;
if (use_cpu_reloc(obj)) {
uint32_t page_offset = reloc->offset & ~PAGE_MASK;
char *vaddr;
if (use_cpu_reloc(obj))
ret = relocate_entry_cpu(obj, reloc);
else
ret = relocate_entry_gtt(obj, reloc);
 
ret = i915_gem_object_set_to_cpu_domain(obj, 1);
if (ret)
return ret;
 
vaddr = (char *)MapIoMem((addr_t)i915_gem_object_get_page(obj,
reloc->offset >> PAGE_SHIFT), 4096, 3);
*(uint32_t *)(vaddr + page_offset) = reloc->delta;
FreeKernelSpace(vaddr);
} else {
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t __iomem *reloc_entry;
void __iomem *reloc_page;
 
ret = i915_gem_object_set_to_gtt_domain(obj, true);
if (ret)
return ret;
 
ret = i915_gem_object_put_fence(obj);
if (ret)
return ret;
 
/* Map the page containing the relocation we're going to perform. */
reloc->offset += i915_gem_obj_ggtt_offset(obj);
reloc_page = (void*)MapIoMem(reloc->offset & PAGE_MASK, 4096, 3);
reloc_entry = (uint32_t __iomem *)
(reloc_page + (reloc->offset & ~PAGE_MASK));
iowrite32(reloc->delta, reloc_entry);
FreeKernelSpace(reloc_page);
}
 
/* and update the user's relocation entry */
reloc->presumed_offset = target_offset;