summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux-core/drmP.h5
-rw-r--r--linux-core/drm_bo.c3
-rw-r--r--linux-core/drm_objects.h2
-rw-r--r--linux-core/drm_stub.c4
-rw-r--r--shared-core/i915_dma.c7
5 files changed, 17 insertions, 4 deletions
diff --git a/linux-core/drmP.h b/linux-core/drmP.h
index 1a0a5659..47974856 100644
--- a/linux-core/drmP.h
+++ b/linux-core/drmP.h
@@ -761,9 +761,10 @@ struct drm_driver {
};
#define DRM_MINOR_UNASSIGNED 0
-#define DRM_MINOR_CONTROL 1
-#define DRM_MINOR_LEGACY 2
+#define DRM_MINOR_LEGACY 1
+#define DRM_MINOR_CONTROL 2
#define DRM_MINOR_RENDER 3
+
/**
* DRM minor structure. This structure represents a drm minor number.
*/
diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c
index b6115e8d..c41f726c 100644
--- a/linux-core/drm_bo.c
+++ b/linux-core/drm_bo.c
@@ -1065,7 +1065,7 @@ static int drm_bo_busy(struct drm_buffer_object *bo)
return 0;
}
-static int drm_bo_evict_cached(struct drm_buffer_object *bo)
+int drm_bo_evict_cached(struct drm_buffer_object *bo)
{
int ret = 0;
@@ -1075,6 +1075,7 @@ static int drm_bo_evict_cached(struct drm_buffer_object *bo)
return ret;
}
+EXPORT_SYMBOL(drm_bo_evict_cached);
/*
* Wait until a buffer is unmapped.
*/
diff --git a/linux-core/drm_objects.h b/linux-core/drm_objects.h
index 802e72cf..8f81b665 100644
--- a/linux-core/drm_objects.h
+++ b/linux-core/drm_objects.h
@@ -700,7 +700,7 @@ extern int drm_bo_do_validate(struct drm_buffer_object *bo,
uint64_t flags, uint64_t mask, uint32_t hint,
uint32_t fence_class,
struct drm_bo_info_rep *rep);
-
+extern int drm_bo_evict_cached(struct drm_buffer_object *bo);
/*
* Buffer object memory move- and map helpers.
* drm_bo_move.c
diff --git a/linux-core/drm_stub.c b/linux-core/drm_stub.c
index 6856075b..ba13e5e5 100644
--- a/linux-core/drm_stub.c
+++ b/linux-core/drm_stub.c
@@ -355,6 +355,10 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
if ((ret = dev->driver->load(dev, ent->driver_data)))
goto err_g5;
+ if (dev->driver->load)
+ if ((ret = dev->driver->load(dev, ent->driver_data)))
+ goto err_g4;
+
DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
driver->name, driver->major, driver->minor, driver->patchlevel,
driver->date, dev->primary->index);
diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c
index 13332d24..8237e145 100644
--- a/shared-core/i915_dma.c
+++ b/shared-core/i915_dma.c
@@ -805,6 +805,7 @@ struct i915_relocatee_info {
struct drm_bo_kmap_obj kmap;
int is_iomem;
int idle;
+ int evicted;
};
struct drm_i915_validate_buffer {
@@ -877,6 +878,12 @@ int i915_apply_reloc(struct drm_file *file_priv, int num_buffers,
relocatee->data_page = drm_bmo_virtual(&relocatee->kmap,
&relocatee->is_iomem);
relocatee->page_offset = (relocatee->offset & PAGE_MASK);
+
+ if (!relocatee->evicted &&
+ relocatee->buf->mem.flags & DRM_BO_FLAG_CACHED_MAPPED) {
+ drm_bo_evict_cached(relocatee->buf);
+ relocatee->evicted = 1;
+ }
}
val = buffers[buf_index].buffer->offset;