Lines Matching full:node

34 static void node_free(struct intel_gt_buffer_pool_node *node)  in node_free()  argument
36 i915_gem_object_put(node->obj); in node_free()
37 i915_active_fini(&node->active); in node_free()
38 kfree_rcu(node, rcu); in node_free()
43 struct intel_gt_buffer_pool_node *node, *stale = NULL; in pool_free_older_than() local
61 node = list_entry(pos, typeof(*node), link); in pool_free_older_than()
63 age = READ_ONCE(node->age); in pool_free_older_than()
67 /* Check we are the first to claim this node */ in pool_free_older_than()
68 if (!xchg(&node->age, 0)) in pool_free_older_than()
71 node->free = stale; in pool_free_older_than()
72 stale = node; in pool_free_older_than()
83 while ((node = stale)) { in pool_free_older_than()
85 node_free(node); in pool_free_older_than()
103 struct intel_gt_buffer_pool_node *node = in pool_active() local
104 container_of(ref, typeof(*node), active); in pool_active()
105 struct dma_resv *resv = node->obj->base.resv; in pool_active()
113 err = i915_gem_object_pin_pages(node->obj); in pool_active()
118 i915_gem_object_make_unshrinkable(node->obj); in pool_active()
126 struct intel_gt_buffer_pool_node *node = in pool_retire() local
127 container_of(ref, typeof(*node), active); in pool_retire()
128 struct intel_gt_buffer_pool *pool = node->pool; in pool_retire()
129 struct list_head *list = bucket_for_size(pool, node->obj->base.size); in pool_retire()
132 i915_gem_object_unpin_pages(node->obj); in pool_retire()
135 i915_gem_object_make_purgeable(node->obj); in pool_retire()
137 GEM_BUG_ON(node->age); in pool_retire()
139 list_add_rcu(&node->link, list); in pool_retire()
140 WRITE_ONCE(node->age, jiffies ?: 1); /* 0 reserved for active nodes */ in pool_retire()
151 struct intel_gt_buffer_pool_node *node; in node_create() local
154 node = kmalloc(sizeof(*node), in node_create()
156 if (!node) in node_create()
159 node->age = 0; in node_create()
160 node->pool = pool; in node_create()
161 i915_active_init(&node->active, pool_active, pool_retire); in node_create()
165 i915_active_fini(&node->active); in node_create()
166 kfree(node); in node_create()
172 node->obj = obj; in node_create()
173 return node; in node_create()
180 struct intel_gt_buffer_pool_node *node; in intel_gt_get_buffer_pool() local
188 list_for_each_entry_rcu(node, list, link) { in intel_gt_get_buffer_pool()
191 if (node->obj->base.size < size) in intel_gt_get_buffer_pool()
194 age = READ_ONCE(node->age); in intel_gt_get_buffer_pool()
198 if (cmpxchg(&node->age, age, 0) == age) { in intel_gt_get_buffer_pool()
200 list_del_rcu(&node->link); in intel_gt_get_buffer_pool()
207 if (&node->link == list) { in intel_gt_get_buffer_pool()
208 node = node_create(pool, size); in intel_gt_get_buffer_pool()
209 if (IS_ERR(node)) in intel_gt_get_buffer_pool()
210 return node; in intel_gt_get_buffer_pool()
213 ret = i915_active_acquire(&node->active); in intel_gt_get_buffer_pool()
215 node_free(node); in intel_gt_get_buffer_pool()
219 return node; in intel_gt_get_buffer_pool()