Lines Matching refs:rmap

27 	struct cpu_rmap *rmap;  in alloc_cpu_rmap()  local
39 rmap = kzalloc(obj_offset + size * sizeof(rmap->obj[0]), flags); in alloc_cpu_rmap()
40 if (!rmap) in alloc_cpu_rmap()
43 kref_init(&rmap->refcount); in alloc_cpu_rmap()
44 rmap->obj = (void **)((char *)rmap + obj_offset); in alloc_cpu_rmap()
53 rmap->near[cpu].index = cpu % size; in alloc_cpu_rmap()
54 rmap->near[cpu].dist = CPU_RMAP_DIST_INF; in alloc_cpu_rmap()
57 rmap->size = size; in alloc_cpu_rmap()
58 return rmap; in alloc_cpu_rmap()
68 struct cpu_rmap *rmap = container_of(ref, struct cpu_rmap, refcount); in cpu_rmap_release() local
69 kfree(rmap); in cpu_rmap_release()
76 static inline void cpu_rmap_get(struct cpu_rmap *rmap) in cpu_rmap_get() argument
78 kref_get(&rmap->refcount); in cpu_rmap_get()
85 int cpu_rmap_put(struct cpu_rmap *rmap) in cpu_rmap_put() argument
87 return kref_put(&rmap->refcount, cpu_rmap_release); in cpu_rmap_put()
94 static bool cpu_rmap_copy_neigh(struct cpu_rmap *rmap, unsigned int cpu, in cpu_rmap_copy_neigh() argument
100 if (rmap->near[cpu].dist > dist && in cpu_rmap_copy_neigh()
101 rmap->near[neigh].dist <= dist) { in cpu_rmap_copy_neigh()
102 rmap->near[cpu].index = rmap->near[neigh].index; in cpu_rmap_copy_neigh()
103 rmap->near[cpu].dist = dist; in cpu_rmap_copy_neigh()
111 static void debug_print_rmap(const struct cpu_rmap *rmap, const char *prefix) in debug_print_rmap() argument
116 pr_info("cpu_rmap %p, %s:\n", rmap, prefix); in debug_print_rmap()
119 index = rmap->near[cpu].index; in debug_print_rmap()
121 cpu, index, rmap->near[cpu].dist); in debug_print_rmap()
126 debug_print_rmap(const struct cpu_rmap *rmap, const char *prefix) in debug_print_rmap() argument
131 static int get_free_index(struct cpu_rmap *rmap) in get_free_index() argument
135 for (i = 0; i < rmap->size; i++) in get_free_index()
136 if (!rmap->obj[i]) in get_free_index()
149 int cpu_rmap_add(struct cpu_rmap *rmap, void *obj) in cpu_rmap_add() argument
151 int index = get_free_index(rmap); in cpu_rmap_add()
156 rmap->obj[index] = obj; in cpu_rmap_add()
167 int cpu_rmap_update(struct cpu_rmap *rmap, u16 index, in cpu_rmap_update() argument
180 if (rmap->near[cpu].index == index) { in cpu_rmap_update()
181 rmap->near[cpu].dist = CPU_RMAP_DIST_INF; in cpu_rmap_update()
186 debug_print_rmap(rmap, "after invalidating old distances"); in cpu_rmap_update()
192 rmap->near[cpu].index = index; in cpu_rmap_update()
193 rmap->near[cpu].dist = 0; in cpu_rmap_update()
198 debug_print_rmap(rmap, "after updating neighbours"); in cpu_rmap_update()
202 if (cpu_rmap_copy_neigh(rmap, cpu, in cpu_rmap_update()
205 if (cpu_rmap_copy_neigh(rmap, cpu, in cpu_rmap_update()
208 if (cpu_rmap_copy_neigh(rmap, cpu, in cpu_rmap_update()
216 debug_print_rmap(rmap, "after copying neighbours"); in cpu_rmap_update()
227 struct cpu_rmap *rmap; member
237 void free_irq_cpu_rmap(struct cpu_rmap *rmap) in free_irq_cpu_rmap() argument
242 if (!rmap) in free_irq_cpu_rmap()
245 for (index = 0; index < rmap->size; index++) { in free_irq_cpu_rmap()
246 glue = rmap->obj[index]; in free_irq_cpu_rmap()
251 cpu_rmap_put(rmap); in free_irq_cpu_rmap()
269 rc = cpu_rmap_update(glue->rmap, glue->index, mask); in irq_cpu_rmap_notify()
283 glue->rmap->obj[glue->index] = NULL; in irq_cpu_rmap_release()
284 cpu_rmap_put(glue->rmap); in irq_cpu_rmap_release()
293 int irq_cpu_rmap_remove(struct cpu_rmap *rmap, int irq) in irq_cpu_rmap_remove() argument
310 int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq) in irq_cpu_rmap_add() argument
319 glue->rmap = rmap; in irq_cpu_rmap_add()
320 cpu_rmap_get(rmap); in irq_cpu_rmap_add()
321 rc = cpu_rmap_add(rmap, glue); in irq_cpu_rmap_add()
333 rmap->obj[glue->index] = NULL; in irq_cpu_rmap_add()
335 cpu_rmap_put(glue->rmap); in irq_cpu_rmap_add()