Lines Matching refs:map
109 struct rds_cong_map *map; in rds_cong_tree_walk() local
115 map = rb_entry(parent, struct rds_cong_map, m_rb_node); in rds_cong_tree_walk()
117 diff = rds_addr_cmp(addr, &map->m_addr); in rds_cong_tree_walk()
123 return map; in rds_cong_tree_walk()
140 struct rds_cong_map *map; in rds_cong_from_addr() local
146 map = kzalloc(sizeof(struct rds_cong_map), GFP_KERNEL); in rds_cong_from_addr()
147 if (!map) in rds_cong_from_addr()
150 map->m_addr = *addr; in rds_cong_from_addr()
151 init_waitqueue_head(&map->m_waitq); in rds_cong_from_addr()
152 INIT_LIST_HEAD(&map->m_conn_list); in rds_cong_from_addr()
158 map->m_page_addrs[i] = zp; in rds_cong_from_addr()
162 ret = rds_cong_tree_walk(addr, map); in rds_cong_from_addr()
166 ret = map; in rds_cong_from_addr()
167 map = NULL; in rds_cong_from_addr()
171 if (map) { in rds_cong_from_addr()
172 for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++) in rds_cong_from_addr()
173 free_page(map->m_page_addrs[i]); in rds_cong_from_addr()
174 kfree(map); in rds_cong_from_addr()
217 void rds_cong_queue_updates(struct rds_cong_map *map) in rds_cong_queue_updates() argument
224 list_for_each_entry(conn, &map->m_conn_list, c_map_item) { in rds_cong_queue_updates()
253 void rds_cong_map_updated(struct rds_cong_map *map, uint64_t portmask) in rds_cong_map_updated() argument
256 map, &map->m_addr); in rds_cong_map_updated()
259 if (waitqueue_active(&map->m_waitq)) in rds_cong_map_updated()
260 wake_up(&map->m_waitq); in rds_cong_map_updated()
299 void rds_cong_set_bit(struct rds_cong_map *map, __be16 port) in rds_cong_set_bit() argument
305 &map->m_addr, ntohs(port), map); in rds_cong_set_bit()
310 set_bit_le(off, (void *)map->m_page_addrs[i]); in rds_cong_set_bit()
313 void rds_cong_clear_bit(struct rds_cong_map *map, __be16 port) in rds_cong_clear_bit() argument
319 &map->m_addr, ntohs(port), map); in rds_cong_clear_bit()
324 clear_bit_le(off, (void *)map->m_page_addrs[i]); in rds_cong_clear_bit()
327 static int rds_cong_test_bit(struct rds_cong_map *map, __be16 port) in rds_cong_test_bit() argument
335 return test_bit_le(off, (void *)map->m_page_addrs[i]); in rds_cong_test_bit()
351 struct rds_cong_map *map; in rds_cong_remove_socket() local
359 map = rds_cong_tree_walk(&rs->rs_bound_addr, NULL); in rds_cong_remove_socket()
362 if (map && rds_cong_test_bit(map, rs->rs_bound_port)) { in rds_cong_remove_socket()
363 rds_cong_clear_bit(map, rs->rs_bound_port); in rds_cong_remove_socket()
364 rds_cong_queue_updates(map); in rds_cong_remove_socket()
368 int rds_cong_wait(struct rds_cong_map *map, __be16 port, int nonblock, in rds_cong_wait() argument
371 if (!rds_cong_test_bit(map, port)) in rds_cong_wait()
385 if (!rds_cong_test_bit(map, port)) in rds_cong_wait()
393 rdsdebug("waiting on map %p for port %u\n", map, be16_to_cpu(port)); in rds_cong_wait()
395 return wait_event_interruptible(map->m_waitq, in rds_cong_wait()
396 !rds_cong_test_bit(map, port)); in rds_cong_wait()
402 struct rds_cong_map *map; in rds_cong_exit() local
406 map = rb_entry(node, struct rds_cong_map, m_rb_node); in rds_cong_exit()
407 rdsdebug("freeing map %p\n", map); in rds_cong_exit()
408 rb_erase(&map->m_rb_node, &rds_cong_tree); in rds_cong_exit()
409 for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++) in rds_cong_exit()
410 free_page(map->m_page_addrs[i]); in rds_cong_exit()
411 kfree(map); in rds_cong_exit()
420 struct rds_cong_map *map = conn->c_lcong; in rds_cong_update_alloc() local
423 rm = rds_message_map_pages(map->m_page_addrs, RDS_CONG_MAP_BYTES); in rds_cong_update_alloc()