You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'drm-intel-lru' into drm-testing
* drm-intel-lru: drm: implement helper functions for scanning lru list drm_mm: extract check_free_mm_node drm: sane naming for drm_mm.c drm: kill dead code in drm_mm.c drm: kill drm_mm_node->private drm: use list_for_each_entry in drm_mm.c
This commit is contained in:
+232
-127
File diff suppressed because it is too large
Load Diff
@@ -2633,10 +2633,8 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj, unsigned alignment)
|
||||
if (free_space != NULL) {
|
||||
obj_priv->gtt_space = drm_mm_get_block(free_space, obj->size,
|
||||
alignment);
|
||||
if (obj_priv->gtt_space != NULL) {
|
||||
obj_priv->gtt_space->private = obj;
|
||||
if (obj_priv->gtt_space != NULL)
|
||||
obj_priv->gtt_offset = obj_priv->gtt_space->start;
|
||||
}
|
||||
}
|
||||
if (obj_priv->gtt_space == NULL) {
|
||||
/* If the gtt is empty and we're still having trouble
|
||||
|
||||
@@ -476,7 +476,6 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
|
||||
++put_count;
|
||||
}
|
||||
if (bo->mem.mm_node) {
|
||||
bo->mem.mm_node->private = NULL;
|
||||
drm_mm_put_block(bo->mem.mm_node);
|
||||
bo->mem.mm_node = NULL;
|
||||
}
|
||||
@@ -670,7 +669,6 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible,
|
||||
printk(KERN_ERR TTM_PFX "Buffer eviction failed\n");
|
||||
spin_lock(&glob->lru_lock);
|
||||
if (evict_mem.mm_node) {
|
||||
evict_mem.mm_node->private = NULL;
|
||||
drm_mm_put_block(evict_mem.mm_node);
|
||||
evict_mem.mm_node = NULL;
|
||||
}
|
||||
@@ -929,8 +927,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
|
||||
mem->mm_node = node;
|
||||
mem->mem_type = mem_type;
|
||||
mem->placement = cur_flags;
|
||||
if (node)
|
||||
node->private = bo;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -973,7 +969,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
|
||||
interruptible, no_wait_reserve, no_wait_gpu);
|
||||
if (ret == 0 && mem->mm_node) {
|
||||
mem->placement = cur_flags;
|
||||
mem->mm_node->private = bo;
|
||||
return 0;
|
||||
}
|
||||
if (ret == -ERESTARTSYS)
|
||||
@@ -1029,7 +1024,6 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
|
||||
out_unlock:
|
||||
if (ret && mem.mm_node) {
|
||||
spin_lock(&glob->lru_lock);
|
||||
mem.mm_node->private = NULL;
|
||||
drm_mm_put_block(mem.mm_node);
|
||||
spin_unlock(&glob->lru_lock);
|
||||
}
|
||||
|
||||
@@ -353,8 +353,6 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo,
|
||||
fbo->vm_node = NULL;
|
||||
|
||||
fbo->sync_obj = driver->sync_obj_ref(bo->sync_obj);
|
||||
if (fbo->mem.mm_node)
|
||||
fbo->mem.mm_node->private = (void *)fbo;
|
||||
kref_init(&fbo->list_kref);
|
||||
kref_init(&fbo->kref);
|
||||
fbo->destroy = &ttm_transfered_destroy;
|
||||
|
||||
+21
-6
@@ -42,21 +42,31 @@
|
||||
#endif
|
||||
|
||||
struct drm_mm_node {
|
||||
struct list_head fl_entry;
|
||||
struct list_head ml_entry;
|
||||
int free;
|
||||
struct list_head free_stack;
|
||||
struct list_head node_list;
|
||||
unsigned free : 1;
|
||||
unsigned scanned_block : 1;
|
||||
unsigned scanned_prev_free : 1;
|
||||
unsigned scanned_next_free : 1;
|
||||
unsigned long start;
|
||||
unsigned long size;
|
||||
struct drm_mm *mm;
|
||||
void *private;
|
||||
};
|
||||
|
||||
struct drm_mm {
|
||||
struct list_head fl_entry;
|
||||
struct list_head ml_entry;
|
||||
/* List of free memory blocks, most recently freed ordered. */
|
||||
struct list_head free_stack;
|
||||
/* List of all memory nodes, ordered according to the (increasing) start
|
||||
* address of the memory node. */
|
||||
struct list_head node_list;
|
||||
struct list_head unused_nodes;
|
||||
int num_unused;
|
||||
spinlock_t unused_lock;
|
||||
unsigned scan_alignment;
|
||||
unsigned long scan_size;
|
||||
unsigned long scan_hit_start;
|
||||
unsigned scan_hit_size;
|
||||
unsigned scanned_blocks;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -133,6 +143,11 @@ static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
|
||||
return block->mm;
|
||||
}
|
||||
|
||||
void drm_mm_init_scan(struct drm_mm *mm, unsigned long size,
|
||||
unsigned alignment);
|
||||
int drm_mm_scan_add_block(struct drm_mm_node *node);
|
||||
int drm_mm_scan_remove_block(struct drm_mm_node *node);
|
||||
|
||||
extern void drm_mm_debug_table(struct drm_mm *mm, const char *prefix);
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm);
|
||||
|
||||
Reference in New Issue
Block a user