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
138 int cpu_rmap_add(struct cpu_rmap *rmap, void *obj) in cpu_rmap_add() argument
142 BUG_ON(rmap->used >= rmap->size); in cpu_rmap_add()
143 index = rmap->used++; in cpu_rmap_add()
144 rmap->obj[index] = obj; in cpu_rmap_add()
155 int cpu_rmap_update(struct cpu_rmap *rmap, u16 index, in cpu_rmap_update() argument
168 if (rmap->near[cpu].index == index) { in cpu_rmap_update()
169 rmap->near[cpu].dist = CPU_RMAP_DIST_INF; in cpu_rmap_update()
174 debug_print_rmap(rmap, "after invalidating old distances"); in cpu_rmap_update()
180 rmap->near[cpu].index = index; in cpu_rmap_update()
181 rmap->near[cpu].dist = 0; in cpu_rmap_update()
186 debug_print_rmap(rmap, "after updating neighbours"); in cpu_rmap_update()
190 if (cpu_rmap_copy_neigh(rmap, cpu, in cpu_rmap_update()
193 if (cpu_rmap_copy_neigh(rmap, cpu, in cpu_rmap_update()
196 if (cpu_rmap_copy_neigh(rmap, cpu, in cpu_rmap_update()
204 debug_print_rmap(rmap, "after copying neighbours"); in cpu_rmap_update()
215 struct cpu_rmap *rmap; member
225 void free_irq_cpu_rmap(struct cpu_rmap *rmap) in free_irq_cpu_rmap() argument
230 if (!rmap) in free_irq_cpu_rmap()
233 for (index = 0; index < rmap->used; index++) { in free_irq_cpu_rmap()
234 glue = rmap->obj[index]; in free_irq_cpu_rmap()
238 cpu_rmap_put(rmap); in free_irq_cpu_rmap()
256 rc = cpu_rmap_update(glue->rmap, glue->index, mask); in irq_cpu_rmap_notify()
270 cpu_rmap_put(glue->rmap); in irq_cpu_rmap_release()
285 int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq) in irq_cpu_rmap_add() argument
294 glue->rmap = rmap; in irq_cpu_rmap_add()
295 cpu_rmap_get(rmap); in irq_cpu_rmap_add()
296 glue->index = cpu_rmap_add(rmap, glue); in irq_cpu_rmap_add()
299 cpu_rmap_put(glue->rmap); in irq_cpu_rmap_add()