diff options
Diffstat (limited to 'net/tipc/bcast.h')
| -rw-r--r-- | net/tipc/bcast.h | 117 | 
1 files changed, 7 insertions, 110 deletions
diff --git a/net/tipc/bcast.h b/net/tipc/bcast.h index 4c1771e95c9..e8c2b81658c 100644 --- a/net/tipc/bcast.h +++ b/net/tipc/bcast.h @@ -72,41 +72,11 @@ struct tipc_node;  extern const char tipc_bclink_name[]; +void tipc_nmap_add(struct tipc_node_map *nm_ptr, u32 node); +void tipc_nmap_remove(struct tipc_node_map *nm_ptr, u32 node);  /** - * nmap_add - add a node to a node map - */ - -static inline void tipc_nmap_add(struct tipc_node_map *nm_ptr, u32 node) -{ -	int n = tipc_node(node); -	int w = n / WSIZE; -	u32 mask = (1 << (n % WSIZE)); - -	if ((nm_ptr->map[w] & mask) == 0) { -		nm_ptr->count++; -		nm_ptr->map[w] |= mask; -	} -} - -/** - * nmap_remove - remove a node from a node map - */ - -static inline void tipc_nmap_remove(struct tipc_node_map *nm_ptr, u32 node) -{ -	int n = tipc_node(node); -	int w = n / WSIZE; -	u32 mask = (1 << (n % WSIZE)); - -	if ((nm_ptr->map[w] & mask) != 0) { -		nm_ptr->map[w] &= ~mask; -		nm_ptr->count--; -	} -} - -/** - * nmap_equal - test for equality of node maps + * tipc_nmap_equal - test for equality of node maps   */  static inline int tipc_nmap_equal(struct tipc_node_map *nm_a, struct tipc_node_map *nm_b) @@ -114,84 +84,11 @@ static inline int tipc_nmap_equal(struct tipc_node_map *nm_a, struct tipc_node_m  	return !memcmp(nm_a, nm_b, sizeof(*nm_a));  } -/** - * nmap_diff - find differences between node maps - * @nm_a: input node map A - * @nm_b: input node map B - * @nm_diff: output node map A-B (i.e. nodes of A that are not in B) - */ - -static inline void tipc_nmap_diff(struct tipc_node_map *nm_a, struct tipc_node_map *nm_b, -				  struct tipc_node_map *nm_diff) -{ -	int stop = ARRAY_SIZE(nm_a->map); -	int w; -	int b; -	u32 map; - -	memset(nm_diff, 0, sizeof(*nm_diff)); -	for (w = 0; w < stop; w++) { -		map = nm_a->map[w] ^ (nm_a->map[w] & nm_b->map[w]); -		nm_diff->map[w] = map; -		if (map != 0) { -			for (b = 0 ; b < WSIZE; b++) { -				if (map & (1 << b)) -					nm_diff->count++; -			} -		} -	} -} - -/** - * port_list_add - add a port to a port list, ensuring no duplicates - */ - -static inline void tipc_port_list_add(struct port_list *pl_ptr, u32 port) -{ -	struct port_list *item = pl_ptr; -	int i; -	int item_sz = PLSIZE; -	int cnt = pl_ptr->count; - -	for (; ; cnt -= item_sz, item = item->next) { -		if (cnt < PLSIZE) -			item_sz = cnt; -		for (i = 0; i < item_sz; i++) -			if (item->ports[i] == port) -				return; -		if (i < PLSIZE) { -			item->ports[i] = port; -			pl_ptr->count++; -			return; -		} -		if (!item->next) { -			item->next = kmalloc(sizeof(*item), GFP_ATOMIC); -			if (!item->next) { -				warn("Incomplete multicast delivery, no memory\n"); -				return; -			} -			item->next->next = NULL; -		} -	} -} - -/** - * port_list_free - free dynamically created entries in port_list chain - * - * Note: First item is on stack, so it doesn't need to be released - */ - -static inline void tipc_port_list_free(struct port_list *pl_ptr) -{ -	struct port_list *item; -	struct port_list *next; - -	for (item = pl_ptr->next; item; item = next) { -		next = item->next; -		kfree(item); -	} -} +void tipc_nmap_diff(struct tipc_node_map *nm_a, struct tipc_node_map *nm_b, +				  struct tipc_node_map *nm_diff); +void tipc_port_list_add(struct port_list *pl_ptr, u32 port); +void tipc_port_list_free(struct port_list *pl_ptr);  int  tipc_bclink_init(void);  void tipc_bclink_stop(void);  | 
