Lines Matching refs:map
109 struct rds_cong_map *map; in rds_cong_tree_walk() local
113 map = rb_entry(parent, struct rds_cong_map, m_rb_node); in rds_cong_tree_walk()
115 if (addr < map->m_addr) in rds_cong_tree_walk()
117 else if (addr > map->m_addr) in rds_cong_tree_walk()
120 return map; in rds_cong_tree_walk()
137 struct rds_cong_map *map; in rds_cong_from_addr() local
143 map = kzalloc(sizeof(struct rds_cong_map), GFP_KERNEL); in rds_cong_from_addr()
144 if (!map) in rds_cong_from_addr()
147 map->m_addr = addr; in rds_cong_from_addr()
148 init_waitqueue_head(&map->m_waitq); in rds_cong_from_addr()
149 INIT_LIST_HEAD(&map->m_conn_list); in rds_cong_from_addr()
155 map->m_page_addrs[i] = zp; in rds_cong_from_addr()
159 ret = rds_cong_tree_walk(addr, map); in rds_cong_from_addr()
163 ret = map; in rds_cong_from_addr()
164 map = NULL; in rds_cong_from_addr()
168 if (map) { in rds_cong_from_addr()
169 for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++) in rds_cong_from_addr()
170 free_page(map->m_page_addrs[i]); in rds_cong_from_addr()
171 kfree(map); in rds_cong_from_addr()
214 void rds_cong_queue_updates(struct rds_cong_map *map) in rds_cong_queue_updates() argument
221 list_for_each_entry(conn, &map->m_conn_list, c_map_item) { in rds_cong_queue_updates()
245 void rds_cong_map_updated(struct rds_cong_map *map, uint64_t portmask) in rds_cong_map_updated() argument
248 map, &map->m_addr); in rds_cong_map_updated()
251 if (waitqueue_active(&map->m_waitq)) in rds_cong_map_updated()
252 wake_up(&map->m_waitq); in rds_cong_map_updated()
291 void rds_cong_set_bit(struct rds_cong_map *map, __be16 port) in rds_cong_set_bit() argument
297 &map->m_addr, ntohs(port), map); in rds_cong_set_bit()
302 __set_bit_le(off, (void *)map->m_page_addrs[i]); in rds_cong_set_bit()
305 void rds_cong_clear_bit(struct rds_cong_map *map, __be16 port) in rds_cong_clear_bit() argument
311 &map->m_addr, ntohs(port), map); in rds_cong_clear_bit()
316 __clear_bit_le(off, (void *)map->m_page_addrs[i]); in rds_cong_clear_bit()
319 static int rds_cong_test_bit(struct rds_cong_map *map, __be16 port) in rds_cong_test_bit() argument
327 return test_bit_le(off, (void *)map->m_page_addrs[i]); in rds_cong_test_bit()
343 struct rds_cong_map *map; in rds_cong_remove_socket() local
351 map = rds_cong_tree_walk(rs->rs_bound_addr, NULL); in rds_cong_remove_socket()
354 if (map && rds_cong_test_bit(map, rs->rs_bound_port)) { in rds_cong_remove_socket()
355 rds_cong_clear_bit(map, rs->rs_bound_port); in rds_cong_remove_socket()
356 rds_cong_queue_updates(map); in rds_cong_remove_socket()
360 int rds_cong_wait(struct rds_cong_map *map, __be16 port, int nonblock, in rds_cong_wait() argument
363 if (!rds_cong_test_bit(map, port)) in rds_cong_wait()
377 if (!rds_cong_test_bit(map, port)) in rds_cong_wait()
385 rdsdebug("waiting on map %p for port %u\n", map, be16_to_cpu(port)); in rds_cong_wait()
387 return wait_event_interruptible(map->m_waitq, in rds_cong_wait()
388 !rds_cong_test_bit(map, port)); in rds_cong_wait()
394 struct rds_cong_map *map; in rds_cong_exit() local
398 map = rb_entry(node, struct rds_cong_map, m_rb_node); in rds_cong_exit()
399 rdsdebug("freeing map %p\n", map); in rds_cong_exit()
400 rb_erase(&map->m_rb_node, &rds_cong_tree); in rds_cong_exit()
401 for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++) in rds_cong_exit()
402 free_page(map->m_page_addrs[i]); in rds_cong_exit()
403 kfree(map); in rds_cong_exit()
412 struct rds_cong_map *map = conn->c_lcong; in rds_cong_update_alloc() local
415 rm = rds_message_map_pages(map->m_page_addrs, RDS_CONG_MAP_BYTES); in rds_cong_update_alloc()