diff options
-rw-r--r-- | linux-core/drmP.h | 5 | ||||
-rw-r--r-- | linux-core/drm_bo.c | 3 | ||||
-rw-r--r-- | linux-core/drm_objects.h | 2 | ||||
-rw-r--r-- | linux-core/drm_stub.c | 4 | ||||
-rw-r--r-- | shared-core/i915_dma.c | 7 |
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; |